DeathKO | v.24xx Light Farm | ORION | Beta: 17 Kasım | Official: 24 Kasım

Karakter bilgilerinin bozulması.

K Çevrimdışı

koray_10

Kayıtlı Üye
9 Nisan 2012
164
1
16
selam öncelikle neden paylaşıyorum onu anlatıyım osman denen ********le takas yaptığımızda bana karşılık olarak bir kaç şey vermesi gerekiyordu konuşmanın başında karkter bilgilieri bozuluyor bende bunu düzeltmek için stritemleri 400 yapıyorum demiştim ozamanda banka 8.sayfa bozuluyor demiştim oda o kolay değiştirirz fln demişti bende euko sistemini yapıcaktım ona geldi bide packed logger istedi verdim neyse girdi yaptı eukoyu dedim ver işte bunları dedi daha sonra ben onun o oldugunu bilmiyodum vermem fln fln sonra dedi en sonunda packed logger source verdim verdi geri kalanıda vermedi.ozaman verdiği kodu gösteriyim size.

Kod:
int CIOCPort::GetNewSid()

{

	if( m_SidList.empty() ) {

		TRACE("SID List Is Empty !!\n");

		return -1;

	}



	int ret = m_SidList.front();

	m_SidList.pop_front();

//	ret = m_SidList.front();

//	m_SidList.pop_front();



	return ret;

}
// koyduğum yerlere socketid sinden tekrar oluşturmayı yapmış yani 1 user için 2 socket açıyor ufak bir havıza sorunu için yaptığı şeye bakın bide bana en düzgünü bu diyordu başka türlü olmaz ...

Kod:
BOOL CEbenezerDlg::InitializeMMF()

{

	BOOL bCreate = TRUE;

	CString logstr;



	DWORD filesize = MAX_USER * 4000;	// 1¸í´ç 3000 bytes À̳» ¼Ò¿ä

	m_hMMFile = CreateFileMapping ( (HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, filesize, "KNIGHT_DB" );

	

	if (m_hMMFile != NULL && GetLastError() == ERROR_ALREADY_EXISTS) 

	{

		m_hMMFile = OpenFileMapping( FILE_MAP_ALL_ACCESS, TRUE, "KNIGHT_DB" );

		if( m_hMMFile == NULL ) {

			logstr = "Shared Memory Load Fail!!";

			m_hMMFile = INVALID_HANDLE_VALUE; 

			return FALSE;

		}

		bCreate = FALSE;

	}

	logstr = "Shared Memory Create Success!!";

	m_StatusList.AddString( logstr );



    m_lpMMFile = (char *)MapViewOfFile (m_hMMFile, FILE_MAP_WRITE, 0, 0, 0);

	if( !m_lpMMFile )

		return FALSE;

	memset( m_lpMMFile, NULL, filesize );



	m_bMMFCreate = bCreate;



	CUser* pUser = NULL;

	for(int i=0; i< MAX_USER; i++)

	{

		pUser = (CUser*)m_Iocport.m_SockArrayInActive[i];

		if( pUser ) {

			pUser->m_pUserData = (_USER_DATA*)(m_lpMMFile + i*4000);	// 1 Person Offset are 4000 bytes

		}

	}



	return TRUE;

}
// 1 Person Offset are 4000 bytes

yukarada dediği gibi 1 kullanıcı için 4000byte lık alan açılıyor user_data array ınıda tamer stritemi 1200 olarak genişlettiği için ve bu malda tamerin source larını kullanıp o bölümde oynama yapmadığı için böyle bir sorun olmuştu

sorunun çözümü basit 4000 yerine oraya _USER_DATA struct unun lenght ini yazıcaz yani.





bundan 4 tane yerde var 2 si aujard 2si ebenezer

Kod:
CEbenezerDlg::InitializeMMF()

CAujardDlg::InitializeMMF()
kolay gelsin
 
N Çevrimdışı

NumarK

Kayıtlı Üye
27 Mart 2012
718
2
18
34
clinet hata verıyo oyuna girince ve account login hatası alıyorum tekrar girmeye çalışıcan :S
 
F Çevrimdışı

Fas

Yeni Cüce
29 Mart 2012
16
0
1
selam öncelikle neden paylaşıyorum onu anlatıyım osman denen ********le takas yaptığımızda bana karşılık olarak bir kaç şey vermesi gerekiyordu konuşmanın başında karkter bilgilieri bozuluyor bende bunu düzeltmek için stritemleri 400 yapıyorum demiştim ozamanda banka 8.sayfa bozuluyor demiştim oda o kolay değiştirirz fln demişti bende euko sistemini yapıcaktım ona geldi bide packed logger istedi verdim neyse girdi yaptı eukoyu dedim ver işte bunları dedi daha sonra ben onun o oldugunu bilmiyodum vermem fln fln sonra dedi en sonunda packed logger source verdim verdi geri kalanıda vermedi.ozaman verdiği kodu gösteriyim size.

Kod:
int CIOCPort::GetNewSid()

{

	if( m_SidList.empty() ) {

		TRACE("SID List Is Empty !!\n");

		return -1;

	}



	int ret = m_SidList.front();

	m_SidList.pop_front();

//	ret = m_SidList.front();

//	m_SidList.pop_front();



	return ret;

}
// koyduğum yerlere socketid sinden tekrar oluşturmayı yapmış yani 1 user için 2 socket açıyor ufak bir havıza sorunu için yaptığı şeye bakın bide bana en düzgünü bu diyordu başka türlü olmaz ...

Kod:
BOOL CEbenezerDlg::InitializeMMF()

{

	BOOL bCreate = TRUE;

	CString logstr;



	DWORD filesize = MAX_USER * 4000;	// 1¸í´ç 3000 bytes À̳» ¼Ò¿ä

	m_hMMFile = CreateFileMapping ( (HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, filesize, "KNIGHT_DB" );

	

	if (m_hMMFile != NULL && GetLastError() == ERROR_ALREADY_EXISTS) 

	{

		m_hMMFile = OpenFileMapping( FILE_MAP_ALL_ACCESS, TRUE, "KNIGHT_DB" );

		if( m_hMMFile == NULL ) {

			logstr = "Shared Memory Load Fail!!";

			m_hMMFile = INVALID_HANDLE_VALUE; 

			return FALSE;

		}

		bCreate = FALSE;

	}

	logstr = "Shared Memory Create Success!!";

	m_StatusList.AddString( logstr );



    m_lpMMFile = (char *)MapViewOfFile (m_hMMFile, FILE_MAP_WRITE, 0, 0, 0);

	if( !m_lpMMFile )

		return FALSE;

	memset( m_lpMMFile, NULL, filesize );



	m_bMMFCreate = bCreate;



	CUser* pUser = NULL;

	for(int i=0; i< MAX_USER; i++)

	{

		pUser = (CUser*)m_Iocport.m_SockArrayInActive[i];

		if( pUser ) {

			pUser->m_pUserData = (_USER_DATA*)(m_lpMMFile + i*4000);	// 1 Person Offset are 4000 bytes

		}

	}



	return TRUE;

}
// 1 Person Offset are 4000 bytes

yukarada dediği gibi 1 kullanıcı için 4000byte lık alan açılıyor user_data array ınıda tamer stritemi 1200 olarak genişlettiği için ve bu malda tamerin source larını kullanıp o bölümde oynama yapmadığı için böyle bir sorun olmuştu

sorunun çözümü basit 4000 yerine oraya _USER_DATA struct unun lenght ini yazıcaz yani.



bundan 4 tane yerde var 2 si aujard 2si ebenezer

Kod:
CEbenezerDlg::InitializeMMF()

CAujardDlg::InitializeMMF()
kolay gelsin


Ajuarda girince sorun oluyo bunu