Get & save keywords with transactions

Also, start setting vendor faction vendor items form list during shop load (hardcoded to just sell/buy armor for now until I implement shop configs).
This commit is contained in:
Tyler Hallada 2021-02-09 23:52:04 -05:00
parent c576a2b885
commit 289ec598d4
5 changed files with 21 additions and 2 deletions

View File

@ -286,6 +286,9 @@ void LoadRefsTask(FFIResult<RawInteriorRefData> result, RE::TESObjectREFR* targe
RE::BGSKeyword* toggle_keyword = data_handler->LookupForm<RE::BGSKeyword>(KEYWORD_TOGGLE, MOD_NAME); RE::BGSKeyword* toggle_keyword = data_handler->LookupForm<RE::BGSKeyword>(KEYWORD_TOGGLE, MOD_NAME);
RE::BGSKeyword* next_keyword = data_handler->LookupForm<RE::BGSKeyword>(KEYWORD_NEXT, MOD_NAME); RE::BGSKeyword* next_keyword = data_handler->LookupForm<RE::BGSKeyword>(KEYWORD_NEXT, MOD_NAME);
RE::BGSKeyword* prev_keyword = data_handler->LookupForm<RE::BGSKeyword>(KEYWORD_PREV, MOD_NAME); RE::BGSKeyword* prev_keyword = data_handler->LookupForm<RE::BGSKeyword>(KEYWORD_PREV, MOD_NAME);
RE::BGSKeyword* vendor_item_armor_keyword = RE::TESForm::LookupByID<RE::BGSKeyword>(KEYWORD_VENDOR_ITEM_ARMOR);
RE::BGSListForm* vendor_items = data_handler->LookupForm<RE::BGSListForm>(FORM_LIST_VENDOR_ITEMS, MOD_NAME);
RE::TESFaction* vendor_services_faction = data_handler->LookupForm<RE::TESFaction>(FACTION_SERVICES_VENDOR, MOD_NAME);
SKSE::RegistrationMap<bool, std::vector<RE::TESObjectREFR*>> successReg = SKSE::RegistrationMap<bool, std::vector<RE::TESObjectREFR*>>(); SKSE::RegistrationMap<bool, std::vector<RE::TESObjectREFR*>> successReg = SKSE::RegistrationMap<bool, std::vector<RE::TESObjectREFR*>>();
successReg.Register(quest, RE::BSFixedString("OnLoadInteriorRefListSuccess")); successReg.Register(quest, RE::BSFixedString("OnLoadInteriorRefListSuccess"));
@ -457,6 +460,13 @@ void LoadRefsTask(FFIResult<RawInteriorRefData> result, RE::TESObjectREFR* targe
return; return;
} }
} }
// TODO: load shop vendor(s)
// TODO: load these values from shop config data
vendor_items->ClearData();
vendor_items->AddForm(vendor_item_armor_keyword);
vendor_services_faction->vendorData.vendorValues.notBuySell = false;
} else { } else {
const char * error = result.AsErr(); const char * error = result.AsErr();
logger::error(FMT_STRING("LoadInteriorRefList get_interior_ref_list error: {}"), error); logger::error(FMT_STRING("LoadInteriorRefList get_interior_ref_list error: {}"), error);

View File

@ -941,6 +941,7 @@ RE::BGSKeywordForm* LookupKeywordForm(RE::FormID form_id, RE::FormType form_type
break; break;
} default: } default:
logger::warn(FMT_STRING("LookupKeywordForm form cannot have keywords with form_id: {:x} and form_type: {:x}"), (uint32_t)form_id, (uint32_t)form_type); logger::warn(FMT_STRING("LookupKeywordForm form cannot have keywords with form_id: {:x} and form_type: {:x}"), (uint32_t)form_id, (uint32_t)form_type);
return nullptr;
} }
} }
@ -949,7 +950,7 @@ std::vector<const char*> GetKeywords(RE::FormID form_id, RE::FormType form_type)
RE::BGSKeywordForm* keyword_form = LookupKeywordForm(form_id, form_type); RE::BGSKeywordForm* keyword_form = LookupKeywordForm(form_id, form_type);
if (!keyword_form) { if (keyword_form == nullptr) {
logger::warn(FMT_STRING("GetKeywords form {:x} type: {:x} is not a keyword form"), (uint32_t)form_id, (uint32_t)form_type); logger::warn(FMT_STRING("GetKeywords form {:x} type: {:x} is not a keyword form"), (uint32_t)form_id, (uint32_t)form_type);
return keywords; return keywords;
} }

View File

@ -45,3 +45,4 @@ bool CreateMerchandiseList(
int GetMerchandiseQuantity(RE::StaticFunctionTag*, RE::TESObjectREFR* activator); int GetMerchandiseQuantity(RE::StaticFunctionTag*, RE::TESObjectREFR* activator);
int GetMerchandisePrice(RE::StaticFunctionTag*, RE::TESObjectREFR* activator); int GetMerchandisePrice(RE::StaticFunctionTag*, RE::TESObjectREFR* activator);
int GetMerchandiseSellPrice(RE::StaticFunctionTag*, RE::TESForm* form); int GetMerchandiseSellPrice(RE::StaticFunctionTag*, RE::TESForm* form);
std::vector<const char*> GetKeywords(RE::FormID form_id, RE::FormType form_type);

View File

@ -1,5 +1,6 @@
#include "bindings.h" #include "bindings.h"
#include "utils.h" #include "utils.h"
#include "BRMerchandiseList.h"
void CreateTransactionImpl( void CreateTransactionImpl(
RE::BSFixedString api_url, RE::BSFixedString api_url,
@ -46,8 +47,9 @@ void CreateTransactionImpl(
// if (extra_quantity_price) { // if (extra_quantity_price) {
// price = extra_quantity_price->pad14; // price = extra_quantity_price->pad14;
// } // }
std::vector<const char*> keywords = GetKeywords(form_id, merch_base->GetFormType());
RawTransaction input_transaction = { 0, shop_id, mod_name, local_form_id, name, form_type, is_food, price, is_sell, quantity, amount }; RawTransaction input_transaction = { 0, shop_id, mod_name, local_form_id, name, form_type, is_food, price, is_sell, quantity, amount, &keywords[0], keywords.size() };
FFIResult<RawTransaction> result = create_transaction(api_url.c_str(), api_key.c_str(), input_transaction); FFIResult<RawTransaction> result = create_transaction(api_url.c_str(), api_key.c_str(), input_transaction);
if (result.IsOk()) { if (result.IsOk()) {
RawTransaction saved_transaction = result.AsOk(); RawTransaction saved_transaction = result.AsOk();

View File

@ -8,5 +8,10 @@ constexpr uint32_t KEYWORD_NEXT = 0x00351c;
constexpr uint32_t KEYWORD_PREV = 0x00351d; constexpr uint32_t KEYWORD_PREV = 0x00351d;
constexpr uint32_t KEYWORD_ITEM = 0x003517; constexpr uint32_t KEYWORD_ITEM = 0x003517;
constexpr uint32_t KEYWORD_ACTIVATOR = 0x004AA8; constexpr uint32_t KEYWORD_ACTIVATOR = 0x004AA8;
constexpr uint32_t KEYWORD_VENDOR_ITEM_ARMOR = 0x008F959;
constexpr uint32_t ACTIVATOR_STATIC = 0x002a3b; constexpr uint32_t ACTIVATOR_STATIC = 0x002a3b;
constexpr uint32_t FORM_LIST_VENDOR_ITEMS = 0x0075CA;
constexpr uint32_t FACTION_SERVICES_VENDOR = 0x005AD4;