forked from teamnwah/openmw-tes3coop
Fix Potion use action removing the potion even when the action is not executed (Fixes #1521)
This commit is contained in:
parent
28feb260eb
commit
8ac019611d
3 changed files with 16 additions and 15 deletions
|
@ -166,13 +166,8 @@ namespace MWClass
|
|||
MWWorld::LiveCellRef<ESM::Potion> *ref =
|
||||
ptr.get<ESM::Potion>();
|
||||
|
||||
MWWorld::Ptr actor = MWBase::Environment::get().getWorld()->getPlayerPtr();
|
||||
|
||||
// remove used potion (assume it is present in inventory)
|
||||
ptr.getContainerStore()->remove(ptr, 1, actor);
|
||||
|
||||
boost::shared_ptr<MWWorld::Action> action (
|
||||
new MWWorld::ActionApply (actor, ref->mBase->mId));
|
||||
new MWWorld::ActionApply (ptr, ref->mBase->mId));
|
||||
|
||||
action->setSound ("Drink");
|
||||
|
||||
|
|
|
@ -6,30 +6,36 @@
|
|||
#include "../mwbase/environment.hpp"
|
||||
#include "../mwbase/world.hpp"
|
||||
|
||||
#include "../mwworld/containerstore.hpp"
|
||||
|
||||
namespace MWWorld
|
||||
{
|
||||
ActionApply::ActionApply (const Ptr& target, const std::string& id)
|
||||
: Action (false, target), mId (id)
|
||||
ActionApply::ActionApply (const Ptr& object, const std::string& id)
|
||||
: Action (false, object), mId (id)
|
||||
{}
|
||||
|
||||
void ActionApply::executeImp (const Ptr& actor)
|
||||
{
|
||||
MWBase::Environment::get().getWorld()->breakInvisibility(actor);
|
||||
|
||||
getTarget().getClass().apply (getTarget(), mId, actor);
|
||||
actor.getClass().apply (actor, mId, actor);
|
||||
|
||||
actor.getClass().getContainerStore(actor).remove(getTarget(), 1, actor);
|
||||
}
|
||||
|
||||
|
||||
ActionApplyWithSkill::ActionApplyWithSkill (const Ptr& target, const std::string& id,
|
||||
ActionApplyWithSkill::ActionApplyWithSkill (const Ptr& object, const std::string& id,
|
||||
int skillIndex, int usageType)
|
||||
: Action (false, target), mId (id), mSkillIndex (skillIndex), mUsageType (usageType)
|
||||
: Action (false, object), mId (id), mSkillIndex (skillIndex), mUsageType (usageType)
|
||||
{}
|
||||
|
||||
void ActionApplyWithSkill::executeImp (const Ptr& actor)
|
||||
{
|
||||
MWBase::Environment::get().getWorld()->breakInvisibility(actor);
|
||||
|
||||
if (getTarget().getClass().apply (getTarget(), mId, actor) && mUsageType!=-1)
|
||||
getTarget().getClass().skillUsageSucceeded (actor, mSkillIndex, mUsageType);
|
||||
if (actor.getClass().apply (actor, mId, actor) && mUsageType!=-1)
|
||||
actor.getClass().skillUsageSucceeded (actor, mSkillIndex, mUsageType);
|
||||
|
||||
actor.getClass().getContainerStore(actor).remove(getTarget(), 1, actor);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace MWWorld
|
|||
|
||||
public:
|
||||
|
||||
ActionApply (const Ptr& target, const std::string& id);
|
||||
ActionApply (const Ptr& object, const std::string& id);
|
||||
};
|
||||
|
||||
class ActionApplyWithSkill : public Action
|
||||
|
@ -29,7 +29,7 @@ namespace MWWorld
|
|||
|
||||
public:
|
||||
|
||||
ActionApplyWithSkill (const Ptr& target, const std::string& id,
|
||||
ActionApplyWithSkill (const Ptr& object, const std::string& id,
|
||||
int skillIndex, int usageType);
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue