Web Shop

10/06/2014 15:51 Sedrika#1

Download [Only registered and activated users can see links. Click Here To Register...]








Epilogue:

I will gradually integrate new functions and make them more user friendly.
I hope you enjoy using this shop system i've created from the original design used by Webzen.

Credits:
- Webzen - Design
- Sedrika - Everytihing else
10/06/2014 15:57 Chyukαsame#2
Gute Arbeit Sago ;)
10/06/2014 16:07 Marc~#3
Wirklich guter Einfall und sehr gute Ausführung.
10/06/2014 16:25 Rhyder`#4
Great :) Thanks :)
10/06/2014 16:30 Sedrika#5
If you guys still have questions feel free to ask me here :)
10/06/2014 16:37 ™Dryad#6
Sehr geile sache ;) *Danke*
10/06/2014 19:05 alfredico#7
The function OnBuyingInfo of Worldserver is a big security issue, if you want to make it safe use the OnBuyingInfo of Accountserver which is internal network only.
10/06/2014 19:08 Sedrika#8
Thats the reason i've aded 2 checks. If they dont match you can't do anything.
10/06/2014 19:35 FunkyJustice#9
Kriege diese Errors

10/06/2014 19:51 Sedrika#10
Das wird wohl die Funktion CDbManager::LogSMItem sein.
Kommentier alles bis auf das return aus.

Das andere müsste void CDPAdbill::UserMessageHandler sein. Dort nach
g_dpDbSrvr.SendBuyingInfo( (PBUYING_INFO2)pbi3 ); alles entfernen oder auskommentieren.

#Edit:

Download [Only registered and activated users can see links. Click Here To Register...]

Fixed a bug with sending packets to the servers.
10/06/2014 20:18 FunkyJustice#11
So?

Code:
void CDbManager::LogSMItem( CQuery & qryLog, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
{
	/*CAr arRead( lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize );*/
	
	/*
	bi2.szBxaid		// ±¸¸Å ¹øÈ£
	bi2.dwItemId	// ¾ÆÀÌÅÛ À妽º
	bi2.dwItemNum	// ¾ÆÀÌÅÛ °³¼ö
	bi2.dwServerIndex	// ¼*¹ö À妽º
	bi2.dwPlayerId		// Ç÷¹ÀÌ¾î ½Äº°ÀÚ
	bi2.dwRetVal	// Áö±Þ ¼º°ø ¿©ºÎ, ¼º°ø : 1, ½ÇÆÐ : 0
	sn		// ½Ã¸®¾ó ¹øÈ£
	*/
	/*BUYING_INFO2	bi2;
	SERIALNUMBER iSerialNumber;
	arRead.Read( (void*)&bi2, sizeof(BUYING_INFO2) );
	arRead >> iSerialNumber;
	
	// ±¸¸Å¹øÈ£´Â : pszGetidPlayer
	// ¾ÆÀÌÅÛÀ妽º : dwGold // ItemNameÀº Çü½Ä¿¡ ¾È¸ÂÀ½
	LOG_SM_ITEM_INFO qi( "L3" );
	if( bi2.dwRetVal )
		qi.pszState = "3";		// ¼º°ø
	else
		qi.pszState = "4";		// ½ÇÆÐ
	qi.nserverindex = bi2.dwServerIndex;
	char szPlayerId[128] = {0,};
	sprintf( szPlayerId, "%07d", bi2.dwPlayerId );
	qi.pszkilled_szName = szPlayerId;
	qi.nItem_UniqueNo = iSerialNumber;
	qi.nItem_count = bi2.dwItemNum;
	qi.pszGetidPlayer = bi2.szBxaid;
	qi.dwGold = bi2.dwItemId;*/
	
	//DBQryLogSMItem( lpDbOverlappedPlus->szQuery, qi);
	
	//if( FALSE == qryLog.Exec( lpDbOverlappedPlus->szQuery ) )
	//{
		//WriteLog( "%s, %d\r\n\t%s", __FILE__, __LINE__, //lpDbOverlappedPlus->szQuery );
		//m_pDbIOData->Free( lpDbOverlappedPlus );
		return;
	//}
	//m_pDbIOData->Free( lpDbOverlappedPlus );
}
10/06/2014 20:28 Sedrika#12
Entfern da ruhig alles drin lieber und lass nur das return da. Sollte dann halt gehen. Und lad dir das kleine Update herunter :) Sonst wunderst du dich das Ingame nichts mehr ankommt :D
10/06/2014 20:56 FunkyJustice#13
Bleiben die beiden über :

10/06/2014 21:03 Sedrika#14
Ersetz die funktion mit dieser:

Code:
void CDPDBSrvr::OnBuyingInfo( CAr & ar, DPID dpid, LPBYTE lpBuf, u_long uBufSize )
{
	BUYING_INFO2	bi2;
	SERIALNUMBER iSerialNumber;
	ar.Read( (void*)&bi2, sizeof(BUYING_INFO2) );
	ar >> iSerialNumber;

	CBuyingInfoMng::GetInstance()->m_AddRemoveLock.Enter();
	PBUYING_INFO3 pbi3	= CBuyingInfoMng::GetInstance()->Get( bi2.dwKey );
	if( pbi3 )
	{
		//static char lpOutputString[260]	= { 0, };
		//sprintf( lpOutputString, "ACCOUNTSERVER.EXE\t// Recv from trans\t// dwRetVal = %d", bi2.dwRetVal );
		//OutputDebugString( lpOutputString );

		CDPAdbill::GetInstance()->Send( &bi2, sizeof(BUYING_INFO), bi2.dpid );
		CBuyingInfoMng::GetInstance()->Remove( bi2.dwKey );
		safe_delete( pbi3 );
		/*
		bi2.szBxaid		// 구매 번호
		bi2.dwItemId	// 아이템 인덱스
		bi2.dwItemNum	// 아이템 개수
		bi2.dwServerIndex	// 서버 인덱스
		bi2.dwPlayerId		// 플레이어 식별자
		bi2.dwRetVal	// 지급 성공 여부, 성공 : 1, 실패 : 0
		iSerialNumber		// 시리얼 번호
		*/

		LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus		= g_DbManager.m_pDbIOData->Alloc();
		memcpy( lpDbOverlappedPlus->lpBuf, (LPBYTE)lpBuf + sizeof(DWORD), uBufSize - sizeof(DWORD) );
		lpDbOverlappedPlus->uBufSize	= uBufSize - sizeof(DWORD);
		lpDbOverlappedPlus->nQueryMode	= LOG_SM_ITEM;
		PostQueuedCompletionStatus( g_DbManager.m_hDbCompletionPort, 1, NULL, &lpDbOverlappedPlus->Overlapped );
	}
	else
	{
		// 치명적 오류 : 어카운트 서버에는 지급 명령에 대한 정보가 없다.
	}
	CBuyingInfoMng::GetInstance()->m_AddRemoveLock.Leave();
	TRACE( "RECV PACKETTYPE_BUYING_INFO FROM TRANS\n" );
}
Ich verbesser mal das Tutorial nacher.

#edit:

Updated thread
10/07/2014 03:57 banktakung#15
item not send to ITEM_SEND_TBL