[LIST=1]
[*]bool Player::canWalkthrough(const Creature* creature) const
[*]{
[*] std::vector<int> blocked_tiles = {10552, 3215, 3217, 447, 425, 417};
[*] if(creature == this || creature->isWalkable() ||
[*] (creature->getMaster() && creature->getMaster() != this && canWalkthrough(creature->getMaster())))
[*] return true;
[*] const Player* player = creature->getPlayer();
[*] if(!player)
[*] return false;
[*] if(
[*] (
[*] (
[*] (
[*] (
[*] player->getVocation()->isAttackable() &&
[*] player->getLevel() < (uint32_t)g_config.getNumber(ConfigManager::PROTECTION_LEVEL)
[*] )
[*] || (
[*] player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE) &&
[*] !player->getTile()->hasFlag(TILESTATE_HOUSE)
[*] )
[*] )
[*] ) && player->getTile()->ground && std::find(blocked_tiles.begin(), blocked_tiles.end(), player->getTile()->ground->getID()) != blocked_tiles.end()
[*] ) && (
[*] !player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges)
[*] || player->getAccess() <= getAccess()
[*] )
[*] ) return true;
[*] return (player->isGhost() && getGhostAccess() < player->getGhostAccess())
[*] || (isGhost() && getGhostAccess() > player->getGhostAccess());
[*]}