Ir para conteúdo

Posts Recomendados

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á!



Ah mais uma coisa, para funcionar é preciso que o servidor esteja em NON-PVP.



OBS: Testado em tfs 0.3.6 somente!



Player.cpp procure por:



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




Substitua todo o código por:

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:




PlayerCustomFlag_CanWearAllAddons, //2^23 = 8388608



E em baixo coloque:




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:




void Player::updateInventoryWeight()



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




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.


Abraço.



Os créditos ficam até o momento só ao Bruno Minervino e a fireelement.

Qualquer outro envolvido será creditado.

Editado por Lordbaxx
Link para o comentário
Compartilhar em outros sites

Perfeito manow, funcionou certinho, mas tive que fazer o ultimo passo pq estava dando aviso e não compilava.

Eu estava precisando muito desse código, uma duvida, no caso estou usando um poketibia, e se eu criar a area de dar boost nos pokemons os players não poderam passar pelos outros para nao serem roubados na maquina de boost, como eu faço para nessa area de boost desativar esse sistema? Sera que se eu colocar tile pvp os players nao irao pasar uns pelos outros?

 

Parabens rep+

 

dSa3X5.gif

Editado por Taiger
Link para o comentário
Compartilhar em outros sites

Dá pra você utilizar a tag walkStack no id do tile no items.xml.. Exemplo:

 

 

 <attribute key="walkStack" value="0" />

 

 

Mas antes você precisa modificar mais algumas coisas nas sources:

 

items.cpp procure:

 

 

 moveable = true;

 

Troque por:

 

 

moveable = walkStack = true;

 

ainda em items.cpp procure:

 

 

    else if(tmpStrValue == "transformto")
            {
                if(readXMLInteger(itemAttributesNode, "value", intValue))
                    it.transformToFree = intValue;
            }

 

 

Logo embaixo coloque:

 

 

            else if(tmpStrValue == "walkstack")
            {
                if(readXMLInteger(itemAttributesNode, "value", intValue))
                    it.walkStack = (intValue != 0);
            }

 

items.h procure:

 

 lookThrough,

 

troque por:

 

 lookThrough, walkStack,

 

 

Na função canWalkThrough no player.cpp troque por:

 

 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 &&
        Item::items[player->getTile()->ground->getID()].walkStack) && (!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges)
        || player->getAccess() <= getAccess()))
        return true;

    return (player->isGhost() && getGhostAccess() < player->getGhostAccess())
        || (isGhost() && getGhostAccess() > player->getGhostAccess());
}
Link para o comentário
Compartilhar em outros sites

funcionou, com um erro bobo, no piso onde nao pode passar um pelo outro funcionou de boa, mais ao sair deste piso um dos chars nao pode mais passar por cima do outro, relogando volta ao normal.

 

mais mesmo assim para mim ja ta mais que bom, tu é zica vlw mesmo manow.

 

rep+

 

Quando puder posta um tuto de adicionar duel, nick e clan system que vou ser teu fã kk :)

To parando com pda e mexendo no pokegod base pfield.

Link para o comentário
Compartilhar em outros sites

funcionou, com um erro bobo, no piso onde nao pode passar um pelo outro funcionou de boa, mais ao sair deste piso um dos chars nao pode mais passar por cima do outro, relogando volta ao normal.

 

mais mesmo assim para mim ja ta mais que bom, tu é zica vlw mesmo manow.

 

rep+

 

Quando puder posta um tuto de adicionar duel, nick e clan system que vou ser teu fã kk :)

To parando com pda e mexendo no pokegod base pfield.

Disponha.. Quanto aos sistemas citados, clãn system já tem no fórum, os demais eu posto outra hora, utilizando a função que o caotic postou para o Nick.

Link para o comentário
Compartilhar em outros sites

Os servidores com a versão 8.54 se vc colocar no pvp eles já tem essa função o legal seria se o player também pode se passar pelo pokemon sumonado do player. Como no pxg.

Link para o comentário
Compartilhar em outros sites

Os servidores com a versão 8.54 se vc colocar no pvp eles já tem essa função o legal seria se o player também pode se passar pelo pokemon sumonado do player. Como no pxg.

Cara eu testei aqui e o meu funcionou tb com sumons de player, ainda tenho de fazer mais testes para ver se tem alguma falha, mais a principio funcionou de boa.

 

Editado por Taiger
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
  • 3 months later...

Para usar em modo pvp é bem simples ao invés de usar o primeiro código que citei acima, utilize este:

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_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());
}
Editado por Lordbaxx
Link para o comentário
Compartilhar em outros sites

  • 1 month later...
  • 2 weeks later...
  • 2 months later...

Desculpe - me reviver o tópico, mas eu preciso muito de ajuda.

 

Não estou conseguindo usar nenhum item nos slots.

 

-- edit --

Arrumei o erro, mas ta dando [Warning - Weapons::registerEvent] Duplicate registered item with id: 0

 

&

 

Tem como fz aql tag de walkstack em lua n? pq é a modificação disso na source que esta dando este duplicate...

Poderia ser uma action ou um movement.

 

Por favor me ajude o mais rapido possivel. Agradeço!!

 

Editado por GBs
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...