mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-20 17:53:53 +00:00
Issue #1029 - Quick keys menu: Select compatible replacement when tool used up
This commit is contained in:
parent
5a287a7e01
commit
30b1da996b
1 changed files with 29 additions and 22 deletions
|
@ -269,8 +269,35 @@ namespace MWGui
|
||||||
|
|
||||||
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
MWWorld::InventoryStore& store = MWWorld::Class::get(player).getInventoryStore(player);
|
MWWorld::InventoryStore& store = MWWorld::Class::get(player).getInventoryStore(player);
|
||||||
MWMechanics::CreatureStats& stats = MWWorld::Class::get(player).getCreatureStats(player);
|
|
||||||
MWMechanics::Spells& spells = stats.getSpells();
|
if (type == Type_Item || type == Type_MagicItem)
|
||||||
|
{
|
||||||
|
MWWorld::Ptr item = *button->getChildAt (0)->getUserData<MWWorld::Ptr>();
|
||||||
|
// make sure the item is available
|
||||||
|
if (item.getRefData ().getCount() < 1)
|
||||||
|
{
|
||||||
|
// Try searching for a compatible replacement
|
||||||
|
std::string id = item.getCellRef().mRefID;
|
||||||
|
|
||||||
|
for (MWWorld::ContainerStoreIterator it = store.begin(); it != store.end(); ++it)
|
||||||
|
{
|
||||||
|
if (Misc::StringUtils::ciEqual(it->getCellRef().mRefID, id))
|
||||||
|
{
|
||||||
|
item = *it;
|
||||||
|
button->getChildAt(0)->setUserData(item);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.getRefData().getCount() < 1)
|
||||||
|
{
|
||||||
|
// No replacement was found
|
||||||
|
MWBase::Environment::get().getWindowManager ()->messageBox (
|
||||||
|
"#{sQuickMenu5} " + MWWorld::Class::get(item).getName(item));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (type == Type_Magic)
|
if (type == Type_Magic)
|
||||||
{
|
{
|
||||||
|
@ -282,15 +309,6 @@ namespace MWGui
|
||||||
{
|
{
|
||||||
MWWorld::Ptr item = *button->getChildAt (0)->getUserData<MWWorld::Ptr>();
|
MWWorld::Ptr item = *button->getChildAt (0)->getUserData<MWWorld::Ptr>();
|
||||||
|
|
||||||
// make sure the item is available
|
|
||||||
if (item.getRefData ().getCount() < 1)
|
|
||||||
{
|
|
||||||
// TODO: Try to find a replacement with the same ID?
|
|
||||||
MWBase::Environment::get().getWindowManager ()->messageBox (
|
|
||||||
"#{sQuickMenu5} " + MWWorld::Class::get(item).getName(item));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action = MWWorld::Class::get(item).use(item);
|
boost::shared_ptr<MWWorld::Action> action = MWWorld::Class::get(item).use(item);
|
||||||
|
|
||||||
action->execute (MWBase::Environment::get().getWorld()->getPlayer().getPlayer());
|
action->execute (MWBase::Environment::get().getWorld()->getPlayer().getPlayer());
|
||||||
|
@ -309,14 +327,6 @@ namespace MWGui
|
||||||
{
|
{
|
||||||
MWWorld::Ptr item = *button->getChildAt (0)->getUserData<MWWorld::Ptr>();
|
MWWorld::Ptr item = *button->getChildAt (0)->getUserData<MWWorld::Ptr>();
|
||||||
|
|
||||||
// make sure the item is available
|
|
||||||
if (item.getRefData ().getCount() == 0)
|
|
||||||
{
|
|
||||||
MWBase::Environment::get().getWindowManager ()->messageBox (
|
|
||||||
"#{sQuickMenu5} " + MWWorld::Class::get(item).getName(item));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// retrieve ContainerStoreIterator to the item
|
// retrieve ContainerStoreIterator to the item
|
||||||
MWWorld::ContainerStoreIterator it = store.begin();
|
MWWorld::ContainerStoreIterator it = store.begin();
|
||||||
for (; it != store.end(); ++it)
|
for (; it != store.end(); ++it)
|
||||||
|
@ -335,9 +345,6 @@ namespace MWGui
|
||||||
|
|
||||||
MWWorld::ActionEquip action(item);
|
MWWorld::ActionEquip action(item);
|
||||||
action.execute (MWBase::Environment::get().getWorld ()->getPlayer ().getPlayer ());
|
action.execute (MWBase::Environment::get().getWorld ()->getPlayer ().getPlayer ());
|
||||||
|
|
||||||
// since we changed equipping status, update the inventory window
|
|
||||||
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->updateItemView();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
store.setSelectedEnchantItem(it);
|
store.setSelectedEnchantItem(it);
|
||||||
|
|
Loading…
Reference in a new issue