#include "StdAfx.h" #include ".\gamelog.h" #using CGameLog::CGameLog(void) { m_bWriteText = TRUE; } CGameLog::~CGameLog(void) { } BOOL CGameLog::Init( TCHAR* pszDirName, TCHAR* pszFilenamePrefix, TCHAR* pszTextDirName ) { BOOL bRet = m_LogMng.Init( pszDirName, pszFilenamePrefix, pszTextDirName ); return bRet; } void CGameLog::WriteBaseData( BaseData* pData, TCHAR* szAccountID, TCHAR* szCharName ) { if( szAccountID == NULL ) _tcscpy( pData->szAccountID, "" ); else _tcscpy( pData->szAccountID, szAccountID ); if( szCharName == NULL ) _tcscpy( pData->szCharName, "" ); else _tcscpy( pData->szCharName, szCharName ); } ////////////////////////////////////////////////////////////////////////// // °æÇèÄ¡ ·Î±× // 1. ·¹º§¾÷ ·Î±× void CGameLog::WriteLevelUp( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, DWORD dwOldExp, DWORD dwNewExp, WORD wOldLevel, WORD wNewLevel ) { ExpData data; data.iExpCode = EXP_LEVELUP; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.iOldExp = dwOldExp; data.iNewExp = dwNewExp; data.iOldLevel = wOldLevel; data.iNewLevel = wNewLevel; m_LogMng.WriteExp( data, m_bWriteText, NULL ); } // 2. °æÇèÄ¡ 10µîºÐ ·Î±× void CGameLog::WriteDivideExp( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, DWORD dwOldExp, DWORD dwNewExp, WORD wOldLevel, WORD wNewLevel, WORD wDivideCount ) { ExpData data; data.iExpCode = EXP_DIVIDECNT; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.iDivideCount = wDivideCount; data.iOldExp = dwOldExp; data.iNewExp = dwNewExp; data.iOldLevel = wOldLevel; data.iNewLevel = wNewLevel; m_LogMng.WriteExp( data, m_bWriteText, NULL ); } // 3. °æÇèÄ¡ Ãß°¡/´Ù¿î void CGameLog::WriteDownExp( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, DWORD dwTotalExp, DWORD dwChangeExp, WORD wLevel ) { // ÇöÀçÀÇ ÀÎÅÍÆäÀ̽º·Î´Â ºÒ°¡´É.. // Çö Ç÷¹À̾îÀÇ Àüü °æÇèÄ¡¿Í ´Ù¿îµÈ °æÇèÄ¡¸¦ ¿ä±¸Çϴµ¥, ÇöÀç ÀÎÀڷδ ºÒ°¡´É. // AddInfo¿¡ »ðÀÔÇÒ °æ¿ì, ´Ù¿îµÈ °æÇèÄ¡¸¦ ³ÖÀ»°ÍÀΰ¡? ExpData data; data.iExpCode = EXP_DOWN; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.iNewExp = dwTotalExp; data.iNewLevel = wLevel; m_LogMng.WriteExp( data, m_bWriteText, "Change Exp = %d", dwChangeExp ); } ////////////////////////////////////////////////////////////////////////// // ¾ÆÀÌÅÛ ·Î±× // 1. ¾ÆÀÌÅÛ µå·Ó ·Î±×(¹ö¸²°ú Á׾ ¶³±¸´Â°Í°ú ¸ó½ºÅÍ Á׿©¼­ ¶³±¸´Â °ÍÀÇ Â÷ÀÌ?) // 1. ¾ÆÀÌÅÛ µå·Ó(¶¥¿¡ ¶³±À) °ú Áݱâ void CGameLog::WriteItemOwner( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, BOOL bOwner, int nItemCode, int nItemSerial ,int nItemCount, int nMapCode, int nPosX, int nPosY, int nPosZ) { ItemData data; if( bOwner == TRUE ) data.iItemCode = ITEM_PICKUP; // Áݱâ else data.iItemCode = ITEM_CAST; // ¹ö¸®±â data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.iItemBaseCode = nItemCode; data.iItemSeq = nItemSerial; data.iItemCount = nItemCount; data.siMapCode = nMapCode; data.siMapX = nPosX; data.siMapY = nPosY; data.siMapZ = nPosZ; m_LogMng.WriteItem( data, m_bWriteText, "" ); } // 2. ÀÎþƮ void CGameLog::WriteEnchantResult( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, BOOL bSuccess, int nItemCode, int nItemSerial, vector vecMatInfo ) { ItemData data; if( bSuccess == TRUE) data.iItemCode = ITEM_ENCHANTSUCCESS; else data.iItemCode = ITEM_ENCHANTFAIL; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.iItemBaseCode = nItemCode; data.iItemSeq = nItemSerial; int nSize = (int)vecMatInfo.size(); string strInfo; for(int i = 0; i < nSize; i++) { COMPOSITEMATERIAL info = vecMatInfo[i]; char szInfo[128]; wsprintf( szInfo, "MATCODE = %d, MATNUM = %d ", info.nMaterialCode, info.wCntMaterial ); strInfo += szInfo; } m_LogMng.WriteItem( data, m_bWriteText, strInfo.data() ); } // 3. NPC¿ÍÀÇ °Å·¡ void CGameLog::WriteItemTradeWithNPC( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, BOOL bSell, int nItemCode, int nItemSerial, int nItemCount, DWORD dwMoney ) { ItemData data; if( bSell == TRUE ) data.iItemCode = ITEM_SELLNPC; // NPC¿¡°Ô ÆÈ±â else data.iItemCode = ITEM_BUYNPC; // NPC¿¡°Ô »ç±â data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.iItemBaseCode = nItemCode; data.iItemSeq = nItemSerial; data.iItemCount = nItemCount; m_LogMng.WriteItem( data, m_bWriteText, " Money = %d ", dwMoney ); } void CGameLog::WriteItemTradeWithPlayer( TCHAR* szPlayer1_ID, TCHAR* szPlayer1_CharName, int nServerCode, BOOL bGive, ITEMLOGINFO ItemInfo, TCHAR* szPlayer2_ID, TCHAR* szPlayer2_CharName) { ItemData data; if( bGive == TRUE ) data.iItemCode = ITEM_GIVE; // »ó´ë Ç÷¹À̾°Ô ÁÖ±â else data.iItemCode = ITEM_RECEIVE; // »ó´ë¿¡°Ô¼­ ¹Þ±â data.iServerCode = nServerCode; WriteBaseData( &data, szPlayer1_ID, szPlayer1_CharName ); data.iItemBaseCode = ItemInfo.nItemCode; data.iItemSeq = ItemInfo.nItemSerial; data.iItemCount = ItemInfo.nItemCount; if( szPlayer2_ID == NULL ) _tcscpy( data.szToUserID, "" ); else _tcscpy( data.szToUserID, szPlayer2_ID ); if( szPlayer2_CharName == NULL ) _tcscpy(data.szToCharName, ""); else _tcscpy( data.szToCharName, szPlayer2_CharName ); m_LogMng.WriteItem( data, m_bWriteText, NULL ); } // 5. µ· °³Àΰŷ¡ void CGameLog::WriteMoneyTradeWithPlayer( TCHAR* szPlayer1_ID, TCHAR* szPlayer1_CharName, int nServerCode, BOOL bGive, DWORD dwMoney, TCHAR* szPlayer2_ID, TCHAR* szPlayer2_CharName) { ItemData data; if( bGive == TRUE ) // »ó´ë Ç÷¹À̾°Ô ÁÖ±â { data.iItemCode = ITEM_MONEY; } else // »ó´ë¿¡°Ô¼­ ¹Þ±â { data.iItemCode = ITEM_MONEY; } data.iServerCode = nServerCode; WriteBaseData( &data, szPlayer1_ID, szPlayer1_CharName ); if( szPlayer2_ID == NULL ) _tcscpy( data.szToUserID, "" ); else _tcscpy( data.szToUserID, szPlayer2_ID ); if( szPlayer2_CharName == NULL ) _tcscpy(data.szToCharName, ""); else _tcscpy( data.szToCharName, szPlayer2_CharName ); if( bGive == TRUE ) //Player1ÀÌ Player2¿¡°Ô µ·À» dwMoney¸¸Å­ ÁÖ´Ù. m_LogMng.WriteItem( data, m_bWriteText, "Give Money = %d", dwMoney ); else //Player1ÀÌ Player2¿¡°Ô¼­ µ·À» dwMoney¸¸Å­ ¹Þ´Ù. m_LogMng.WriteItem( data, m_bWriteText, "Receive Money = %d", dwMoney ); } // 6. °³ÀλóÁ¡ °Å·¡ void CGameLog::WriteItemVendorWithPlayer( TCHAR* szPlayer1_ID, TCHAR* szPlayer1_CharName, int nServerCode, BOOL bSell, ITEMLOGINFO ItemInfo, DWORD dwMoney, TCHAR* szPlayer2_ID, TCHAR* szPlayer2_CharName) { ItemData data; if( bSell == TRUE ) data.iItemCode = ITEM_SELLPC; // °³ÀλïÁ¤¿¡¼­ ¹°°Ç ÆÈ±â else data.iItemCode = ITEM_BUYPC; // °³ÀλóÁ¡¿¡¼­ ¹°°Ç »ç±â data.iServerCode = nServerCode; WriteBaseData( &data, szPlayer1_ID, szPlayer1_CharName ); data.iItemBaseCode = ItemInfo.nItemCode; data.iItemSeq = ItemInfo.nItemSerial; data.iItemCount = ItemInfo.nItemCount; if( szPlayer2_ID == NULL ) _tcscpy( data.szToUserID, "" ); else _tcscpy( data.szToUserID, szPlayer2_ID ); if( szPlayer2_CharName == NULL ) _tcscpy(data.szToCharName, ""); else _tcscpy( data.szToCharName, szPlayer2_CharName ); if( bSell == TRUE ) m_LogMng.WriteItem( data, m_bWriteText, "RECEIVE MONEY = %d", dwMoney ); else m_LogMng.WriteItem( data, m_bWriteText, "PAY MONEY = %d", dwMoney ); } // 7. ¾ÆÀÌÅÛ ·©Å©¾÷ void CGameLog::WriteItemRankUpResult( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, ITEMLOGINFO ItemInfo, DWORD dwMoney, BOOL bCreateSocket ) { ItemData data; data.iItemCode = ITEM_RANKUPSUCCESS; // ·©Å©¾÷ ¼º°ø data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.iItemBaseCode = ItemInfo.nItemCode; data.iItemSeq = ItemInfo.nItemSerial; data.iItemCount = ItemInfo.nItemCount; if( bCreateSocket ) m_LogMng.WriteItem( data, m_bWriteText, "¼ÒÄÏ »ý¼º µÊ" ); else m_LogMng.WriteItem( data, m_bWriteText, "¼ÒÄÏ »ý¼º ¾ÈµÊ" ); } // 8. â°í¿¡ ¸Â±â±â / ã±â // dwMoney : â°í º¸°ü·á void CGameLog::WriteItemMoveInWareHouse( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, BOOL bKeep, ITEMLOGINFO ItemInfo ) { ItemData data; if( bKeep == TRUE ) data.iItemCode = ITEM_PUTSTORAGE; // â°í¿¡ º¸°ü else data.iItemCode = ITEM_GETSTORAGE; // â°í¿¡¼­ ²¨³»±â data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.iItemBaseCode = ItemInfo.nItemCode; data.iItemSeq = ItemInfo.nItemSerial; data.iItemCount = ItemInfo.nItemCount; m_LogMng.WriteItem( data, m_bWriteText, NULL ); } // 9. ÀÎþƮ ½Ãµµ void CGameLog::WriteEnchantStart( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, vector vecMatInfo ) { ItemData data; data.iItemCode = ITEM_ENCHANTTRY; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); int nSize = (int)vecMatInfo.size(); string strInfo; for(int i = 0; i < nSize; i++) { COMPOSITEMATERIAL info = vecMatInfo[i]; char szInfo[128]; wsprintf( szInfo, "MATCODE = %d, MATNUM = %d ", info.nMaterialCode, info.wCntMaterial ); strInfo += szInfo; } m_LogMng.WriteItem( data, m_bWriteText, strInfo.data() ); } // 10. ¸ó½ºÅÍ ¾ÆÀÌÅÛ µå¶ø void CGameLog::WriteMonsterItemDrop( int nServerCode, ITEMLOGINFO ItemInfo, DWORD dwMonsterCode, DWORD dwMonsterLevel, int nMapCode, int nPosX, int nPosY, int nPosZ ) { ItemData data; data.iItemCode = ITEM_MONSTER_ITEMDROP; data.iServerCode = nServerCode; data.iItemBaseCode = ItemInfo.nItemCode; data.iItemSeq = ItemInfo.nItemSerial; data.iItemCount = ItemInfo.nItemCount; data.siMapCode = nMapCode; data.siMapX = nPosX; data.siMapY = nPosY; data.siMapZ = nPosZ; m_LogMng.WriteItem( data, m_bWriteText, "MONSTER CODE = %d, LEVEL = %d", dwMonsterCode, dwMonsterLevel ); } // 11. ¾ÆÀÌÅÛ °³Àΰŷ¡ ¿äû / ½ÂÀÎ / ¿äû°ÅºÎ // nType (0 : °Å·¡ ¿äû, 1 : ½ÂÀÎ, 2 : °ÅÀý) void CGameLog::WriteItemTradeStatus( TCHAR* szPlayer1_ID, TCHAR* szPlayer1_CharName, int nServerCode, TCHAR* szPlayer2_ID, TCHAR* szPlayer2_CharName, int nType ) { ItemData data; if( nType == 0 ) // ¾ÆÀÌÅÛ °Å·¡ ¿äû data.iItemCode = ITEM_REQUEST; else if( nType == 1 ) // ½ÂÀÎ data.iItemCode = ITEM_ACCEPT; else if( nType == 2 ) // °ÅÀý data.iItemCode = ITEM_REJECT; else return; data.iServerCode = nServerCode; WriteBaseData( &data, szPlayer1_ID, szPlayer1_CharName ); if( szPlayer2_ID == NULL ) _tcscpy( data.szToUserID, "" ); else _tcscpy( data.szToUserID, szPlayer2_ID ); if( szPlayer2_CharName == NULL ) _tcscpy( data.szToCharName, "" ); else _tcscpy( data.szToCharName, szPlayer2_CharName ); m_LogMng.WriteItem( data, m_bWriteText, NULL ); } // 12. °³ÀλóÁ¡ °³¼³/Æó¼â void CGameLog::WriteItemVendorStatus( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, BOOL bOpen, DWORD dwMoney, int nMapCode, int nPosX, int nPosY, int nPosZ ) { ItemData data; if( bOpen == TRUE ) data.iItemCode = ITEM_NEWPC; else data.iItemCode = ITEM_DELPC; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.siMapCode = nMapCode; data.siMapX = nPosX; data.siMapY = nPosY; data.siMapZ = nPosZ; m_LogMng.WriteItem( data, m_bWriteText, "Money = %d", dwMoney ); } // 13. °³ÀλóÁ¡ º¸±â void CGameLog::WriteViewItemVendor( TCHAR* szPlayer1_ID, TCHAR* szPlayer1_CharName, int nServerCode, TCHAR* szPlayer2_ID, TCHAR* szPlayer2_CharName ) { ItemData data; data.iItemCode = ITEM_WATCHPC; data.iServerCode = nServerCode; WriteBaseData( &data, szPlayer1_ID, szPlayer1_CharName ); if( szPlayer2_ID == NULL ) _tcscpy( data.szToUserID, "" ); else _tcscpy( data.szToUserID, szPlayer2_ID ); if( szPlayer2_CharName == NULL ) _tcscpy( data.szToCharName, "" ); else _tcscpy( data.szToCharName, szPlayer2_CharName ); m_LogMng.WriteItem( data, m_bWriteText, NULL ); } // 14. â°í Á¤º¸ void CGameLog::WriteWareHouseInfo( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, vector vecItem, DWORD dwMoney ) { ItemData data; data.iItemCode = ITEM_WATCHPC; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); string strInfo; int nSize = (int)vecItem.size(); for(int i = 0; i < nSize ; i++) { ITEMLOGINFO item = vecItem[i]; TCHAR szInfo[128]; wsprintf( szInfo, "ITEM_CODE = %d, ITEM_SERIAL = %d, ITEM_COUNT = %d, ", item.nItemCode, item.nItemSerial, item.nItemCount ); strInfo += szInfo; } TCHAR szMoney[128]; wsprintf( szMoney, "MONEY = %d ", dwMoney ); strInfo += szMoney; m_LogMng.WriteItem( data, m_bWriteText, strInfo.data() ); } // 15. °³ÀλóÁ¡ Á¤º¸(°¡°Ý¼³Á¤) void CGameLog::WriteVendorInfo( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, vector vecItem ) { ItemData data; data.iItemCode = ITEM_SETPRICE_PC; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); string strInfo; int nSize = (int)vecItem.size(); for(int i = 0; i < nSize ; i++) { ITEMLOGINFO item = vecItem[i]; TCHAR szInfo[128]; wsprintf( szInfo, "ITEM_CODE = %d, ITEM_SERIAL = %d, ITEM_COUNT = %d, ITEM_MONEY = %d", item.nItemCode, item.nItemSerial, item.nItemCount, item.dwMoney ); strInfo += szInfo; } m_LogMng.WriteItem( data, m_bWriteText, strInfo.data() ); } ////////////////////////////////////////////////////////////////////////// // À¯Àú¾×¼Ç ·Î±× //1. ºÎȰ ·Î±× void CGameLog::WritePlayerResurrection( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, DWORD dwExp, int nMapCode, int nPosX, int nPosY, int nPosZ ) { ActionData data; data.iActionCode = ACT_REBIRTH_CHAR; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.siMapCode = nMapCode; data.siMapX = nPosX; data.siMapY = nPosY; data.siMapZ = nPosZ; m_LogMng.WriteUserAction( data, m_bWriteText, NULL ); } void CGameLog::WritePlayerDead( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, DWORD dwExp, int nMapCode, int nPosX, int nPosY, int nPosZ ) { ActionData data; data.iActionCode = ACT_DEAD_CHAR; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.siMapCode = nMapCode; data.siMapX = nPosX; data.siMapY = nPosY; data.siMapZ = nPosZ; m_LogMng.WriteUserAction( data, m_bWriteText, NULL ); } void CGameLog::WriteInvenInfoOnLogin( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode ) { ActionData data; data.iActionCode = ACT_INVENLOGIN; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteUserAction( data, m_bWriteText, NULL ); // Àκ¥Á¤º¸¸¦ ¾î¶»°Ô ³²±æ °ÍÀΰ¡? } void CGameLog::WriteUseStat( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, byte byStatType ) { ActionData data; data.iActionCode = ACT_USE_STAT; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteUserAction( data, m_bWriteText, " STATCODE = %d", byStatType ); } void CGameLog::WriteCharacter( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, BOOL bCreate ) { ActionData data; if( bCreate == TRUE ) data.iActionCode = ACT_CREATE_CHAR; else data.iActionCode = ACT_DELETE_CHAR; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteUserAction( data, m_bWriteText, NULL ); } // 6. ¸¶À»·Î À̵¿ void CGameLog::WriteMoveVillage( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, int nMapCode ) { ActionData data; data.iActionCode = ACT_MOVE_TOWN; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); data.siMapCode = nMapCode; m_LogMng.WriteUserAction( data, m_bWriteText, NULL ); } // 7. ½ºÅ³·¹º§¾÷ void CGameLog::WriteSkillLevelUp( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, int nSkillCode, BOOL bLevelUp ) { ActionData data; if( bLevelUp == FALSE ) //·¹º§¾÷ÀÌ ¾Æ´Ï¸é, óÀ½ ½ºÅ³À» ¹è¿ì´Â °Å´Ù. data.iActionCode = ACT_ACQUIRE_SKILL; else data.iActionCode = ACT_SKILLLV_UP; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteUserAction( data, m_bWriteText, "SKILL CODE = %d", nSkillCode ); } ////////////////////////////////////////////////////////////////////////// // ¼¼¼Ç ·Î±× //1. Ç÷¹ÀÌ¾î ·Î±×ÀÎ ] void CGameLog::WritePlayerLogin( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, TCHAR* szIP, WORD wClass, WORD wLevel ) { SessionData data; data.iConnectCode = CONN_LOGIN; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); if( szIP == NULL ) _tcscpy( data.szClientIP, "" ); else _tcscpy( data.szClientIP, szIP ); m_Time.GetTime( 3, data.szLoginTime, 16 ); data.byClassCode = (BYTE)wClass; data.siLevel = wLevel; m_LogMng.WriteSession( data, m_bWriteText, NULL ); } //2. Ç÷¹ÀÌ¾î ·Î±×ÀÎ ½ÇÆÐ void CGameLog::WritePlayerLoginFail( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, TCHAR* szIP ) { SessionData data; data.iConnectCode = CONN_LOGIN_FAIL; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); if( szIP == NULL ) _tcscpy( data.szClientIP, "" ); else _tcscpy( data.szClientIP, szIP ); m_Time.GetTime( 3, data.szLoginTime, 16 ); m_LogMng.WriteSession( data, m_bWriteText, NULL ); } // 3. ·Î±×¾Æ¿ô void CGameLog::WritePlayerLogOut( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, TCHAR* szIP, TCHAR* szLoginTime, WORD wClass, WORD wLevel ) { SessionData data; data.iConnectCode = CONN_LOGOUT; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); if( szIP == NULL ) _tcscpy( data.szClientIP, "" ); else _tcscpy( data.szClientIP, szIP ); if( szLoginTime == NULL ) _tcscpy( data.szLoginTime, "" ); else _tcscpy( data.szLoginTime, szLoginTime ); m_Time.GetTime( 3, data.szLogoutTime, 16 ); //·Î±×ÀΠŸÀÓ°ú ·Î±×¾Æ¿ô ŸÀÓÀ» °è»êÇϰí, »ç¿ë½Ã°£À» ³²±ä´Ù. //´ÙÀ½ ÇÔ¼ö´Â ŸÀÔ 3, 4¸¦ ¸ðµÎ »ç¿ëÇÒ¼ö ÀÖ´Ù. if( data.szLogoutTime != NULL ) { int nUsedTime = WZTime::GetDiffTimeType4( data.szLoginTime, data.szLogoutTime ); data.iUseTime = nUsedTime; } data.byClassCode = (BYTE)wClass; data.siLevel = wLevel; m_LogMng.WriteSession( data, m_bWriteText, NULL ); } // 4. ij¸¯ÅÍ Á¢¼Ó / Á¾·á void CGameLog::WriteCharConnect( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, BOOL bConnect ) { SessionData data; if( bConnect == TRUE ) //Á¢¼Ó data.iConnectCode = CONN_CHAR_CONNECT; else data.iConnectCode = CONN_CHAR_DISCONNECT; data.iServerCode = nServerCode; WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteSession( data, m_bWriteText, NULL ); } ////////////////////////////////////////////////////////////////////////// // äÆÃ ·Î±× // 1. ¸¶À» äÆÃ void CGameLog::WriteVillageChat( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, short sMapCode, TCHAR* szChatMsg ) { ChatData data; data.iChannel = nServerCode; // ä³Î¸í data.byChatCode = CHAT_EYERANGE; // ½Ã¾ß ¹üÀ§ äÆÃÀÌ´Ù data.siMapCode = sMapCode; memcpy( data.szContext, szChatMsg, sizeof(TCHAR) * 100 ); WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteChat( data, m_bWriteText, NULL ); } // 2. ¿ÜÄ¡±â void CGameLog::WriteShoutChat( TCHAR* szAccountID, TCHAR* szCharName, int nServerCode, short sMapCode, TCHAR* szChatMsg ) { ChatData data; data.iChannel = nServerCode; data.byChatCode = CHAT_SHOUT; data.siMapCode = sMapCode; memcpy( data.szContext, szChatMsg, sizeof(TCHAR) * 100 ); WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteChat( data, m_bWriteText, NULL ); } // 3. ¹èƲÁ¸ äÆÃ void CGameLog::WriteBattleZoneChat( TCHAR* szAccountID, TCHAR* szCharName, int nRoomNo, int nServerCode, short sMapCode, TCHAR* szChatMsg ) { ChatData data; data.iChannel = nServerCode; data.byChatCode = CHAT_SHOUT; data.siMapCode = sMapCode; memcpy( data.szContext, szChatMsg, sizeof(TCHAR) * 100 ); data.iRoomNo = nRoomNo; WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteChat( data, m_bWriteText, NULL ); } // 4. ±æµå äÆÃ void CGameLog::WriteGuildChat( TCHAR* szAccountID, TCHAR* szCharName, TCHAR* szGuildName, int nServerCode, short sMapCode, TCHAR* szChatMsg ) { ChatData data; data.iChannel = nServerCode; data.byChatCode = CHAT_SHOUT; memcpy( data.szContext, szChatMsg, sizeof(TCHAR) * 100 ); memcpy( data.szListenCharName, szGuildName, sizeof(TCHAR) * MAX_CHAR_NAME_STR_SIZE ); WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteChat( data, m_bWriteText, NULL ); } // 5. ±Ó¼Ó¸» void CGameLog::WriteWhisperChat( TCHAR* szAccountID, TCHAR* szCharName, TCHAR* szRecvCharName, int nServerCode, TCHAR* szChatMsg ) { ChatData data; data.iChannel = nServerCode; data.byChatCode = CHAT_SHOUT; memcpy( data.szContext, szChatMsg, sizeof(TCHAR) * 100 ); memcpy( data.szListenCharName, szRecvCharName, sizeof(TCHAR) * MAX_CHAR_NAME_STR_SIZE ); WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteChat( data, m_bWriteText, NULL ); } // 6. Ä£±¸ äÆÃ void CGameLog::WriteFriendChat( TCHAR* szAccountID, TCHAR* szCharName, TCHAR* szRecvCharName, int nServerCode, TCHAR* szChatMsg ) { ChatData data; data.iChannel = nServerCode; data.byChatCode = CHAT_SHOUT; memcpy( data.szContext, szChatMsg, sizeof(TCHAR) * 100 ); memcpy( data.szListenCharName, szRecvCharName, sizeof(TCHAR) * MAX_CHAR_NAME_STR_SIZE ); WriteBaseData( &data, szAccountID, szCharName ); m_LogMng.WriteChat( data, m_bWriteText, NULL ); } // Á¤±âÀûÀ¸·Î °ÔÀÓ ·Î±×¸¦ ³²±ä´Ù. // ¿©±â¼­ ½ÇÇàµÇÁö ¾ÊÀ¸¸é, ·Î±×µ¥ÀÌÅ͸¦ ÀÌ Å¬·¡½º·Î ³Ñ°Üµµ, ±â·ÏµÇÁö ¾Ê´Â´Ù. void CGameLog::StartRegularLog( int nLogType ) { if( nLogType == REGULAR_SKILL ) //½ºÅ³·Î±×¸¦ ½ÃÀÛ½ÃŲ´Ù¸é.. { // ¿©±â¼­ ¾²·¹µå¸¦ ½ÇÇà½Ã۰í, // ¾²·¹µå ³»¿¡¼­ Timer¸¦ ½ÇÇà½ÃŲ´Ù. unsigned int nThreadID = 1; HANDLE hSkillThread = (HANDLE)_beginthreadex( NULL, 0, SkillWorkThread, NULL, 0, &nThreadID ); } } //Thread Argument unsigned int __stdcall SkillWorkThread(void* pArg) { CGameLog* pLog = (CGameLog*)pArg; while(TRUE) { } }