Ir para conteúdo
Propaganda

Posts Recomendados

  • Administrador

Salve galera, mais um tutorial ai. Vou ensinar a como extender a tela do otclient.

 

Nas sources do servidor:

1° Passo

Spoiler

No arquivo const.h

Procure por

#define NETWORKMESSAGE_MAXSIZE

E substitua por

// Se o seu estiver maior que 24590, não precisa alterar
#define NETWORKMESSAGE_MAXSIZE 24590

Por padrão o valor vem menor, em alguns casos aumentar esse valor resolve alguns problemas.

 

2° Passo

Spoiler

 No arquivo protocolgame.cpp

Procure na função bool ProtocolGame::canSee(int32_t x, int32_t y, int32_t z) const

if ((x >= myPos.getX() - 8 + offsetz) && (x <= myPos.getX() + 9 + offsetz) &&
     (y >= myPos.getY() - 6 + offsetz) && (y <= myPos.getY() + 7 + offsetz)) {

E substitua por

 if ((x >= myPos.getX() - Map::maxClientViewportX + offsetz) && (x <= myPos.getX() + (Map::maxClientViewportX+1) + offsetz) &&
     (y >= myPos.getY() - Map::maxClientViewportY + offsetz) && (y <= myPos.getY() + (Map::maxClientViewportY+1) + offsetz)) {

Procure na função void ProtocolGame::sendMapDescription(const Position& pos)

GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg);

E substitua por

GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg);

Procure na função void ProtocolGame::sendMoveCreature(const Creature* creature, const Position& newPos, int32_t newStackPos, const Position& oldPos, int32_t oldStackPos, bool teleport)

if (oldPos.y > newPos.y) { // north, for old x
   msg.AddByte(0x65);
   GetMapDescription(oldPos.x - 8, newPos.y - 6, newPos.z, 18, 1, msg);
} else if (oldPos.y < newPos.y) { // south, for old x
   msg.AddByte(0x67);
   GetMapDescription(oldPos.x - 8, newPos.y + 7, newPos.z, 18, 1, msg);
}
if (oldPos.x < newPos.x) { // east, [with new y]
   msg.AddByte(0x66);
   GetMapDescription(newPos.x + 9, newPos.y - 6, newPos.z, 1, 14, msg);
} else if (oldPos.x > newPos.x) { // west, [with new y]
   msg.AddByte(0x68);
   GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg);
}

E substitua por

if (oldPos.y > newPos.y) { // north, for old x
   msg.AddByte(0x65);
   GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg);
} else if (oldPos.y < newPos.y) { // south, for old x
   msg.AddByte(0x67);
   GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg);
}
if (oldPos.x < newPos.x) { // east, [with new y]
   msg.AddByte(0x66);
   GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg);
} else if (oldPos.x > newPos.x) { // west, [with new y]
   msg.AddByte(0x68);
   GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg);
}

Procure na função void ProtocolGame::MoveUpCreature(NetworkMessage& msg, const Creature* creature, const Position& newPos, const Position& oldPos)

if (newPos.z == 7) {
   int32_t skip = -1;
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set)
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip);
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip);
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip);
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip);
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip);

E substitua por

if (newPos.z == 7) {
   int32_t skip = -1;
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set)
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip);
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip);
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip);
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip);
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip);

Procure por

else if (newPos.z > 7) {
   int32_t skip = -1;
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.getZ() - 3, 18, 14, 3, skip);

Substitua por

else if (newPos.z > 7) {
   int32_t skip = -1;
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.getZ() - 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip);

Procure por

//moving up a floor up makes us out of sync
//west
msg.AddByte(0x68);
GetMapDescription(oldPos.x - 8, oldPos.y - 5, newPos.z, 1, 14, msg);
//north
msg.AddByte(0x65);
GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg);

Substitua por

//moving up a floor up makes us out of sync
//west
msg.AddByte(0x68);
GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg);
//north
msg.AddByte(0x65);
GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg);

Procure na função void ProtocolGame::MoveDownCreature(NetworkMessage& msg, const Creature* creature, const Position& newPos, const Position& oldPos)

//going from surface to underground
if (newPos.z == 8) {
   int32_t skip = -1;
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip);
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip);
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip);

Substitua por

//going from surface to underground
if (newPos.z == 8) {
   int32_t skip = -1;
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip);
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip);
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip);

Procure por

//going further down
else if (newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) {
   int32_t skip = -1;
   GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip);

Substitua por

//going further down
else if (newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) {
   int32_t skip = -1;
   GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip);

Procure por

