[V16] OnJoin Error Source

06/02/2011 20:21 dennisdra#1
Heyho,

hab da mal schnell ne Frage.
Ich habe die V16 Jobs, Skills etc. aus Aldimasters Source in ne cleane v15 source eingefügt.
Problem ist jedoch nun, das ich nicht ingame reinkomme.

Errorlog ist nur dies hier(Serverseitig, Clientseitig nichts)

Quote:
2011/ 6/ 2 20:17:29
OnJoin(): dennisdra, 2
2011/ 6/ 2 20:18:07
OnJoin(): dennisdra1, 1
2011/ 6/ 2 20:18:51
OnJoin(): rtesjkfioerjg, 4
Ich hoffe, das iwer weiter weiß.
Thx im vorraus.

Mfg

dennisdra
06/02/2011 20:34 Sedrika#2
Das sind fehler der DB aus.

Bei OnJoin mit dem Error 4 ist der fehler bei "m_tGuildMember"
06/02/2011 20:46 Ancientsword#3
Quote:
Originally Posted by Sedrika View Post
Das sind fehler der DB aus.

Bei OnJoin mit dem Error 4 ist der fehler bei "m_tGuildMember"
Was für ein Schman du laberst xD.

Mach sicher das du in der Funktion

CDPDatabaseClient::OnJoin()

Das drinne hast.

Code:
#ifdef __3RD_LEGEND16 // __LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
		if( pUser->GetLevel() > MAX_CHARACTER_LEVEL )
#else //__LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
		if( pUser->GetLevel() > MAX_LEVEL )
