CS
pedido

Limitar quantidade de item no chão

Por cs007, 07 de jan. de 2013 em Resolvidos

19
2.6k
cs007C
07 de janeiro de 2013 às 14:52

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+

OneshotO
07 de janeiro de 2013 às 19:12

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 Janeiro 7 por Oneshot

cs007C
07 de janeiro de 2013 às 20:09

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

OneshotO
07 de janeiro de 2013 às 20:17

Qual a versão do seu servidor, esqueci de dizer que essa modificação, fiz com base no 0.3.6pl1, o que pode mudar para o 0.4

SkymagnumS
07 de janeiro de 2013 às 20:32

Vai no config.lua e procura por maxItemsPerPZTile = 0, só funciona em área pz pra fazer em non-pz tem que ter a função onMoveItem.

cs007C
08 de janeiro de 2013 às 00:31

Meu server é versão 8.60 uso tfs 0.4

OneshotO
08 de janeiro de 2013 às 13:21

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.

cs007C
08 de janeiro de 2013 às 16:02

Tipow eu só fiz a modificação que está acima. Qual arquivo você editou na source? Abraço

RutserzimR
08 de janeiro de 2013 às 16:03

se usa 0.4 vai no config.lua que vai ter tileLimit lá '--------------'

no 0.3.6pl1 precisa adicionar uma linha que tá faltando pra funcionar

cs007C
08 de janeiro de 2013 às 16:32

Coloquei o tileLimit mas mesmo assim dá para jogar um monte de item em cima.

OneshotO
08 de janeiro de 2013 às 16:44

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.

brun123B
08 de janeiro de 2013 às 18:13

e tem que compilador o servidor e trocar o executável, não é só editar o arquivo não

OneshotO
08 de janeiro de 2013 às 18:22

e tem que compilador o servidor e trocar o executável, não é só editar o arquivo não

 

No caso, acho que fica subentendido isso, né...

cs007C
08 de janeiro de 2013 às 20:09

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 Janeiro 8 por cs007

OneshotO
08 de janeiro de 2013 às 21:21

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.