Merge branch 'remove-water-walking-teleport-underwater' into 'master'

teleporting to an underwater marked location will remove water walking spell effects from actor

Closes #7122

See merge request OpenMW/openmw!2656
7220-lua-add-a-general-purpose-lexical-parser
psi29a 2 years ago
commit 8b0e55dd5f

@ -102,6 +102,7 @@ Programmers
Jacob Turnbull (Tankinfrank)
Jake Westrip (16bitint)
James Carty (MrTopCat)
James Deciutiis (JamesDeciutiis)
James Moore (moore.work)
James Stephens (james-h-stephens)
Jan-Peter Nilsson (peppe)

@ -33,6 +33,7 @@
Bug #7054: Quests aren't sorted by name
Bug #7084: Resurrecting an actor doesn't take into account base record changes
Bug #7088: Deleting last save game of last character doesn't clear character name/details
Bug #7122: Teleportation to underwater should cancel active water walking effect
Bug #7172: Current music playlist continues playing indefinitely if next playlist is empty
Feature #5492: Let rain and snow collide with statics
Feature #6447: Add LOD support to Object Paging

@ -1,11 +1,13 @@
#include "actionteleport.hpp"
#include <components/esm3/loadcell.hpp>
#include <components/esm3/loadmgef.hpp>
#include "../mwbase/environment.hpp"
#include "../mwbase/mechanicsmanager.hpp"
#include "../mwbase/world.hpp"
#include "../mwmechanics/actorutil.hpp"
#include "../mwmechanics/creaturestats.hpp"
#include "../mwworld/cellstore.hpp"
@ -45,6 +47,7 @@ namespace MWWorld
MWBase::World* world = MWBase::Environment::get().getWorld();
MWWorld::WorldModel* worldModel = MWBase::Environment::get().getWorldModel();
actor.getClass().getCreatureStats(actor).land(actor == world->getPlayerPtr());
if (actor == world->getPlayerPtr())
{
world->getPlayer().setTeleported(true);
@ -65,6 +68,10 @@ namespace MWWorld
else
world->moveObject(actor, worldModel->getInterior(mCellName), mPosition.asVec3(), true, true);
}
if (!world->isWaterWalkingCastableOnTarget(actor) && MWMechanics::hasWaterWalking(actor))
actor.getClass().getCreatureStats(actor).getActiveSpells().purgeEffect(
actor, ESM::MagicEffect::WaterWalking);
}
void ActionTeleport::getFollowers(

Loading…
Cancel
Save