#endif	//__LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
		{
			WriteError( "MAX_LEVEL//%s//%d", pUser->GetName(), pUser->GetLevel() );
#ifdef __3RD_LEGEND16
			pUser->m_nLevel	= MAX_CHARACTER_LEVEL;
#else
			pUser->m_nLevel	= MAX_LEVEL;
#endif // __3RD_LEGEND16
06/02/2011 21:41 dennisdra#4
Es gibt jedoch 2 DPDatabaseClient.cpp
1st im Cacheserver
2nd im Worldserver

würde es denn so gehen, wenn ich es einbaue?

Code:
void CDPDatabaseClient::OnJoin( CAr & ar, DPID dpidCache, DPID dpidUser )
{
	DWORD dwWorldId, dwIndex;
	DWORD dwSavePlayerTime = 0;
	DWORD dwSaveFlyTime = 0;
	int nMaximumLevel = 0;

	char lpOutputString[128]	= { 0, };
	sprintf( lpOutputString, "WORLDSERVER.EXE\t// PACKETTYPE_JOIN\t// %d", g_uKey );
	OutputDebugString( lpOutputString );

	CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
	if( pUser )
	{

		DWORD dwAuthKey;
		ar >> dwAuthKey;
		if( pUser->m_dwAuthKey != dwAuthKey )
		{
			WriteLog( "OnJoin(): Different dwAuthKey" );
			return;		//
		}

		char lpAddrtmp[16];
		
[COLOR="Red"]#ifdef __3RD_LEGEND16 // __LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
		if( pUser->GetLevel() > MAX_CHARACTER_LEVEL )
#else //__LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
		if( pUser->GetLevel() > MAX_LEVEL )
#endif	//__LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
		{
			WriteError( "MAX_LEVEL//%s//%d", pUser->GetName(), pUser->GetLevel() );
#ifdef __3RD_LEGEND16
			pUser->m_nLevel	= MAX_CHARACTER_LEVEL;
#else
			pUser->m_nLevel	= MAX_LEVEL;
#endif // __3RD_LEGEND16[/COLOR]

#ifdef __ON_ERROR
		int nOnError	= 0;
		try
		{
#endif	// __ON_ERROR
06/02/2011 21:41 Sedrika#5
Quote:
Originally Posted by Ancientsword View Post
Was für ein Schman du laberst xD.

Mach sicher das du in der Funktion

CDPDatabaseClient::OnJoin()

Das drinne hast.

Code:
#ifdef __3RD_LEGEND16 // __LEGEND    //    10Â÷ Àü½Â½Ã½ºÅÛ    Neuz, World, Trans
        if( pUser->GetLevel() > MAX_CHARACTER_LEVEL )
#else //__LEGEND    //    10Â÷ Àü½Â½Ã½ºÅÛ    Neuz, World, Trans
        if( pUser->GetLevel() > MAX_LEVEL )
#endif    //__LEGEND    //    10Â÷ Àü½Â½Ã½ºÅÛ    Neuz, World, Trans
        {
            WriteError( "MAX_LEVEL//%s//%d", pUser->GetName(), pUser->GetLevel() );
#ifdef __3RD_LEGEND16
            pUser->m_nLevel    = MAX_CHARACTER_LEVEL;
#else
            pUser->m_nLevel    = MAX_LEVEL;
#endif // __3RD_LEGEND16
Du laberst hier Schman...

Guck doch mal in der DB nach, wie die struktur bei diesem char ist für die spalte.
06/02/2011 21:43 Ancientsword#6
@Sedrika

...... Angenommen du erstellst einen Lvl 1. Charakter. Da ist der Error in dem Sinne völliger Schwachsinn von Aeonsoft(Gala-Lab).

@TE Neuz, World, Trans sind von den Jobs in der Hinsicht eigentlich nur betroffen.
06/02/2011 21:44 dennisdra#7
Was ist denn jetzt hier richtig und was nicht?
Sedrika's Aussage oder Ancientsword's Aussage.
@Sedrika

wenn es DB-Seitig Probleme gibt, gäbe es ne Möglichkeit das auch ohne neue Db hinzukriegen?
Kann schlecht 3xx Usern nen Wipe antun :o
06/02/2011 21:57 Sedrika#8
Quote:
Originally Posted by dennisdra View Post
@Sedrika

wenn es DB-Seitig Probleme gibt, gäbe es ne Möglichkeit das auch ohne neue Db hinzukriegen?
Kann schlecht 3xx Usern nen Wipe antun :o
Der Fehler ist, dass dort ein Eintrag falsch gespeichert wurde.

Mach mal:
PHP Code:
UPDATE [CHARACTER_01_DBF].[DBO].[CHARACTER_TBLSET [m_tGuildMember] = '20110531132723' 
danach sollte der Error verschwinden. Und wenn du bei OnJoin guckst, wo es den Error auf 4 setzt siehst du das auch....
06/02/2011 22:00 Krustenkäse#9
Okay Leute...
zum Aufbau der OnJoin Funktion:
die besteht aus einem try{}catch(...){} Block
Im Verlauf der Funktion werden der nOnError Variable Werte zugewießen und wenn jetzt im try Block was net klappt, dann gehts ab in den catchblock, wo Charactername und nOnError ausgegeben werden
Für nOnError 4 steht folgendes im Code:
Code:
#ifdef __ON_ERROR
		nOnError	= 4;
#endif	// __ON_ERROR
		ar.ReadString( pUser->m_szPartyName, 32 );
		ar.ReadString( pUser->m_szBankPass, 5 );
		ar >> dwSavePlayerTime;
		pUser->SetPlayerTime( dwSavePlayerTime );

#ifndef __JEFF_9_20
		ar >> dwSaveFlyTime;
		pUser->SetSaveFlyTime( dwSaveFlyTime );
#endif	// __JEFF_9_20

		ar >> nMaximumLevel;

		// ÂÊÁö¸¦ ÀоîµéÀδÙ.
		short nTagCount;
		ar >> nTagCount;

		TAG_ENTRY tags[MAX_TAGS];
		for( short i=0; i<nTagCount; ++i )
		{
			ar >> tags[i].idFrom;					// ´©±¸¿¡°Ô¼* 
			ar >> tags[i].dwDate;					// ¾ðÁ¦ 
			ar.ReadString( tags[i].szString, 256 );		// ÂÊÁö ³»¿ë 
		}

		char GuildMemberTime[15] = {0,};
		ar.ReadString( GuildMemberTime, 15 );

		char cYear[5] = {0,};
		char cMonth[3] = {0,};
		char cDay[3] = {0,};
		char cHour[3] = {0,};
		char cMin[3] = {0,};
		
		strncpy(cYear, GuildMemberTime, 4);
		strncpy(cMonth, GuildMemberTime + 4, 2 );
		strncpy(cDay, GuildMemberTime + 6, 2 );
		strncpy(cHour, GuildMemberTime + 8, 2 );
		strncpy(cMin, GuildMemberTime + 10, 2 );
		
		CTime tGuildMember( atoi(cYear), atoi(cMonth), atoi(cDay), atoi(cHour), atoi(cMin), 0 );
		pUser->m_tGuildMember = tGuildMember;

		ar >> pUser->m_dwReturnWorldID;
		ar >> pUser->m_vReturnPos;

#ifdef __EVENT_1101
#ifdef __EVENT_1101_2
		ar >> pUser->m_nEventFlag;
#else // __EVENT_1101_2
		ar >> pUser->m_dwEventFlag;
#endif // __EVENT_1101_2
		ar >> pUser->m_dwEventTime;
		ar >> pUser->m_dwEventElapsed;
#endif	// __EVENT_1101

#ifdef __EXP_ANGELEXP_LOG
		ar >> pUser->m_nExpLog;
		ar >> pUser->m_nAngelExpLog;
#endif // __EXP_ANGELEXP_LOG

#ifdef __EVENTLUA_COUPON
		ar >> pUser->m_nCoupon;
#endif // __EVENTLUA_COUPON
#if __VER >= 14 // __PCBANG
		DWORD dwPCBangClass;
		ar >> dwPCBangClass;
#endif // __PCBANG

#if __VER >= 15 // __GUILD_HOUSE
		int nRestPoint; time_t tLogOut;
		ar >> nRestPoint >> tLogOut;
		if( pUser->m_idGuild != 0 )
			pUser->SetRestPoint( nRestPoint );
#endif // __GUILD_HOUSE
Ich kann dir jetzt leider nicht genau sagen, wo dein Fehler liegt, aber nur soviel zu dem worum sich Ancient und Sedrika streiten ^^
06/02/2011 22:04 Sedrika#10
Quote:
Originally Posted by Krustenkäse View Post
Okay Leute...
zum Aufbau der OnJoin Funktion:
die besteht aus einem try{}catch(...){} Block
Im Verlauf der Funktion werden der nOnError Variable Werte zugewießen und wenn jetzt im try Block was net klappt, dann gehts ab in den catchblock, wo Charactername und nOnError ausgegeben werden
Für nOnError 4 steht folgendes im Code:
Code:
#ifdef __ON_ERROR
        nOnError    = 4;
#endif    // __ON_ERROR
        ar.ReadString( pUser->m_szPartyName, 32 );
        ar.ReadString( pUser->m_szBankPass, 5 );
        ar >> dwSavePlayerTime;
        pUser->SetPlayerTime( dwSavePlayerTime );

#ifndef __JEFF_9_20
        ar >> dwSaveFlyTime;
        pUser->SetSaveFlyTime( dwSaveFlyTime );
#endif    // __JEFF_9_20

        ar >> nMaximumLevel;

        // ÂÊÁö¸¦ ÀоîµéÀδÙ.
        short nTagCount;
        ar >> nTagCount;

        TAG_ENTRY tags[MAX_TAGS];
        for( short i=0; i<nTagCount; ++i )
        {
            ar >> tags[i].idFrom;                    // ´©±¸¿¡°Ô¼* 
            ar >> tags[i].dwDate;                    // ¾ðÁ¦ 
            ar.ReadString( tags[i].szString, 256 );        // ÂÊÁö ³»¿ë 
        }

        char GuildMemberTime[15] = {0,};
        ar.ReadString( GuildMemberTime, 15 );

        char cYear[5] = {0,};
        char cMonth[3] = {0,};
        char cDay[3] = {0,};
        char cHour[3] = {0,};
        char cMin[3] = {0,};
        
        strncpy(cYear, GuildMemberTime, 4);
        strncpy(cMonth, GuildMemberTime + 4, 2 );
        strncpy(cDay, GuildMemberTime + 6, 2 );
        strncpy(cHour, GuildMemberTime + 8, 2 );
        strncpy(cMin, GuildMemberTime + 10, 2 );
        
        CTime tGuildMember( atoi(cYear), atoi(cMonth), atoi(cDay), atoi(cHour), atoi(cMin), 0 );
        pUser->m_tGuildMember = tGuildMember;

        ar >> pUser->m_dwReturnWorldID;
        ar >> pUser->m_vReturnPos;

#ifdef __EVENT_1101
#ifdef __EVENT_1101_2
        ar >> pUser->m_nEventFlag;
#else // __EVENT_1101_2
        ar >> pUser->m_dwEventFlag;
#endif // __EVENT_1101_2
        ar >> pUser->m_dwEventTime;
        ar >> pUser->m_dwEventElapsed;
#endif    // __EVENT_1101

#ifdef __EXP_ANGELEXP_LOG
        ar >> pUser->m_nExpLog;
        ar >> pUser->m_nAngelExpLog;
#endif // __EXP_ANGELEXP_LOG

#ifdef __EVENTLUA_COUPON
        ar >> pUser->m_nCoupon;
#endif // __EVENTLUA_COUPON
#if __VER >= 14 // __PCBANG
        DWORD dwPCBangClass;
        ar >> dwPCBangClass;
#endif // __PCBANG

#if __VER >= 15 // __GUILD_HOUSE
        int nRestPoint; time_t tLogOut;
        ar >> nRestPoint >> tLogOut;
        if( pUser->m_idGuild != 0 )
            pUser->SetRestPoint( nRestPoint );
#endif // __GUILD_HOUSE
Ich kann dir jetzt leider nicht genau sagen, wo dein Fehler liegt, aber nur soviel zu dem worum sich Ancient und Sedrika streiten ^^

Steht da doch xD
PHP Code:
        char GuildMemberTime[15] = {0,};
        
ar.ReadStringGuildMemberTime15 );

        
char cYear[5] = {0,};
        
char cMonth[3] = {0,};
        
char cDay[3] = {0,};
        
char cHour[3] = {0,};
        
char cMin[3] = {0,};
        
        
strncpy(cYearGuildMemberTime4);
        
strncpy(cMonthGuildMemberTime 4);
        
strncpy(cDayGuildMemberTime 6);
        
strncpy(cHourGuildMemberTime 8);
        
strncpy(cMinGuildMemberTime 10);
        
        
CTime tGuildMemberatoi(cYear), atoi(cMonth), atoi(cDay), atoi(cHour), atoi(cMin), ); 
pUser->m_tGuildMember = tGuildMember;
06/02/2011 22:04 dennisdra#11
Ich habe es ja extra mit einem cleanen lv 1 char probiert gehabt.
Kann jetzt grad net überprüfen, ob es funktioniert, werde ich morgen nachholen und dann hier Bescheid geben.

Aber thx schonmal im vorraus.
06/02/2011 22:08 Krustenkäse#12
@Sedrika:
Ja stimmt :O hatte wohl grade n Brett vorm Kopf :p
06/02/2011 23:37 dennisdra#13
Dies würde ja aber nur auf den OnJoin() 4 zutreffen, was is mit den anderen
06/03/2011 00:00 yannickminecraft#14
Liegt bestimmt an MAX_SKILL hast da wohl vergessen die Zahl für die v16 Skills noch hinzuzufügen.