diff --git a/lib/spells/AdventureSpellMechanics.cpp b/lib/spells/AdventureSpellMechanics.cpp index 5fa1be1ad..3e5582d33 100644 --- a/lib/spells/AdventureSpellMechanics.cpp +++ b/lib/spells/AdventureSpellMechanics.cpp @@ -346,17 +346,22 @@ ESpellCastResult ViewMechanics::applyAdventureEffects(const SpellCastEnvironment { ShowWorldViewEx pack; - pack.player = parameters.caster->tempOwner; + pack.player = parameters.caster->getOwner(); const int spellLevel = parameters.caster->getSpellSchoolLevel(owner); + const auto & fowMap = env->getCb()->getPlayerTeam(parameters.caster->getOwner())->fogOfWarMap; + for(const CGObjectInstance * obj : env->getMap()->objects) { - //todo:we need to send only not visible objects + //deleted object remain as empty pointer + if(obj && filterObject(obj, spellLevel)) + { + ObjectPosInfo posInfo(obj); - if(obj)//for some reason deleted object remain as empty pointer - if(filterObject(obj, spellLevel)) - pack.objectPositions.push_back(ObjectPosInfo(obj)); + if(fowMap[posInfo.pos.x][posInfo.pos.y][posInfo.pos.z] == 0) + pack.objectPositions.push_back(posInfo); + } } env->sendAndApply(&pack); diff --git a/lib/spells/ViewSpellInt.cpp b/lib/spells/ViewSpellInt.cpp index 27d5c1dbc..950da1447 100644 --- a/lib/spells/ViewSpellInt.cpp +++ b/lib/spells/ViewSpellInt.cpp @@ -15,13 +15,13 @@ #include "../mapObjects/CObjectHandler.h" ObjectPosInfo::ObjectPosInfo(): - pos(),id(Obj::NO_OBJ), subId(-1), owner(PlayerColor::CANNOT_DETERMINE) + pos(), id(Obj::NO_OBJ), subId(-1), owner(PlayerColor::CANNOT_DETERMINE) { } ObjectPosInfo::ObjectPosInfo(const CGObjectInstance * obj): - pos(obj->pos),id(obj->ID), subId(obj->subID), owner(obj->tempOwner) + pos(obj->visitablePos()), id(obj->ID), subId(obj->subID), owner(obj->tempOwner) { }