//moving down a floor makes us out of sync
//east
msg.addByte(0x66);
GetMapDescription(oldPos.x + 9, oldPos.y - 7, newPos.z, 1, 14, msg);
//south
msg.addByte(0x67);
GetMapDescription(oldPos.x - 8, oldPos.y + 7, newPos.z, 18, 1, msg);

Substitua por

//moving down a floor makes us out of sync
//east
msg.addByte(0x66);
GetMapDescription(oldPos.x + Map::maxClientViewportX+1, oldPos.y - (Map::maxClientViewportY+1), newPos.z, 1, ((Map::maxClientViewportY+1)*2), msg);
//south
msg.addByte(0x67);
GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y + (Map::maxClientViewportY+1), newPos.z, ((Map::maxClientViewportX+1)*2), 1, msg);

Se você estiver usando TFS 0.3.6, procure por

void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos)
{
  msg->put<char>(0x64);
  msg->putPosition(player->getPosition());
  GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg);
}

Substitua por

void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos)
{
  msg->put<char>(0x64);
  msg->putPosition(player->getPosition());
  GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg);
}

Agora finalizamos a parte do protocolgame.cpp

3° Passo

Spoiler

Agora no map.h você pode alterar esses números para o que desejar:

 static const int32_t maxViewportX = 11; //min value: maxClientViewportX + 1
  static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1
  static const int32_t maxClientViewportX = 8;
  static const int32_t maxClientViewportY = 6;

Geralmente:

O maxClientViewport é até onde o cliente pode ver.

O maxViewport é até onde os monstros enxergam.

4° Passo

Spoiler

Agora nas sources do otclient, em map.cpp

Procure por

void Map::resetAwareRange()
{
   AwareRange range;
   range.left = 8;
   range.top = 6;
   range.bottom = 7;
   range.right = 9;
   setAwareRange(range);
}

Substitua por

{
   AwareRange range;
   range.left = 8; //Change this to = maxClientViewportX
   range.top = 6; //Change this to = maxClientViewportY
   range.bottom = range.top+1;
   range.right = range.left+1;
   setAwareRange(range);
}

 

Se você estendeu sua tela e precisa que as criaturas te vejam e "reajam" para você com a nova distância, siga esse passo

Passo extra

Spoiler

Na source do servidor, em creature.cpp

Procure por 

bool Creature::canSee(const Position& myPos, const Position& pos, int32_t viewRangeX, int32_t viewRangeY)
{
   if (myPos.z <= 7) {
       //we are on ground level or above (7 -> 0)
       //view is from 7 -> 0
       if (pos.z > 7) {
           return false;
       }
   } else if (myPos.z >= 8) {
       //we are underground (8 -> 15)
       //view is +/- 2 from the floor we stand on
       if (Position::getDistanceZ(myPos, pos) > 2) {
           return false;
       }
   }

   const int_fast32_t offsetz = myPos.getZ() - pos.getZ();
   return (pos.getX() >= myPos.getX() - viewRangeX + offsetz) && (pos.getX() <= myPos.getX() + viewRangeX + offsetz)
       && (pos.getY() >= myPos.getY() - viewRangeY + offsetz) && (pos.getY() <= myPos.getY() + viewRangeY + offsetz);
}

Substitua por

bool Creature::canSee(const Position& myPos, const Position& pos, int32_t viewRangeX, int32_t viewRangeY)
{
   if (myPos.z <= 7) {
       //we are on ground level or above (7 -> 0)
       //view is from 7 -> 0
       if (pos.z > 7) {
           return false;
       }
   } else if (myPos.z >= 8) {
       //we are underground (8 -> 15)
       //view is +/- 2 from the floor we stand on
       if (Position::getDistanceZ(myPos, pos) > 2) {
           return false;
       }
   }

   const int_fast32_t offsetz = myPos.getZ() - pos.getZ();
   return (pos.getX() >= myPos.getX() - Map::maxViewportX + offsetz) && (pos.getX() <= myPos.getX() + Map::maxViewportX + offsetz)
       && (pos.getY() >= myPos.getY() - Map::maxViewportY + offsetz) && (pos.getY() <= myPos.getY() + Map::maxViewportY + offsetz);
}

 

 

  • Like 21
  • Thanks 8
Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/
Compartilhar em outros sites

  • gutinha mudou o título para [Tutorial] Como extender a tela do otclient e otcv8 (TFS 1.x e 0.3.6)

AEE GUTINHA BORA SER TOP 1 REPUTAÇÃO NESSA BAGAÇA
muito bom tutorial :D

 

  • Like 1
  • Thanks 1
Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-150
Compartilhar em outros sites

  • Administrador

Obrigado pela contribuição 🤌🏼

Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-151
Compartilhar em outros sites

  • 3 semanas atrás...

