Ir para conteúdo
  • 0

Limitar quantidade de item no chão


cs007

Pergunta

Pessoal estou com um problema no meu server e um bug que o pessoal fica jogando item em uma porta de level e se ele desconectar ou sai da porta ela da debug em todos que estão a sua volta. Eu queria limitar o numero de item que pode ficar em cima do outro. teria como fazer isso? Valeu REP+

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Há dois modos de fazer isso:

 

1. Compilando isto, [Creaturescript/C++] onMove, nas sources de seu servidor e, indiretamente, através de um script Lua, bloquear que jogadores joguem itens em uma certa posição que já contém X itens.

 

2. Fazendo apenas uma modificação no bool Game::playerMoveItem, adicionando isso:

 

if(toCylinder->getTile()->getItemCount() > 5)
{
   player->sendCancelMessage(RET_NOTPOSSIBLE);
   return false;
}

 

Antes disso:

 

if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
{
    player->sendCancelMessage(RET_CANNOTTHROW);
    return false;
}

 

No caso, ele não deixaria o jogador colocar um item em um tile com mais de cinco itens, mas é só alterar.

 

Abraços.

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

  • 0

o amigo, fiz essa modificação não distro mas mesmo assim consegui jogar mais de 5 obejetos em cima, só me diz uma coisa eu tenho que fazer aquele seu outro tutorial também? pois só com essa modificação não foi. Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Você tem certeza que compilou alguma coisa, meu colega? Pois a estrutura das sources nessa função do 0.3.6 para o 0.4 não muda nada.

 

E eu também testei na rev3777 e funcionou perfeitamente.

 

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Arquivo game.cpp, procure pela linha

 


bool Game::playerMoveItem(uint32_t playerId, const Position& fromPos, uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint8_t count)

 

Dentro da função, procure por:

 

Cylinder* toCylinder = internalGetCylinder(player, toPos);

 

Adicione logo abaixo:

 


if(toCylinder->getTile()->getItemCount() > 5)
{
   player->sendCancelMessage(RET_NOTPOSSIBLE);
   return false;
}

 

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Prefiro nem falar nada sobre o flood do amigo aí de cima.

 

@Oneshot fiz as alterações e compilei e nada. continuo podendo jogar mais que 5 item. Minha source é a trunk.r3884

 

 

Uma duvida é necessário fazer aquele processo que está no seu outro tutorial?

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

  • 0

Não é flood, ele está falando uma coisa séria, até.

 

Bom, cara, não importa a versão. Você está fazendo algo errado aí, pois testei na rev3884 e funcionou muito bem.

 

Delete a pasta obj/ antes de compilar algo novo.

 

Abraços.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...