Jump to content

Pago pela resolução


Mário.
 Share

Recommended Posts

Bem, vejo-me obrigado a fazer este tópico por vários fatores, sendo uma delas a falta de tempo.

Ontem este tópico:

No entanto foi despropositado, pois tal como este que irei apresentar, não passou de um simples erro que acabei por resolver e também dar a solução para os que forem ter no futuro, porém, tal como disse no começo, não tenho tido mesmo tempo de sobra para poder dedicar-me a isto e peço a vossa ajuda a quem souber resolver isto.


Por algum motivo, sempre que tento teleportar, o personagem fica desta forma:

8em9SoE.jpg

 

O syserr diz o seguinte:

SYSERR: Dec  2 20:30:15.320040 :: Analyze: login phase does not handle this packet! header 3
SYSERR: Dec  2 20:30:15.320999 :: Process: SEQUENCE 295e5800 mismatch 0xca != 0x2f header 3
SYSERR: Dec  2 20:30:15.321020 :: Process: SEQUENCE_LOG [UNKNOWN]-------------

Ora, o header 3 refere-se ao HEADER_CG_MOVE no entanto não fiz nenhuma alteração nesse campo e não entendo o porquê disto.

Com uma curta pesquisa, percebi que para "solucionar" o primeiro erro que aparece era somente acrescentar "case HEADER_CG_MOVE: break;" no input_login.cpp, e isso acabou por fazer "desaparecer" o mesmo do syserr, porém o erro da sequência não termina.

Já testei alterar por completo a tabela de sequência por diffs e (in)felizmente não deu certo - se temos a disponibilidade de source, porquê usar diffs -, as sequências foram editadas com sucesso mas o erro persistiu.

Considero o erro simples e sei que haverá alguma pessoa aqui que tem a solução (o facto de ser simples não significa que seja fácil).

 

Como ninguém neste mundo gosta de perder tempo de graça, ofereço um valor monetário a quem conseguir ajudar-me a resolver o problema.

Ficarei à vossa espera!

 

Link to comment
Share on other sites

Do servidor:

HEADER_GC_MOVE					= 3,

Do cliente:

HEADER_GC_CHARACTER_MOVE					= 3,

 

Aqui fica os packets do servidor e do cliente, respetivamente:

https://pastebin.com/0X70CwDY

https://pastebin.com/DVFFB0gn


char.cpp possui exatamente isso:

void EncodeMovePacket(TPacketGCMove & pack, DWORD dwVID, BYTE bFunc, BYTE bArg, DWORD x, DWORD y, DWORD dwDuration, DWORD dwTime, BYTE bRot)
{
	pack.bHeader = HEADER_GC_MOVE;
	pack.bFunc   = bFunc;
	pack.bArg    = bArg;
	pack.dwVID   = dwVID;
	pack.dwTime  = dwTime ? dwTime : get_dword_time();
	pack.bRot    = bRot;
	pack.lX		= x;
	pack.lY		= y;
	pack.dwDuration	= dwDuration;
}

 

input_main.cpp possui o mesmo:

	pack.bHeader      = HEADER_GC_MOVE;
	pack.bFunc        = pinfo->bFunc;
	pack.bArg         = pinfo->bArg;
	pack.bRot         = pinfo->bRot;
	pack.dwVID        = ch->GetVID();
	pack.lX           = pinfo->lX;
	pack.lY           = pinfo->lY;
	pack.dwTime       = pinfo->dwTime;
	pack.dwDuration   = (pinfo->bFunc == FUNC_MOVE) ? ch->GetCurrentMoveDuration() : 0;


Tenho-o neste preciso momento ativado, no entanto com os conselhos que o @znyR tem-me dado, já o desativei para testes porém não consigo sequer entrar visto que a sequência do auth impossibilita o mesmo:

SYSERR: Dec  2 23:51:30.260244 :: Process: UNKNOWN HEADER: 221, LAST HEADER: 0(0), REMAIN BYTES: 72, fd: 15
SYSERR: Dec  2 23:51:57.899997 :: Analyze: This phase does not handle this header 13 (0xd)(phase: AUTH)
SYSERR: Dec  2 23:51:57.900040 :: Process: SEQUENCE 28d0a000 mismatch 0xaf != 0x6e header 13
SYSERR: Dec  2 23:51:57.900064 :: Process: SEQUENCE_LOG [UNKNOWN]-------------
 [013 : 0xaf]

 

Link to comment
Share on other sites

Isso tem a ver com a chave 1234abcd ou testtest provavelmente, tem de ser igual em cliente e servidor.

A clientkey (diferente do pong acima) e usada também na sequencia,caso seja diferente de servidor/cliente dará esses erros também

Já não estou no pc, só posso ver amanha a noite ou 2f de madrugada

Link to comment
Share on other sites

17 horas atrás, Tierri Lopes disse:

Isso tem a ver com a chave 1234abcd ou testtest provavelmente, tem de ser igual em cliente e servidor.

A clientkey (diferente do pong acima) e usada também na sequencia,caso seja diferente de servidor/cliente dará esses erros também

Já não estou no pc, só posso ver amanha a noite ou 2f de madrugada

Tens razão, mudei a chave do cliente e consegui entrar, no entanto o erro persiste:

