Jump to content

Adicionando mais tiles a visão do jogador!


Refe

Recommended Posts

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+ :)

Edited by Danny0
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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));
Edited by Avronex
Link to comment
Share on other sites

 

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

 

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));
Link to comment
Share on other sites

 

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 ?

Link to comment
Share on other sites

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));
Link to comment
Share on other sites

 

 

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.

Link to comment
Share on other sites

 

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.

Link to comment
Share on other sites

 

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...

Link to comment
Share on other sites

×
×
  • Create New...