From dde9b98e4fe7ed2b4f76ccf1734e212b24bbb348 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 02:43:21 -0500 Subject: [PATCH 001/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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/148] 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 4db646db94d86e09648e9535a9324499ab6b9e76 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 8 Apr 2020 16:00:27 -0500 Subject: [PATCH 105/148] 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 106/148] 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 107/148] 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 108/148] 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 109/148] 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 110/148] 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 111/148] 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 112/148] 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 113/148] 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 114/148] 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 115/148] 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 116/148] 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 117/148] 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 118/148] 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 119/148] 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 120/148] 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 5dc351e5d56b1141756e15a673c5aed7fc6eb40f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 24 Apr 2020 02:22:33 -0500 Subject: [PATCH 121/148] 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 122/148] 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 123/148] 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 124/148] 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 03a42543976a9b2483544bf46e080015d66a5c8a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 23 May 2020 22:34:32 -0500 Subject: [PATCH 125/148] 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 126/148] 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 e474df2b126fad8951ba4c9e771f24e1937a43f7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 01:36:17 -0500 Subject: [PATCH 127/148] 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 128/148] 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 12d10bbc50f534f5b0845fa8c2f481c321459473 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 03:08:52 -0500 Subject: [PATCH 129/148] 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 50c266982f0f5284c716b2c92164a9d5f3f89ee3 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 19:21:26 -0500 Subject: [PATCH 130/148] 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 131/148] 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 132/148] 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 133/148] 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 2ec9a2addde9b76ac60307ae4d2e75f7b75dabfd Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 25 May 2020 23:05:05 -0500 Subject: [PATCH 134/148] 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 954b0c5106d187f064f51c13686dd378237236af Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 29 Jun 2020 00:55:53 -0500 Subject: [PATCH 135/148] 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 331eb51126b6046a9fcc075e84d482c028ab0411 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 7 Jul 2020 02:06:00 -0500 Subject: [PATCH 136/148] 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 137/148] 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 138/148] 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 139/148] 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 140/148] 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, 12 Jul 2020 16:57:04 -0500 Subject: [PATCH 141/148] 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 142/148] 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 143/148] 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 144/148] 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 880b19cc7f8c12967a5aa2789a706c615c919a6d Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Jul 2020 13:16:27 -0500 Subject: [PATCH 145/148] 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 146/148] 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 a307636962c54ae93707f35c23036901f455640a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 20 Jul 2020 22:53:58 -0500 Subject: [PATCH 147/148] 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 cfa3e88bb29f164751e147eca9a57ff128c5316a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 30 Jul 2020 21:10:15 -0500 Subject: [PATCH 148/148] 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);