fiz todo o tutorial e a tela do meu otclient continua original (pequena)

-- 

edit 2:

Rapaziada é o seguinte, mexendo aqui e descobri a seguinte informação, se você possui um mapa muito grande, provavelmente você vai ter problemas caso coloque um valor de NETWORKMESSAGE_MAXSIZE baixo, por exemplo, eu usei o mapa global e simplesmente o cliente crashava ou ficava preto qnd ia pra locais muito distante. Pra isso vc precisa colocar um valor alto, eu recomendo colocar o limite que é de 65535

--

edit 1:

consegui resolver o problema, eu desativei o classic view em options > interface no otcv8.

uma dica, na ultima parte pra configurar o viewport, eu sofri um pouco pra entender como funciona, pq se colocar um número errado o negocio vai bugar, então segue um exemplo pra vocês utilizarem.

Cliente:

    AwareRange range;
    range.left = 16; //Change this to = maxClientViewportX
    range.top = 10; //Change this to = maxClientViewportY
    range.bottom = range.top+1;
    range.right = range.left+1;
    setAwareRange(range);

 

Servidor:

        static constexpr int32_t maxViewportX = 17; //min value: maxClientViewportX + 1
        static constexpr int32_t maxViewportY = 10; //min value: maxClientViewportY + 1
        static constexpr int32_t maxClientViewportX = 16;
        static constexpr int32_t maxClientViewportY = 10;
Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-332
Compartilhar em outros sites

  • 3 semanas atrás...

as vezes pode ser uma pergunta burra ou não kk...mas precisa compilar para saber se funcionou ?

 

Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-512
Compartilhar em outros sites

34 minutos atrás, OTFantasyWorld disse:

as vezes pode ser uma pergunta burra ou não kk...mas precisa compilar para saber se funcionou ?

 

Sim, você precisa realizar as alterações no código fonte do servidor, compilar e testar.

Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-513
Compartilhar em outros sites

4 minutos atrás, Dark disse:

Sim, você precisa realizar as alterações no código fonte do servidor, compilar e testar.

obrigado kk agora vou procurar aprender como compilar kkk

Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-514
Compartilhar em outros sites

  • 1 mês depois...
  • 2 semanas atrás...
  • Administrador
Em 19/10/2023 em 04:36, kingolaf disse:

funciona na base canary?

 

Mano, não foi testado no canary. Então não sei te informar.

Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-825
Compartilhar em outros sites

  • 1 mês depois...
  • 4 meses depois...

Fiz passo a passo igual o tutorial, refiz novamente 3x, e o erro é o mesmo, alguem consegue me da um help sobre isso?

image.png.767f133684701df5d65970aad261a94d.png

Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-2073
Compartilhar em outros sites

  • 1 mês depois...
  • 1 mês depois...
  • 1 mês depois...

oi alguem sabe como compilar essa base ai ? eu tentei estender a tela, mas nao sei compilar , alguem sabe algum tutorial ou me ensine ?

 

Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-3393
Compartilhar em outros sites

  • 3 semanas atrás...
Em 17/08/2023 em 15:00, Dark disse:

fiz todo o tutorial e a tela do meu otclient continua original (pequena)

-- 

edit 2:

Rapaziada é o seguinte, mexendo aqui e descobri a seguinte informação, se você possui um mapa muito grande, provavelmente você vai ter problemas caso coloque um valor de NETWORKMESSAGE_MAXSIZE baixo, por exemplo, eu usei o mapa global e simplesmente o cliente crashava ou ficava preto qnd ia pra locais muito distante. Pra isso vc precisa colocar um valor alto, eu recomendo colocar o limite que é de 65535

--

edit 1:

consegui resolver o problema, eu desativei o classic view em options > interface no otcv8.

uma dica, na ultima parte pra configurar o viewport, eu sofri um pouco pra entender como funciona, pq se colocar um número errado o negocio vai bugar, então segue um exemplo pra vocês utilizarem.

Cliente:

    AwareRange range;
    range.left = 16; //Change this to = maxClientViewportX
    range.top = 10; //Change this to = maxClientViewportY
    range.bottom = range.top+1;
    range.right = range.left+1;
    setAwareRange(range);

 

Servidor:

        static constexpr int32_t maxViewportX = 17; //min value: maxClientViewportX + 1
        static constexpr int32_t maxViewportY = 10; //min value: maxClientViewportY + 1
        static constexpr int32_t maxClientViewportX = 16;
        static constexpr int32_t maxClientViewportY = 10;

me ajuda mn

n consegui no 0.3.6

Link para o comentário
https://tibiadevs.com/forums/topic/28-tutorial-como-extender-a-tela-do-otclient-e-otcv8-tfs-1x-e-036/#findComment-3574
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...