diff --git a/AUTHORS.md b/AUTHORS.md index b8015e55bf..6ebb6f9277 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -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) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9254e3dbc..cbc7ef241b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/apps/openmw/mwworld/actionteleport.cpp b/apps/openmw/mwworld/actionteleport.cpp index 195eaff43d..b86e7440a3 100644 --- a/apps/openmw/mwworld/actionteleport.cpp +++ b/apps/openmw/mwworld/actionteleport.cpp @@ -1,11 +1,13 @@ #include "actionteleport.hpp" #include +#include #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(