mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-04-01 12:06:43 +00:00
Handle object activation as a werewolf
This commit is contained in:
parent
6110a0ee3b
commit
89c7f5bc70
20 changed files with 116 additions and 124 deletions
|
@ -60,15 +60,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Apparatus::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Apparatus::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(
|
|
||||||
new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Apparatus::getScript (const MWWorld::Ptr& ptr) const
|
std::string Apparatus::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -65,14 +65,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Armor::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Armor::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Armor::hasItemHealth (const MWWorld::Ptr& ptr) const
|
bool Armor::hasItemHealth (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include "../mwworld/ptr.hpp"
|
#include "../mwworld/ptr.hpp"
|
||||||
#include "../mwworld/actionread.hpp"
|
#include "../mwworld/actionread.hpp"
|
||||||
|
#include "../mwworld/failedaction.hpp"
|
||||||
#include "../mwworld/cellstore.hpp"
|
#include "../mwworld/cellstore.hpp"
|
||||||
#include "../mwworld/physicssystem.hpp"
|
#include "../mwworld/physicssystem.hpp"
|
||||||
|
|
||||||
|
@ -17,6 +18,8 @@
|
||||||
|
|
||||||
#include "../mwgui/tooltips.hpp"
|
#include "../mwgui/tooltips.hpp"
|
||||||
|
|
||||||
|
#include "../mwmechanics/npcstats.hpp"
|
||||||
|
|
||||||
namespace MWClass
|
namespace MWClass
|
||||||
{
|
{
|
||||||
void Book::insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const
|
void Book::insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const
|
||||||
|
@ -58,8 +61,15 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Book::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Book::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
return boost::shared_ptr<MWWorld::Action> (
|
if(get(actor).isNpc() && get(actor).getNpcStats(actor).isWerewolf())
|
||||||
new MWWorld::ActionRead (ptr));
|
{
|
||||||
|
boost::shared_ptr<MWWorld::Action> action(new MWWorld::FailedAction("#{sWerewolfRefusal}"));
|
||||||
|
// FIXME: Randomize using all WolfItem* sound records
|
||||||
|
action->setSound("WolfItem1");
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
return boost::shared_ptr<MWWorld::Action>(new MWWorld::ActionRead(ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Book::getScript (const MWWorld::Ptr& ptr) const
|
std::string Book::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -62,14 +62,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Clothing::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Clothing::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Clothing::getScript (const MWWorld::Ptr& ptr) const
|
std::string Clothing::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
#include "../mwrender/objects.hpp"
|
#include "../mwrender/objects.hpp"
|
||||||
#include "../mwrender/renderinginterface.hpp"
|
#include "../mwrender/renderinginterface.hpp"
|
||||||
|
|
||||||
|
#include "../mwmechanics/npcstats.hpp"
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
struct CustomData : public MWWorld::CustomData
|
struct CustomData : public MWWorld::CustomData
|
||||||
|
@ -91,6 +93,14 @@ namespace MWClass
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
||||||
|
|
||||||
|
if(get(actor).isNpc() && get(actor).getNpcStats(actor).isWerewolf())
|
||||||
|
{
|
||||||
|
boost::shared_ptr<MWWorld::Action> action(new MWWorld::FailedAction("#{sWerewolfRefusal}"));
|
||||||
|
// FIXME: Randomize using all WolfContainer* sound records
|
||||||
|
action->setSound("WolfContainer1");
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
const std::string lockedSound = "LockedChest";
|
const std::string lockedSound = "LockedChest";
|
||||||
const std::string trapActivationSound = "Disarm Trap Fail";
|
const std::string trapActivationSound = "Disarm Trap Fail";
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "../mwworld/ptr.hpp"
|
#include "../mwworld/ptr.hpp"
|
||||||
#include "../mwworld/actiontalk.hpp"
|
#include "../mwworld/actiontalk.hpp"
|
||||||
#include "../mwworld/actionopen.hpp"
|
#include "../mwworld/actionopen.hpp"
|
||||||
|
#include "../mwworld/failedaction.hpp"
|
||||||
#include "../mwworld/customdata.hpp"
|
#include "../mwworld/customdata.hpp"
|
||||||
#include "../mwworld/containerstore.hpp"
|
#include "../mwworld/containerstore.hpp"
|
||||||
#include "../mwworld/physicssystem.hpp"
|
#include "../mwworld/physicssystem.hpp"
|
||||||
|
@ -25,6 +26,8 @@
|
||||||
|
|
||||||
#include "../mwgui/tooltips.hpp"
|
#include "../mwgui/tooltips.hpp"
|
||||||
|
|
||||||
|
#include "../mwmechanics/npcstats.hpp"
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
struct CustomData : public MWWorld::CustomData
|
struct CustomData : public MWWorld::CustomData
|
||||||
|
@ -222,10 +225,17 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Creature::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Creature::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (MWWorld::Class::get (ptr).getCreatureStats (ptr).isDead())
|
if(get(actor).isNpc() && get(actor).getNpcStats(actor).isWerewolf())
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::ActionOpen(ptr, true));
|
{
|
||||||
else
|
boost::shared_ptr<MWWorld::Action> action(new MWWorld::FailedAction("#{sWerewolfRefusal}"));
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::ActionTalk (ptr));
|
// FIXME: Randomize using all WolfCreature* sound records
|
||||||
|
action->setSound("WolfCreature1");
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(getCreatureStats(ptr).isDead())
|
||||||
|
return boost::shared_ptr<MWWorld::Action>(new MWWorld::ActionOpen(ptr, true));
|
||||||
|
return boost::shared_ptr<MWWorld::Action>(new MWWorld::ActionTalk(ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
MWWorld::ContainerStore& Creature::getContainerStore (const MWWorld::Ptr& ptr)
|
MWWorld::ContainerStore& Creature::getContainerStore (const MWWorld::Ptr& ptr)
|
||||||
|
|
|
@ -71,14 +71,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Ingredient::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Ingredient::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Ingredient::getScript (const MWWorld::Ptr& ptr) const
|
std::string Ingredient::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -76,20 +76,14 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Light::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Light::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
if(!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
return boost::shared_ptr<MWWorld::Action>(new MWWorld::NullAction());
|
||||||
|
|
||||||
MWWorld::LiveCellRef<ESM::Light> *ref =
|
MWWorld::LiveCellRef<ESM::Light> *ref = ptr.get<ESM::Light>();
|
||||||
ptr.get<ESM::Light>();
|
if(!(ref->mBase->mData.mFlags&ESM::Light::Carry))
|
||||||
|
return boost::shared_ptr<MWWorld::Action>(new MWWorld::FailedAction());
|
||||||
|
|
||||||
if (!(ref->mBase->mData.mFlags & ESM::Light::Carry))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::FailedAction);
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Light::getScript (const MWWorld::Ptr& ptr) const
|
std::string Light::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -61,14 +61,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Lockpick::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Lockpick::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Lockpick::getScript (const MWWorld::Ptr& ptr) const
|
std::string Lockpick::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -77,14 +77,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Miscellaneous::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Miscellaneous::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Miscellaneous::getScript (const MWWorld::Ptr& ptr) const
|
std::string Miscellaneous::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "../mwworld/ptr.hpp"
|
#include "../mwworld/ptr.hpp"
|
||||||
#include "../mwworld/actiontalk.hpp"
|
#include "../mwworld/actiontalk.hpp"
|
||||||
#include "../mwworld/actionopen.hpp"
|
#include "../mwworld/actionopen.hpp"
|
||||||
|
#include "../mwworld/failedaction.hpp"
|
||||||
#include "../mwworld/inventorystore.hpp"
|
#include "../mwworld/inventorystore.hpp"
|
||||||
#include "../mwworld/customdata.hpp"
|
#include "../mwworld/customdata.hpp"
|
||||||
#include "../mwworld/physicssystem.hpp"
|
#include "../mwworld/physicssystem.hpp"
|
||||||
|
@ -562,12 +563,18 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Npc::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Npc::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (MWWorld::Class::get (ptr).getCreatureStats (ptr).isDead())
|
if(get(actor).isNpc() && get(actor).getNpcStats(actor).isWerewolf())
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::ActionOpen(ptr, true));
|
{
|
||||||
else if (MWWorld::Class::get(actor).getStance(actor, MWWorld::Class::Sneak))
|
boost::shared_ptr<MWWorld::Action> action(new MWWorld::FailedAction("#{sWerewolfRefusal}"));
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::ActionOpen(ptr)); // stealing
|
// FIXME: Randomize using all WolfNPC* sound records
|
||||||
else
|
action->setSound("WolfNPC1");
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::ActionTalk (ptr));
|
return action;
|
||||||
|
}
|
||||||
|
if(getCreatureStats(ptr).isDead())
|
||||||
|
return boost::shared_ptr<MWWorld::Action>(new MWWorld::ActionOpen(ptr, true));
|
||||||
|
if(get(actor).getStance(actor, MWWorld::Class::Sneak))
|
||||||
|
return boost::shared_ptr<MWWorld::Action>(new MWWorld::ActionOpen(ptr)); // stealing
|
||||||
|
return boost::shared_ptr<MWWorld::Action>(new MWWorld::ActionTalk(ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
MWWorld::ContainerStore& Npc::getContainerStore (const MWWorld::Ptr& ptr)
|
MWWorld::ContainerStore& Npc::getContainerStore (const MWWorld::Ptr& ptr)
|
||||||
|
|
|
@ -144,8 +144,11 @@ namespace MWClass
|
||||||
|
|
||||||
virtual std::string getModel(const MWWorld::Ptr &ptr) const;
|
virtual std::string getModel(const MWWorld::Ptr &ptr) const;
|
||||||
|
|
||||||
virtual bool
|
virtual bool isActor() const {
|
||||||
isActor() const {
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool isNpc() const {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -63,15 +63,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Potion::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Potion::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(
|
|
||||||
new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound (getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Potion::getScript (const MWWorld::Ptr& ptr) const
|
std::string Potion::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -60,14 +60,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Probe::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Probe::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Probe::getScript (const MWWorld::Ptr& ptr) const
|
std::string Probe::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -60,14 +60,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Repair::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Repair::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Repair::getScript (const MWWorld::Ptr& ptr) const
|
std::string Repair::getScript (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -68,14 +68,7 @@ namespace MWClass
|
||||||
boost::shared_ptr<MWWorld::Action> Weapon::activate (const MWWorld::Ptr& ptr,
|
boost::shared_ptr<MWWorld::Action> Weapon::activate (const MWWorld::Ptr& ptr,
|
||||||
const MWWorld::Ptr& actor) const
|
const MWWorld::Ptr& actor) const
|
||||||
{
|
{
|
||||||
if (!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
return defaultItemActivate(ptr, actor);
|
||||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::NullAction ());
|
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTake (ptr));
|
|
||||||
|
|
||||||
action->setSound(getUpSoundId(ptr));
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Weapon::hasItemHealth (const MWWorld::Ptr& ptr) const
|
bool Weapon::hasItemHealth (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -7,13 +7,20 @@
|
||||||
|
|
||||||
#include <components/esm/defs.hpp>
|
#include <components/esm/defs.hpp>
|
||||||
|
|
||||||
|
#include "../mwbase/environment.hpp"
|
||||||
|
#include "../mwbase/windowmanager.hpp"
|
||||||
|
|
||||||
#include "ptr.hpp"
|
#include "ptr.hpp"
|
||||||
#include "refdata.hpp"
|
#include "refdata.hpp"
|
||||||
#include "nullaction.hpp"
|
#include "nullaction.hpp"
|
||||||
|
#include "failedaction.hpp"
|
||||||
|
#include "actiontake.hpp"
|
||||||
#include "containerstore.hpp"
|
#include "containerstore.hpp"
|
||||||
|
|
||||||
#include "../mwgui/tooltips.hpp"
|
#include "../mwgui/tooltips.hpp"
|
||||||
|
|
||||||
#include "../mwmechanics/creaturestats.hpp"
|
#include "../mwmechanics/creaturestats.hpp"
|
||||||
|
#include "../mwmechanics/npcstats.hpp"
|
||||||
#include "../mwmechanics/magiceffects.hpp"
|
#include "../mwmechanics/magiceffects.hpp"
|
||||||
|
|
||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
|
@ -304,6 +311,25 @@ namespace MWWorld
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<Action> Class::defaultItemActivate(const Ptr &ptr, const Ptr &actor) const
|
||||||
|
{
|
||||||
|
if(!MWBase::Environment::get().getWindowManager()->isAllowed(MWGui::GW_Inventory))
|
||||||
|
return boost::shared_ptr<Action>(new NullAction());
|
||||||
|
|
||||||
|
if(get(actor).isNpc() && get(actor).getNpcStats(actor).isWerewolf())
|
||||||
|
{
|
||||||
|
boost::shared_ptr<MWWorld::Action> action(new MWWorld::FailedAction("#{sWerewolfRefusal}"));
|
||||||
|
// FIXME: Randomize using all WolfItem* sound records
|
||||||
|
action->setSound("WolfItem1");
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<MWWorld::Action> action(new ActionTake(ptr));
|
||||||
|
action->setSound(getUpSoundId(ptr));
|
||||||
|
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
MWWorld::Ptr
|
MWWorld::Ptr
|
||||||
Class::copyToCellImpl(const Ptr &ptr, CellStore &cell) const
|
Class::copyToCellImpl(const Ptr &ptr, CellStore &cell) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,6 +57,9 @@ namespace MWWorld
|
||||||
|
|
||||||
Class();
|
Class();
|
||||||
|
|
||||||
|
boost::shared_ptr<Action> defaultItemActivate(const Ptr &ptr, const Ptr &actor) const;
|
||||||
|
///< Generate default action for activating inventory items
|
||||||
|
|
||||||
virtual Ptr copyToCellImpl(const Ptr &ptr, CellStore &cell) const;
|
virtual Ptr copyToCellImpl(const Ptr &ptr, CellStore &cell) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -286,8 +289,11 @@ namespace MWWorld
|
||||||
virtual Ptr
|
virtual Ptr
|
||||||
copyToCell(const Ptr &ptr, CellStore &cell, const ESM::Position &pos) const;
|
copyToCell(const Ptr &ptr, CellStore &cell, const ESM::Position &pos) const;
|
||||||
|
|
||||||
virtual bool
|
virtual bool isActor() const {
|
||||||
isActor() const {
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool isNpc() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,15 +7,13 @@
|
||||||
|
|
||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
{
|
{
|
||||||
FailedAction::FailedAction (const std::string& msg) : Action (false), message(msg)
|
FailedAction::FailedAction(const std::string &msg)
|
||||||
|
: Action(false), mMessage(msg)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
void FailedAction::executeImp(const Ptr &actor)
|
||||||
void FailedAction::executeImp (const Ptr& actor)
|
|
||||||
{
|
{
|
||||||
if ( actor.getRefData().getHandle()=="player" && !(message.empty()))
|
if(actor.getRefData().getHandle() == "player" && !mMessage.empty())
|
||||||
{
|
MWBase::Environment::get().getWindowManager()->messageBox(mMessage);
|
||||||
MWBase::Environment::get().getWindowManager() ->messageBox(message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,12 +8,12 @@ namespace MWWorld
|
||||||
{
|
{
|
||||||
class FailedAction : public Action
|
class FailedAction : public Action
|
||||||
{
|
{
|
||||||
std::string message;
|
std::string mMessage;
|
||||||
|
|
||||||
virtual void executeImp (const Ptr& actor);
|
virtual void executeImp(const Ptr &actor);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FailedAction (const std::string& message = std::string());
|
FailedAction(const std::string &message = std::string());
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue