Adicionando mais tiles a visão do jogador!

Refe
Por Refe
em Tutoriais de Clients

Refe

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/07/10Posts: 645Gênero: Masculino

Hoje eu vim ensinar como aumenta a "tela" de jogo do OTCLIENT

981068_545153415659600_54616972053500071

(Desculpe o merchant, era a unica imagem que eu tinha salvo)

Testado em : 0.3.6pl1, Pode funcionar em 1.0 com alterações pequenas.

Em protocolgame.cpp ache:

  return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) &&
     (y >= myPos.y - 6 + offsetz) && (y <= myPos.gety + 7 + offsetz));

e troque por:

	return ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) &&
     (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz));

Agora, continuando em protocolgame.cpp ache:

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

E troque por:

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

Continuando em protocolgame.cpp ache a função:

void ProtocolGame::sendMoveCreature(const Creature* creature, const Tile* newTile, const Position& newPos,
	uint32_t newStackpos, const Tile* oldTile, const Position& oldPos, uint32_t oldStackpos, bool teleport)

Dentro da função encontre:

A parte que começa em

if (oldPos.y > newPos.y) 
{


e Termina em

   GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg);
}

e troque 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);

Agora ache:

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);

Depedendo da Source, a parte será assim:

 

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);

 

 

Por:

	if(newPos.z == 7) //going to surface
	{
		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);

Agora ache:

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

Depedendo da source será assim:

 

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

 

 

Por:

	else if(newPos.z > 7) //underground, going one floor up (still underground)
	{
		int32_t skip = -1;
 GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1), (Map::maxClientViewportY+1)*2, 3, skip);

Agora ache:

//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);

E troque 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);

Agora ache:

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);

Dependendo da source poderá ser:

 

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);

 

 

e troque por:

	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);

Agora ache:

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);

Depedendo da source pode ser assim:

 

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); 

 

E troque por:

	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);

Agora em map.h edite essa parte como quiser:

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

O modo de Edição é assim:

 

static const int32_t maxViewportX = 11; //Minimo: maxClientViewportX + 2
  static const int32_t maxViewportY = 11; //Minimo: maxClientViewportY + 2
  static const int32_t maxClientViewportX = 8;
  static const int32_t maxClientViewportY = 6; 

Ou seja, se você por 10 em maxClientViewportX você tem que por no minimo 12 em maxClientViewportX

Mais uma coisa, tente por menos de 20, aqui eu testei e crasha o jogo, eu consegui estabilizar em X = 15 e Y = 15

 

Agora em map.cpp do OTCLIENT

Ache:

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

Troque por:

{
   AwareRange range;
   range.left = 8; //Valor que colocou em maxClientViewportX
   range.top = 6; //Valor que colocou em maxClientViewportY
   range.bottom = range.top+1;
   range.right = range.left+1;
   setAwareRange(range);
}

Créditos:

Flatlander - OTLAND - Criação

Ceetros - Tradução

Agora vamos deixar o OTCLIENT lindão.

Troque tudo de modules/game_interface/interface.lua (na pasta do OTCLIENT)

por:

http://pastebin.com/tH7qyreW

(para o tutorial não ficar muito grande botei no pastebin, já que o spoiler tá bugando)

Creditos dessa parte:

Edubart (Criador do OTCLIENT)

Ceetros

 

Caso tenha ajudado, dê um rep+ :)

Contato:

 

 

Email: contato@ceetros.com

Discord: Ceetros#5376

Telegram: @ceetros

 

 

Skulls

Coordenador de Eventos
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 26/02/07Posts: 859Gênero: Masculino

Excelente, parabéns pelo feito e pela iniciativa de compartilhar!
Rep.

Abraços!

Refe

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/07/10Posts: 645Gênero: Masculino

Excelente, parabéns pelo feito e pela iniciativa de compartilhar!

Rep.

 

Abraços!

 

Valeu :)

 

@Topic Adicionei a parte do OTC de deixar ele igual a imagem :)

Contato:

 

 

Email: contato@ceetros.com

Discord: Ceetros#5376

Telegram: @ceetros

 

 

Avronex

Felicidade = (programando) ? 10 : 0
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 19/11/08Posts: 364Gênero: MasculinoChar no Tibia: Avronex Shiolalon

Obrigado cara! Testando aqui jaja volto e digo o resultado!

 

As primeiras modificações tu nao colocou onde é pra fazer-las!

 

Edit1: Estou encontrando apenas isso:

	return (((uint32_t)pos.x >= myPos.x - viewRangeX + offsetz) && ((uint32_t)pos.x <= myPos.x + viewRangeX + offsetz) &&
		((uint32_t)pos.y >= myPos.y - viewRangeY + offsetz) && ((uint32_t)pos.y <= myPos.y + viewRangeY + offsetz));

Refe

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/07/10Posts: 645Gênero: Masculino

 

