From 960ea3d96c9685add3c7c4ec72daa9704570c4c9 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 8 Aug 2013 04:11:34 -0700 Subject: [PATCH] Add/remove a WerewolfRobe when werewolf form is toggled --- apps/openmw/mwworld/worldimp.cpp | 34 +++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index cbf0fcc2a..caedcc734 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -1871,10 +1871,38 @@ namespace MWWorld npcStats.setWerewolf(werewolf); MWWorld::InventoryStore& invStore = MWWorld::Class::get(actor).getInventoryStore(actor); - if (werewolf) - invStore.unequipAll(actor); + invStore.unequipAll(actor); - if (actor.getRefData().getHandle() == "player") + if(werewolf) + { + ManualRef ref(getStore(), "WerewolfRobe"); + ref.getPtr().getRefData().setCount(1); + + // Configure item's script variables + std::string script = Class::get(ref.getPtr()).getScript(ref.getPtr()); + if(script != "") + { + const ESM::Script *esmscript = getStore().get().find(script); + ref.getPtr().getRefData().setLocals(*esmscript); + } + + // Not sure this is right + InventoryStore &inv = Class::get(actor).getInventoryStore(actor); + inv.equip(InventoryStore::Slot_Robe, inv.add(ref.getPtr(), actor)); + } + else + { + ContainerStore &store = Class::get(actor).getContainerStore(actor); + + const std::string item = "WerewolfRobe"; + for(ContainerStoreIterator iter(store.begin());iter != store.end();++iter) + { + if(Misc::StringUtils::ciEqual(iter->getCellRef().mRefID, item)) + iter->getRefData().setCount(0); + } + } + + if(actor.getRefData().getHandle() == "player") { // Update the GUI only when called on the player MWBase::WindowManager* windowManager = MWBase::Environment::get().getWindowManager();