diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 84804f2a5..9faf816fc 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -6127,7 +6127,19 @@ void Player::CheckAreaExploreAndOutdoor() bool isOutdoor; uint16 areaFlag = GetBaseMap()->GetAreaFlag(GetPositionX(),GetPositionY(),GetPositionZ(), &isOutdoor); - if (sWorld.getConfig(CONFIG_BOOL_VMAP_INDOOR_CHECK) && !isOutdoor) + if (isOutdoor) + { + if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && GetRestType() == REST_TYPE_IN_TAVERN) + { + AreaTriggerEntry const* at = sAreaTriggerStore.LookupEntry(inn_trigger_id); + if (!at || !IsPointInAreaTriggerZone(at, GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ())) + { + // Player left inn (REST_TYPE_IN_CITY overrides REST_TYPE_IN_TAVERN, so just clear rest) + SetRestType(REST_TYPE_NO); + } + } + } + else if (sWorld.getConfig(CONFIG_BOOL_VMAP_INDOOR_CHECK) && !isGameMaster()) RemoveAurasWithAttribute(SPELL_ATTR_OUTDOORS_ONLY); if (areaFlag==0xffff) @@ -6738,20 +6750,9 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea) if(zone->flags & AREA_FLAG_CAPITAL) // in capital city SetRestType(REST_TYPE_IN_CITY); - else // anywhere else - { - if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING)) // but resting (walk from city or maybe in tavern or leave tavern recently) - { - if (GetRestType()==REST_TYPE_IN_TAVERN) // has been in tavern. Is still in? - { - AreaTriggerEntry const* at = sAreaTriggerStore.LookupEntry(inn_trigger_id); - if (!at || !IsPointInAreaTriggerZone(at, GetMapId(), GetPositionX(), GetPositionY(), GetPositionY())) - SetRestType(REST_TYPE_NO); - } - else // not in tavern (leave city then) - SetRestType(REST_TYPE_NO); - } - } + else if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && GetRestType() != REST_TYPE_IN_TAVERN) + // resting and not in tavern (leave city then); tavern leave handled in CheckAreaExploreAndOutdoor + SetRestType(REST_TYPE_NO); // remove items with area/map limitations (delete only for alive player to allow back in ghost mode) // if player resurrected at teleport this will be applied in resurrect code diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 0d597d7bc..3da421f33 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -4212,7 +4212,8 @@ SpellCastResult Spell::CheckCast(bool strict) if(bg->GetStatus() == STATUS_WAIT_LEAVE) return SPELL_FAILED_DONT_REPORT; - if(m_caster->GetTypeId() == TYPEID_PLAYER && VMAP::VMapFactory::createOrGetVMapManager()->isLineOfSightCalcEnabled()) + if(m_caster->GetTypeId() == TYPEID_PLAYER && !((Player*)m_caster)->isGameMaster() && + VMAP::VMapFactory::createOrGetVMapManager()->isLineOfSightCalcEnabled()) { if(m_spellInfo->Attributes & SPELL_ATTR_OUTDOORS_ONLY && !m_caster->GetMap()->IsOutdoors(m_caster->GetPositionX(), m_caster->GetPositionY(), m_caster->GetPositionZ())) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8cb0aa910..958a8e02a 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10297" + #define REVISION_NR "10298" #endif // __REVISION_NR_H__