Skip to content

Commit

Permalink
Merge branch 'remove-water-walking-teleport-underwater' into 'master'
Browse files Browse the repository at this point in the history
teleporting to an underwater marked location will remove water walking spell effects from actor

Closes #7122

See merge request OpenMW/openmw!2656
  • Loading branch information
psi29a committed Feb 4, 2023
2 parents 822c6ac + 273a2ae commit 8b0e55d
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions apps/openmw/mwworld/actionteleport.cpp
Original file line number Diff line number Diff line change
@@ -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"
Expand Down Expand Up @@ -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);
Expand All @@ -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(
Expand Down

0 comments on commit 8b0e55d

Please sign in to comment.