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 =
|
MWWorld::LiveCellRef<ESM::Potion> *ref =
|
||||||
ptr.get<ESM::Potion>();
|
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 (
|
boost::shared_ptr<MWWorld::Action> action (
|
||||||
new MWWorld::ActionApply (actor, ref->mBase->mId));
|
new MWWorld::ActionApply (ptr, ref->mBase->mId));
|
||||||
|
|
||||||
action->setSound ("Drink");
|
action->setSound ("Drink");
|
||||||
|
|
||||||
|
|
|
@ -6,30 +6,36 @@
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/world.hpp"
|
#include "../mwbase/world.hpp"
|
||||||
|
|
||||||
|
#include "../mwworld/containerstore.hpp"
|
||||||
|
|
||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
{
|
{
|
||||||
ActionApply::ActionApply (const Ptr& target, const std::string& id)
|
ActionApply::ActionApply (const Ptr& object, const std::string& id)
|
||||||
: Action (false, target), mId (id)
|
: Action (false, object), mId (id)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void ActionApply::executeImp (const Ptr& actor)
|
void ActionApply::executeImp (const Ptr& actor)
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWorld()->breakInvisibility(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)
|
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)
|
void ActionApplyWithSkill::executeImp (const Ptr& actor)
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWorld()->breakInvisibility(actor);
|
MWBase::Environment::get().getWorld()->breakInvisibility(actor);
|
||||||
|
|
||||||
if (getTarget().getClass().apply (getTarget(), mId, actor) && mUsageType!=-1)
|
if (actor.getClass().apply (actor, mId, actor) && mUsageType!=-1)
|
||||||
getTarget().getClass().skillUsageSucceeded (actor, mSkillIndex, mUsageType);
|
actor.getClass().skillUsageSucceeded (actor, mSkillIndex, mUsageType);
|
||||||
|
|
||||||
|
actor.getClass().getContainerStore(actor).remove(getTarget(), 1, actor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace MWWorld
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ActionApply (const Ptr& target, const std::string& id);
|
ActionApply (const Ptr& object, const std::string& id);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ActionApplyWithSkill : public Action
|
class ActionApplyWithSkill : public Action
|
||||||
|
@ -29,7 +29,7 @@ namespace MWWorld
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ActionApplyWithSkill (const Ptr& target, const std::string& id,
|
ActionApplyWithSkill (const Ptr& object, const std::string& id,
|
||||||
int skillIndex, int usageType);
|
int skillIndex, int usageType);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue