Another odd problem

12/09/2011 11:30 Spirited#16
Quote:
Originally Posted by Arco. View Post
Lemme clarify something;
When the client disconnects, the source still goes on with everything since the client is still an un-null variable. But when its stuck at initializing, its directly onto the sending of the SetLocation, then the source stops processing said client.
Oh... okay... o.O That sounds bazaar. I'm completely stumped. You said that you don't have these problems at all with male characters... right? Are you sure that the packets are being written properly & that you're receiving and handling them accurately? Have you tried using the default hairstyle (410)? A different cipher that you know works flawlessly? I can't think of anything else. =| You could post your character info and receive void here.
12/09/2011 11:33 Arco.#17
I've tried with a RANGE of hairstyles, and just same outcome.
12/09/2011 11:42 Korvacs#18
Just had a thought, perhaps you should try a different client.
12/09/2011 11:48 Spirited#19
Quote:
Originally Posted by Korvacs View Post
Just had a thought, perhaps you should try a different client.
@Arco
You could try client 5187. *shugs*
I know 5180 has a chat issue - so you should probably use 5187 anyways.
12/16/2011 07:46 Arco.#20
Quote:
Originally Posted by Fаng View Post
@Arco
You could try client 5187. *shugs*
I know 5180 has a chat issue - so you should probably use 5187 anyways.
Such a late reply, but I was working around the problem, just dealing with males only for a while so I can get more stuff done. But I have returned to trying to fix the problem.
I've checked the client's debug log and I see this when females login.
Code:
ˇďASSERT(nLook > 0 && nLook < 1000)ˇď in E:\CQ2ClientRelease-19.10.2\RoleView\3DRole.cpp, 560 -- Thu Dec 15 21:38:19 2011
So I tried using a 5187 client like Fang suggested. Still same outcome. Still being stumped by this.
12/16/2011 12:23 CptSky#21
Post your packet structure/dump... Maybe :rolleyes:
12/16/2011 12:27 Arco.#22
Quote:
Originally Posted by CptSky View Post
Post your packet structure/dump... Maybe :rolleyes:
Of which packet?
12/16/2011 19:55 Spirited#23
Quote:
Originally Posted by Arco. View Post
Of which packet?
All of the login packets (1006, 10010/1010, 1004). I don't think it's the packet though unless it's some weird offset problem that male characters get around (somehow). Check the length of the packets coming into the packet splitter (if you have one) and check if you're handling more than one packet at a time.

I'm really running out of ideas on what this could be. This is a really weird problem. Do male characters log in 100% of the time and if the cipher working correctly (decrypts the 10010 packet and doesn't just hang there)?
12/16/2011 20:01 Arco.#24
Quote:
Originally Posted by Fаng View Post
All of the login packets (1006, 10010/1010, 1004). I don't think it's the packet though unless it's some weird offset problem that male characters get around (somehow). Check the length of the packets coming into the packet splitter (if you have one) and check if you're handling more than one packet at a time.

I'm really running out of ideas on what this could be. This is a really weird problem. Do male characters log in 100% of the time and if the cipher working correctly (decrypts the 10010 packet and doesn't just hang there)?
Males login ONE HUNDRED percent of the time. Females now just get disconnected at after sending the set location to the client. No more just hanging there, just disconnected.
12/16/2011 20:09 Spirited#25
Quote:
Originally Posted by Arco. View Post
Males login ONE HUNDRED percent of the time. Females now just get disconnected at after sending the set location to the client. No more just hanging there, just disconnected.
Try changing the Male's mesh to 2003 or 2004. If that doesn't go through, then there might be an offset issue with meshes.
12/16/2011 20:28 Arco.#26
Quote:
Originally Posted by Fаng View Post
Try changing the Male's mesh to 2003 or 2004. If that doesn't go through, then there might be an offset issue with meshes.
Done that already. Still same outcome.
12/16/2011 21:58 CptSky#27
The packet dump of the character info packet. I want to see the look value you send to the client. With the debug file, it seems that it's the female look that is invalid. We will see by the outgoing packet.
12/16/2011 22:21 Arco.#28
Quote:
Originally Posted by CptSky View Post
The packet dump of the character info packet. I want to see the look value you send to the client. With the debug file, it seems that it's the female look that is invalid. We will see by the outgoing packet.
Male dump:

Female dump:

12/16/2011 22:48 CptSky#29
Hum. I don't understand...

Maybe it will help. When the client receive the MsgUserInfo packet, it's what it does with the Look.

Code:
	g_objHero.Create(m_pInfo->dwLookFace%1000);
	g_objHero.SetFace((m_pInfo->dwLookFace/10000)%1000);
	g_objHero.SetSex(m_pInfo->dwLookFace%1000);
	g_objHero.Transform(m_pInfo->dwLookFace/10000000);
The look is basically set by a call inside the Create function. You easily find that it's where you got an error.

Code:
void C3DRole::SetLook(int nLook)
{
	MYASSERT (nLook>0 && nLook<1000); 
	m_nLook = nLook;
	
	if (!m_pArmor)
	{
		m_pArmor = C3DArmor::CreateNew(m_nLook*1000000);
		MYASSERT (m_pArmor);
	}
	else
	{
		OBJID idType = m_pArmor->GetTypeID();
		if ((idType%1000000) == 0)	// no real armor
		{
			SAFE_DELETE(m_pArmor);

			m_pArmor = C3DArmor::CreateNew(m_nLook*1000000);
			MYASSERT (m_pArmor);
		}
	}
//	this->SetHead(0);	//fot TerrainEffectEditor
}
It seems that Look % 1000 of what you send isn't in the good range... But eh, 362001 % 1000 = 1...
12/16/2011 23:41 Arco.#30
Quote:
Originally Posted by CptSky View Post
Hum. I don't understand...

Maybe it will help. When the client receive the MsgUserInfo packet, it's what it does with the Look.

Code:
	g_objHero.Create(m_pInfo->dwLookFace%1000);
	g_objHero.SetFace((m_pInfo->dwLookFace/10000)%1000);
	g_objHero.SetSex(m_pInfo->dwLookFace%1000);
	g_objHero.Transform(m_pInfo->dwLookFace/10000000);
The look is basically set by a call inside the Create function. You easily find that it's where you got an error.

Code:
void C3DRole::SetLook(int nLook)
{
	MYASSERT (nLook>0 && nLook<1000); 
	m_nLook = nLook;
	
	if (!m_pArmor)
	{
		m_pArmor = C3DArmor::CreateNew(m_nLook*1000000);
		MYASSERT (m_pArmor);
	}
	else
	{
		OBJID idType = m_pArmor->GetTypeID();
		if ((idType%1000000) == 0)	// no real armor
		{
			SAFE_DELETE(m_pArmor);

			m_pArmor = C3DArmor::CreateNew(m_nLook*1000000);
			MYASSERT (m_pArmor);
		}
	}
//	this->SetHead(0);	//fot TerrainEffectEditor
}
It seems that Look % 1000 of what you send isn't in the good range... But eh, 362001 % 1000 = 1...
My lookface is always a valid number though.
like 2152001
2012002