From 893d53425ab1381f1cc4f4a81b57d21a2056f082 Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Sun, 21 Aug 2022 17:06:57 -0700 Subject: [PATCH] [Repository] Modernize character recipe list (#2385) --- common/CMakeLists.txt | 2 - .../char_recipe_list_repository.h | 14 +++ .../character_recipe_list_repository.h | 97 ------------------- .../generators/repository-generator.pl | 1 - zone/tradeskills.cpp | 26 ++--- 5 files changed, 28 insertions(+), 112 deletions(-) delete mode 100644 common/repositories/character_recipe_list_repository.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index fadcea7c3..26ec3f482 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -477,8 +477,6 @@ SET(repositories repositories/zone_repository.h repositories/zone_points_repository.h - # Non-Comformative - repositories/character_recipe_list_repository.h ) SET(common_headers diff --git a/common/repositories/char_recipe_list_repository.h b/common/repositories/char_recipe_list_repository.h index 82e5f78f7..9435da6cc 100644 --- a/common/repositories/char_recipe_list_repository.h +++ b/common/repositories/char_recipe_list_repository.h @@ -45,6 +45,20 @@ public: // Custom extended repository methods here + static CharRecipeList GetCharRecipeListEntry( + const std::vector &recipe_list, + uint32 recipe_id + ) + { + for (auto &e : recipe_list) { + if (e.recipe_id == recipe_id) { + return e; + } + } + + return NewEntity(); + } + }; #endif //EQEMU_CHAR_RECIPE_LIST_REPOSITORY_H diff --git a/common/repositories/character_recipe_list_repository.h b/common/repositories/character_recipe_list_repository.h deleted file mode 100644 index 74b607330..000000000 --- a/common/repositories/character_recipe_list_repository.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef EQEMU_CHARACTER_RECIPE_LIST_REPOSITORY_H -#define EQEMU_CHARACTER_RECIPE_LIST_REPOSITORY_H - -#include "../database.h" -#include "../strings.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(Strings::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 NewEntity() - { - 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 NewEntity(); - } - -}; - -#endif //EQEMU_CHARACTER_RECIPE_LIST_REPOSITORY_H diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 09e68dd88..4708beec7 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -132,7 +132,6 @@ foreach my $table_to_generate (@tables) { "character_enabledtasks", # "grid", # Manually created # "tradeskill_recipe", # Manually created - # "character_recipe_list", # Manually created "guild_bank", "inventory_versions", "raid_leaders", diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index 2937a0785..970f47795 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -34,7 +34,7 @@ #include "titles.h" #include "zonedb.h" #include "zone_store.h" -#include "../common/repositories/character_recipe_list_repository.h" +#include "../common/repositories/char_recipe_list_repository.h" #include "../common/repositories/tradeskill_recipe_repository.h" extern QueryServ* QServ; @@ -758,7 +758,11 @@ void Client::SendTradeskillSearchResults( return; } - auto character_learned_recipe_list = CharacterRecipeListRepository::GetLearnedRecipeList(CharacterID()); + + auto character_learned_recipe_list = CharRecipeListRepository::GetWhere( + database, + fmt::format("char_id = {}", CharacterID()) + ); for (auto row = results.begin(); row != results.end(); ++row) { if (row == nullptr || row[0] == nullptr || row[1] == nullptr || row[2] == nullptr || row[3] == nullptr || @@ -777,8 +781,7 @@ void Client::SendTradeskillSearchResults( // 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 - - auto character_learned_recipe = CharacterRecipeListRepository::GetRecipe( + auto character_learned_recipe = CharRecipeListRepository::GetCharRecipeListEntry( character_learned_recipe_list, recipe_id ); @@ -789,7 +792,7 @@ void Client::SendTradeskillSearchResults( LogTradeskills("Checking limit recipe_id [{}] name [{}]", recipe_id, name); - if (character_learned_recipe.made_count == 0) { + if (character_learned_recipe.madecount == 0) { continue; } } @@ -1484,17 +1487,16 @@ bool ZoneDatabase::GetTradeRecipe( 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 + auto r = CharRecipeListRepository::GetWhere( + database, + fmt::format("char_id = {} and recipe_id = {}", char_id, recipe_id) ); - if (character_learned_recipe.recipe_id) { //If this exists we learned it - LogTradeskills("[GetTradeRecipe] made_count [{}]", character_learned_recipe.made_count); + if (!r.empty() && r[0].recipe_id) { //If this exists we learned it + LogTradeskills("[GetTradeRecipe] made_count [{}]", r[0].madecount); spec->has_learnt = true; - spec->madecount = (uint32)character_learned_recipe.made_count; + spec->madecount = (uint32) r[0].madecount; } //Pull the on-success items...