From 1b1de86b4a984b888669eb9017362f67fbe99d7a Mon Sep 17 00:00:00 2001 From: kuyondo Date: Tue, 23 Nov 2021 04:07:10 +0800 Subject: [PATCH 1/5] Validate Quick Keys --- apps/openmw/mwgui/quickkeysmenu.cpp | 69 ++++++++++++++++------------- apps/openmw/mwgui/quickkeysmenu.hpp | 1 + 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/apps/openmw/mwgui/quickkeysmenu.cpp b/apps/openmw/mwgui/quickkeysmenu.cpp index ad61f63b90..5bf5a4df63 100644 --- a/apps/openmw/mwgui/quickkeysmenu.cpp +++ b/apps/openmw/mwgui/quickkeysmenu.cpp @@ -79,42 +79,47 @@ namespace MWGui delete mMagicSelectionDialog; } + // Check if quick keys are still valid + void QuickKeysMenu::validate(MWWorld::Ptr player) + { + MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player); + + for (int i = 0; i < 10; ++i) + { + switch (mKey[i].type) + { + case Type_Unassigned: + case Type_HandToHand: + case Type_Magic: + break; + case Type_Item: + case Type_MagicItem: + { + MWWorld::Ptr item = *mKey[i].button->getUserData(); + // Make sure the item is available and is not broken + if (!item || item.getRefData().getCount() < 1 || + (item.getClass().hasItemHealth(item) && + item.getClass().getItemHealth(item) <= 0)) + { + // Try searching for a compatible replacement + item = store.findReplacement(mKey[i].id); + + if (item) + mKey[i].button->setUserData(MWWorld::Ptr(item)); + + break; + } + } + } + } + } + void QuickKeysMenu::onOpen() { WindowBase::onOpen(); MWWorld::Ptr player = MWMechanics::getPlayer(); - MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player); - - // Check if quick keys are still valid - for (int i=0; i<10; ++i) - { - switch (mKey[i].type) - { - case Type_Unassigned: - case Type_HandToHand: - case Type_Magic: - break; - case Type_Item: - case Type_MagicItem: - { - MWWorld::Ptr item = *mKey[i].button->getUserData(); - // Make sure the item is available and is not broken - if (!item || item.getRefData().getCount() < 1 || - (item.getClass().hasItemHealth(item) && - item.getClass().getItemHealth(item) <= 0)) - { - // Try searching for a compatible replacement - item = store.findReplacement(mKey[i].id); - - if (item) - mKey[i].button->setUserData(MWWorld::Ptr(item)); - - break; - } - } - } - } + validate(player); } void QuickKeysMenu::unassign(keyData* key) @@ -334,6 +339,8 @@ namespace MWGui MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player); const MWMechanics::CreatureStats &playerStats = player.getClass().getCreatureStats(player); + validate(player); + // Delay action executing, // if player is busy for now (casting a spell, attacking someone, etc.) bool isDelayNeeded = MWBase::Environment::get().getMechanicsManager()->isAttackingOrSpell(player) diff --git a/apps/openmw/mwgui/quickkeysmenu.hpp b/apps/openmw/mwgui/quickkeysmenu.hpp index b2742df796..bfb54e5d16 100644 --- a/apps/openmw/mwgui/quickkeysmenu.hpp +++ b/apps/openmw/mwgui/quickkeysmenu.hpp @@ -32,6 +32,7 @@ namespace MWGui void onAssignMagicItem (MWWorld::Ptr item); void onAssignMagic (const std::string& spellId); void onAssignMagicCancel (); + void validate(MWWorld::Ptr player); void onOpen() override; void activateQuickKey(int index); From 503f0e62e7482c4fa4770e4f7d906187c070c2d9 Mon Sep 17 00:00:00 2001 From: kuyondo Date: Tue, 23 Nov 2021 14:55:50 +0800 Subject: [PATCH 2/5] Validate Argument is Index instead of Player --- apps/openmw/mwgui/quickkeysmenu.cpp | 28 ++++++++++++++-------------- apps/openmw/mwgui/quickkeysmenu.hpp | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/openmw/mwgui/quickkeysmenu.cpp b/apps/openmw/mwgui/quickkeysmenu.cpp index 5bf5a4df63..1ada078ab6 100644 --- a/apps/openmw/mwgui/quickkeysmenu.cpp +++ b/apps/openmw/mwgui/quickkeysmenu.cpp @@ -79,14 +79,11 @@ namespace MWGui delete mMagicSelectionDialog; } - // Check if quick keys are still valid - void QuickKeysMenu::validate(MWWorld::Ptr player) + inline void QuickKeysMenu::validate(int index) { + MWWorld::Ptr player = MWMechanics::getPlayer(); MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player); - - for (int i = 0; i < 10; ++i) - { - switch (mKey[i].type) + switch (mKey[index].type) { case Type_Unassigned: case Type_HandToHand: @@ -95,31 +92,34 @@ namespace MWGui case Type_Item: case Type_MagicItem: { - MWWorld::Ptr item = *mKey[i].button->getUserData(); + MWWorld::Ptr item = *mKey[index].button->getUserData(); // Make sure the item is available and is not broken + std::cout << item << std::endl; if (!item || item.getRefData().getCount() < 1 || (item.getClass().hasItemHealth(item) && item.getClass().getItemHealth(item) <= 0)) { // Try searching for a compatible replacement - item = store.findReplacement(mKey[i].id); + item = store.findReplacement(mKey[index].id); if (item) - mKey[i].button->setUserData(MWWorld::Ptr(item)); + mKey[index].button->setUserData(MWWorld::Ptr(item)); break; } } } - } } void QuickKeysMenu::onOpen() { WindowBase::onOpen(); - MWWorld::Ptr player = MWMechanics::getPlayer(); - validate(player); + // Quick key index + for (int index = 0; index < 10; ++index) + { + validate(index); + } } void QuickKeysMenu::unassign(keyData* key) @@ -334,12 +334,12 @@ namespace MWGui assert(index >= 1 && index <= 10); keyData *key = &mKey[index-1]; - + MWWorld::Ptr player = MWMechanics::getPlayer(); MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player); const MWMechanics::CreatureStats &playerStats = player.getClass().getCreatureStats(player); - validate(player); + validate(index-1); // Delay action executing, // if player is busy for now (casting a spell, attacking someone, etc.) diff --git a/apps/openmw/mwgui/quickkeysmenu.hpp b/apps/openmw/mwgui/quickkeysmenu.hpp index bfb54e5d16..4761c98ceb 100644 --- a/apps/openmw/mwgui/quickkeysmenu.hpp +++ b/apps/openmw/mwgui/quickkeysmenu.hpp @@ -32,7 +32,6 @@ namespace MWGui void onAssignMagicItem (MWWorld::Ptr item); void onAssignMagic (const std::string& spellId); void onAssignMagicCancel (); - void validate(MWWorld::Ptr player); void onOpen() override; void activateQuickKey(int index); @@ -77,7 +76,8 @@ namespace MWGui void onQuickKeyButtonClicked(MyGUI::Widget* sender); void onOkButtonClicked(MyGUI::Widget* sender); - + // Check if quick key is still valid + inline void validate(int index); void unassign(keyData* key); }; From d55682f8331508411d277d04e374c7ea7c6abad7 Mon Sep 17 00:00:00 2001 From: kuyondo Date: Tue, 23 Nov 2021 15:14:59 +0800 Subject: [PATCH 3/5] remove debug code --- apps/openmw/mwgui/quickkeysmenu.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/openmw/mwgui/quickkeysmenu.cpp b/apps/openmw/mwgui/quickkeysmenu.cpp index 1ada078ab6..a581a52cc0 100644 --- a/apps/openmw/mwgui/quickkeysmenu.cpp +++ b/apps/openmw/mwgui/quickkeysmenu.cpp @@ -94,7 +94,6 @@ namespace MWGui { MWWorld::Ptr item = *mKey[index].button->getUserData(); // Make sure the item is available and is not broken - std::cout << item << std::endl; if (!item || item.getRefData().getCount() < 1 || (item.getClass().hasItemHealth(item) && item.getClass().getItemHealth(item) <= 0)) From 60a345f5ccf59bfe6485f12f9e201cb6f87fbcb0 Mon Sep 17 00:00:00 2001 From: kuyondo Date: Wed, 24 Nov 2021 01:44:14 +0800 Subject: [PATCH 4/5] Better indentation --- apps/openmw/mwgui/quickkeysmenu.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwgui/quickkeysmenu.cpp b/apps/openmw/mwgui/quickkeysmenu.cpp index a581a52cc0..e55b9b4878 100644 --- a/apps/openmw/mwgui/quickkeysmenu.cpp +++ b/apps/openmw/mwgui/quickkeysmenu.cpp @@ -83,8 +83,8 @@ namespace MWGui { MWWorld::Ptr player = MWMechanics::getPlayer(); MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player); - switch (mKey[index].type) - { + switch (mKey[index].type) + { case Type_Unassigned: case Type_HandToHand: case Type_Magic: @@ -107,7 +107,7 @@ namespace MWGui break; } } - } + } } void QuickKeysMenu::onOpen() From 5ffd077f9ec8fba5fba51ad5cb3a9e645ddfffc1 Mon Sep 17 00:00:00 2001 From: kuyondo Date: Wed, 24 Nov 2021 01:51:03 +0800 Subject: [PATCH 5/5] Update changelog.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d2a67349b..87b2d72770 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -81,6 +81,7 @@ Bug #6396: Inputting certain Unicode characters triggers an assertion Bug #6416: Morphs are applied to the wrong target Bug #6429: Wyrmhaven: Can't add AI packages to player + Bug #6433: Items bound to Quick Keys sometimes do not appear until the Quick Key menu is opened. Feature #890: OpenMW-CS: Column filtering Feature #1465: "Reset" argument for AI functions Feature #2554: Modifying an object triggers the instances table to scroll to the corresponding record