Obrigado cara! Testando aqui jaja volto e digo o resultado!

 

As primeiras modificações tu nao colocou onde é pra fazer-las!

 

Edit1: Estou encontrando apenas isso:

	return (((uint32_t)pos.x >= myPos.x - viewRangeX + offsetz) && ((uint32_t)pos.x <= myPos.x + viewRangeX + offsetz) &&
		((uint32_t)pos.y >= myPos.y - viewRangeY + offsetz) && ((uint32_t)pos.y <= myPos.y + viewRangeY + offsetz));

Aqui eu consegui achar tudo.

Contato:

 

 

Email: contato@ceetros.com

Discord: Ceetros#5376

Telegram: @ceetros

 

 

Administrador

xTibia 2017
avatar
Administrador
Administrador

INFOS

Grupo: AdministradorRegistrado: 09/07/05Posts: 5780Gênero: Outro

Excelente! Dica: use spoilers para códigos grandes

Reputado

DICA

Utilize botão @UP, no início de seu tópico, para atualizar o destaque de seu tópico em "Tópicos Recentes" na index, fará com que mais pessoas o vejam.

 

 

Avronex

Felicidade = (programando) ? 10 : 0
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 19/11/08Posts: 364Gênero: MasculinoChar no Tibia: Avronex Shiolalon

Aqui eu consegui achar tudo.

 

Essa parte está em protocolgame msm?

Refe

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/07/10Posts: 645Gênero: Masculino

Excelente! Dica: use spoilers para códigos grandes

Reputado

 

eu tentei, mas o tópico todo virou um spoiler.

 

Essa parte está em protocolgame msm?

 

Qual?

Tá tudo em Protocolgame, menos a parte do map.h

Contato:

 

 

Email: contato@ceetros.com

Discord: Ceetros#5376

Telegram: @ceetros

 

 

Developer Berg

Ricardo Berg
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 12/04/15Posts: 655Gênero: MasculinoChar no Tibia: Developer Berg

 

eu tentei, mas o tópico todo virou um spoiler.

 

Qual?

Tá tudo em Protocolgame, menos a parte do map.h

eu também n achei a primeira parte, só achei isso.

return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) &&
		(y >= myPos.y - 6 + offsetz) && (y <= myPos.y + 7 + offsetz));

Refe

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/07/10Posts: 645Gênero: Masculino

 

eu também n achei a primeira parte, só achei isso.

return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) &&
		(y >= myPos.y - 6 + offsetz) && (y <= myPos.y + 7 + offsetz));

Que primeira parte ?

Contato:

 

 

Email: contato@ceetros.com

Discord: Ceetros#5376

Telegram: @ceetros

 

 

Developer Berg

Ricardo Berg
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 12/04/15Posts: 655Gênero: MasculinoChar no Tibia: Developer Berg

Que primeira parte ?

 

essa

return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) &&
     (y >= myPos.y - 6 + offsetz) && (y <= myPos.gety + 7 + offsetz)) {

na minhas sources n tem essa parte, só tem essa

return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) &&
		(y >= myPos.y - 6 + offsetz) && (y <= myPos.y + 7 + offsetz));

SkyLigh

User X
avatar
Lorde
Lorde

INFOS

Grupo: LordeRegistrado: 23/07/12Posts: 2183Char no Tibia: Kissy

Conteúdo top, parabéns.

Att,
Kissy

Refe

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/07/10Posts: 645Gênero: Masculino

 

 

essa

return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) &&
     (y >= myPos.y - 6 + offsetz) && (y <= myPos.gety + 7 + offsetz)) {

na minhas sources n tem essa parte, só tem essa

return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) &&
		(y >= myPos.y - 6 + offsetz) && (y <= myPos.y + 7 + offsetz));

 

É essa mesmo, desculpa, atualizei o topico

Conteúdo top, parabéns.

 

Obrigado.

Contato:

 

 

Email: contato@ceetros.com

Discord: Ceetros#5376

Telegram: @ceetros

 

 

Avronex

Felicidade = (programando) ? 10 : 0
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 19/11/08Posts: 364Gênero: MasculinoChar no Tibia: Avronex Shiolalon

 

eu tentei, mas o tópico todo virou um spoiler.

 

Qual?

Tá tudo em Protocolgame, menos a parte do map.h

 

Entao, consegui fazer tudo como disse, talvez eu possa ter feito algo errado mas compilei sem erro mas quando tento entrar no game o server crasha.

Refe

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/07/10Posts: 645Gênero: Masculino

 

Entao, consegui fazer tudo como disse, talvez eu possa ter feito algo errado mas compilei sem erro mas quando tento entrar no game o server crasha.

Você deve ter feito algo errado...

Contato:

 

 

Email: contato@ceetros.com

Discord: Ceetros#5376

Telegram: @ceetros