Você está desconectado.

Conecte-se e veja nossos conteúdos exclusivos!
 

  



[TFS 0.3.6] Player::canWalkthrough

Compartilhe
avatar
Programador Wolf
Banido
Banido

King Coins King Coins : 80
Reputação : 65
Tópicos : 10
Data de Cadastro : 21/07/2016

[TFS 0.3.6] Player::canWalkthrough

Mensagem por Programador Wolf em 23/9/2016, 18:08

Bom muita gente procura esse código, e ao olhar na internet só vi disponível em um fórum porém incompleto então decidi pegar o código e postá-lo com oque faltava.

Esse código é utilizado para que um player passe por outro player evitando tantas reclamações por "trapar" caminho ou algo parecido, vamos lá!

Player.cpp procure por:

Spoiler:
bool Player::canWalkthrough(const Creature* creature) const

Substitua todo o código por:

Spoiler:
bool Player::canWalkthrough(const Creature* creature) const
{
if(creature == this || hasCustomFlag(PlayerCustomFlag_CanWalkthrough) || creature->isWalkable() ||
(creature->getMaster() && creature->getMaster() != this && canWalkthrough(creature->getMaster())))
return true;

const Player* player = creature->getPlayer();
if(!player)
return false;

if((((g_game.getWorldType() == WORLD_TYPE_NO_PVP &&
player->getVocation()->isAttackable()) || player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE) || (player->getVocation()->isAttackable() &&
player->getLevel() < (uint32_t)g_config.getNumber(ConfigManager::PROTECTION_LEVEL))) && player->getTile()->ground) &&
(!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges)
|| player->getAccess() <= getAccess()))
return true;

return (player->isGhost() && getGhostAccess() < player->getGhostAccess())
|| (isGhost() && getGhostAccess() > player->getGhostAccess());
}

Depois vá em const.h e procure por:

Spoiler:
PlayerCustomFlag_CanWearAllAddons, //2^23 = 8388608

E em baixo coloque:

Spoiler:
PlayerCustomFlag_IsWalkable, //2^24 = 16777216
PlayerCustomFlag_CanWalkthrough, //2^25 = 33554433

Provavelmente em muitas sources do tfs 0.3.6, dê não exatamente um erro mais um aviso no player.cpp na função:

Spoiler:
void Player::updateInventoryWeight()

Se o aviso ocorrer substitua a função citada acima por essa:

Spoiler:
void Player::updateInventoryWeight()
{
inventoryWeight = 0.00;

if(!hasFlag(PlayerFlag_HasInfiniteCapacity)){
for(int i = SLOT_FIRST; i < SLOT_LAST; ++i){
Item* item = getInventoryItem((slots_t)i);
if(item){
inventoryWeight += item->getWeight();
}
}
}
}

Só utilize o código acima se ocorrer o "warning/aviso" sobre a função.

Spoiler:
Créditos: Lordbaxx;Zoro (Eu por trazer ao fórum)

Se Ajudei REP+


________________________________________
Não dou Suporte via PM
avatar
GOD Vitor
Administrador
Administrador

King Coins King Coins : 36
Reputação : 13016
Eu sou : Scripter
Tópicos : 261
Data de Cadastro : 26/09/2015
Idade : 19

Re: [TFS 0.3.6] Player::canWalkthrough

Mensagem por GOD Vitor em 23/9/2016, 19:10

Opa, irá ajudar muitos.
Você recebeu 1 REP+.


________________________________________

    Data/hora atual: 23/10/2017, 02:24