SYSERR: Dec  3 18:22:48.610100 :: Analyze: login phase does not handle this packet! header 3
SYSERR: Dec  3 18:22:48.611197 :: Process: SEQUENCE 2a222c00 mismatch 0xca != 0x64 header 3
SYSERR: Dec  3 18:22:48.611240 :: Process: SEQUENCE_LOG [UNKNOWN]-------------
	[109 : 0xaf]
	[003 : 0xca]

 

Link to comment
Share on other sites

11 minutos atrás, Requiem disse:

Tenta seguir este tópico, pode ser que te ajude.

Metin2DEV

Obrigado pela ajuda mas esse foi um dos primeiros tópicos que encontrei e de nada me serviu.

Eu consigo fazer com que o erro pare de aparecer, mas ele continua a existir, tal como um rapaz disse no tópico:

Citar

I think this just disables it so it not showed in syserr, but the error is still going on the server background.

 

Link to comment
Share on other sites

O primeiro erro como disseste, é só mesmo fazer o que fizeste, não é bem um erro mas um aviso que esse packet não tem codigo especificado

 

Cliente/userinterface/netstream.cpp

sff coloca o que está em:

static BYTE s_bSequenceTable[SEQUENCE_TABLE_SIZE] = {

game/sequence.cpp

sff coloca o que está em:

const BYTE gc_abSequence[SEQUENCE_MAX_NUM] =

 

Se isso estiver ok então amanhã vou ler os packets, ver se algo está diferente entre ambos

Link to comment
Share on other sites

Ora, criei uma personagem chama tlthings e acontece o tal erro que tinha dito no início sobre o selecionar a personagem, ela fica apenas assim (sem qualquer erro no syserr, tanto no auth como na db):

image.thumb.png.d31afff6f5f2c3720ac809266ce7b7d1.png

A acontecer isto, sou obrigado a sair da conta e a entrar de novo para conseguir entrar.

No entanto o erro persiste somente se fizer teleportar (/go c):

image.thumb.png.cc4f31f53b20073966dcae5dd2373f87.png

 

 

OBS: Uma observação, apesar de considerar irrelevante, antes aparecia o nível e o karma do jogador assim que criasse a personagem e agora não aparece, só se alterar ou relogar (talvez tenha a ver com erro?)

image.thumb.png.d766e0f7d60ed0f58f13967294218b08.png


14 horas atrás, trample disse:

certeza qe no sysser so aparece este erro? ou tem algo a mais se possivel compartilha aii

Perdão, não tinha visto a resposta!

Com certeza absoluta o erro apenas refere-se a isso:

image.thumb.png.c478138c71b47234f88ed95b1b06a9e0.png

 

Link to comment
Share on other sites

1 hora atrás, Tierri Lopes disse:

«dwNewIsGuildName»

Isto é aquele sistema de mostrar o lider, general, etc das guilds acima da personagem? O do vegas?

Experimenta desativá-lo sff

O erro persiste meu amigo!

 

40 minutos atrás, Sinval disse:

A um tempo atrás eu tentei resolver isso de toda forma possível, cheguei até a pagar por uma "correção", ficou mais estável mas não muda muita coisa, sempre vai ter problemas. Tenha cuidado que muita gente diz que corrigi, cata a grana e vaza. (Eu desisti de resolver.) 

Se for para pagar, será somente depois do problema for resolvido mas obrigado pelas palavras

Em caso de não existir solução até sexta, terei que levar a cabo o plano B e desistir disto

Link to comment
Share on other sites

  • 2 months later...
Citar

Considero o erro simples e sei que haverá alguma pessoa aqui que tem a solução (o facto de ser simples não significa que seja fácil).

 

A verdade é essa, depois de tanto tempo já consegui descobrir a solução para tal erro, por isso lembrei logo deste tópico e decidi postar aqui invés de criar outro:

login phase does not handle this packet! header 3

 

Este erro refere-se que a fase/passagem do login não consegue suportar um packet que não está inserido do int CInputLogin::Analyze(LPDESC d, BYTE bHeader, const char * c_pData):

	default:
			sys_err("login phase does not handle this packet! header %d", bHeader);

A partir daqui, declaramos que é por default que apareça sempre um erro derivado a um header que o game não consegue analisar nem comunicar de volta para o cliente.

Lembrando que são só headers GC (Game to Client) e CG( Client to Game) sendo improvável de ser DG (visto tratar da Database para Game respetivamente)  - se for, alguma coisa de incomum tem o vosso game -.

 

Analisando pelo número que nos é dado (3), através do packet.h, procuramos pelo header que se iguala pelo mesmo, sendo o nosso:

HEADER_GC_MOVE

 

Agora, para o game analisar corretamente o header a sair para o cliente, é necessário inserir o seguinte no int CInputLogin::Analyze(LPDESC d, BYTE bHeader, const char * c_pData):

case HEADER_CG_MOVE:
			break;

 

No entanto se acontecer estes tipos de erros:

Analyze: Handshake phase does not handle packet 66

 

Façam a mesma coisa mas insiram no int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData) - input.cpp:

else if (bHeader == HEADER_CG_SCRIPT_BUTTON)
		sys_log("This is a kind of fix for the error: Handshake phase does not handle packet 66");

 

Edited by Mário.
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...