#include "StdAfx.h" #include ".\gamelog.h" #include #include "ItemManager.h" #include "SkillManager.h" #include "MissionManager.h" #include "SCItemSlotContainer.h" #include "SCSkillSlotContainer.h" #include "SkillInfoParser.h" #include "WarehouseSlotContainer.h" #include "Map.h" #include #include #include #include "GameServerEx.h" #include "GameZone.h" #include "RewardManager.h" #include "SkillManager.h" #include "Player.h" #include #include "QuestManager_Concrete.h" #include #include "ChaoState.h" #include "SkillSlotManager.h" #include "GameGuildManager.h" #include "GameGuild.h" #include "GameDominationManager.h" #include "SystemMemo.h" //_NA_20100901_ADD_GAMELOG_FOR_SYSTEM_MEMO_TYPE #ifdef _NA_008124_20150313_AWAKENING_SYSTEM #include "AwakeningInfoParser.h" #endif // _NA_008124_20150313_AWAKENING_SYSTEM #ifdef _NA_008299_20150519_MAX_DAMAGE_LOG #include "Skill_Info.h" #endif // _NA_008299_20150519_MAX_DAMAGE_LOG GameLog::GameLog() { } ////////////////////////////////////////////////////////////////////////// // °æÇèÄ¡ ·Î±× // 1. ·¹º§¾÷ ·Î±× void GameLog::WriteLevelUp( Player* pPlayer, WORD wOldLevel, WORD wNewLevel ) { if( !IsRun() || !pPlayer ) return; m_ExpData.Init(); m_ExpData.SetLogType( EXP_LEVELUP ); m_ExpData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ExpData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ExpData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); // m_ExpData.SetOldExp( dwOldExp ); // m_ExpData.SetNewExp( dwNewExp ); m_ExpData.SetOldLevel( wOldLevel ); m_ExpData.SetNewLevel( wNewLevel ); // SetRoomKey( m_ExpData, pPlayer ); // SetPlayerPosAddInfo( m_ExpData, pPlayer ); #ifdef _NA_007750_20141113_WZDAT_MODIFY_LOG _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, _T("Class:%u"), (pPlayer->GetCharInfo() != NULL) ? pPlayer->GetCharInfo()->m_byClassCode : eCLASS_NONE); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ExpData.AddAddInfo(m_pTmpBuffer); #endif // _NA_007750_20141113_WZDAT_MODIFY_LOG m_LogMng.Serialize( m_ExpData ); } // NOTE: f110602.3L void GameLog::WritePerkLevelUp(Player* player, int perk_group, LEVELTYPE old_level, LEVELTYPE new_level) { if (player == NULL || IsRun() == false) { return; }; m_ExpData.Init(); m_ExpData.SetLogType(EXP_PERK_LEVEL); m_ExpData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ExpData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ExpData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); m_ExpData.SetOldLevel(old_level); m_ExpData.SetNewLevel(new_level); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "Code:%u", perk_group); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ExpData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize(m_ExpData); } // 2. ·¹º§ 10 ÀÌ»ó½Ã °æÇèÄ¡ 10µîºÐ ·Î±× void GameLog::LogExp( Player* pPlayer, WORD wCurLevel, EXPTYPE OldExp, EXPTYPE NewExp, MAPCODE Mapcode ) { if( !IsRun() || !pPlayer ) return; // ·¹º§ÀÌ 10ÀÌ»óÀÌ µÇ¾ß ·Î±×¸¦ ³²±ä´Ù. if( wCurLevel < MAX_EXP_DIVIDE_LOG_AT_LEVEL ) return; // ÀÌÀü ·¹º§ÀÇ °æÇèÄ¡ ´©Àû°ª EXPTYPE CurAccumExp = pPlayer->GetAccumExp( wCurLevel ) ; // »õ·Î¿î ·¹º§ÀÇ °æÇèÄ¡ ´©Àû°ª EXPTYPE NextAccumExp = pPlayer->GetAccumExp( wCurLevel +1 ); BYTE byCurDivide = 0, byNextDivide = 0; if( wCurLevel < MAX_EXP_FULL_LOG_AT_LEVEL #ifdef _NA_000000_20131031_GAMELOG_REDUCE || (g_pGameServer->GetGuid() == FIELD_SERVER) #endif //_NA_000000_20131031_GAMELOG_REDUCE ) { // 1/10µîºÐÀÇ °æÇèÄ¡ °ª EXPTYPE DifExp = (NextAccumExp - CurAccumExp) / 10; ASSERT(DifExp > 0); if( DifExp <= 0 ) return; byCurDivide = (BYTE)( ( OldExp - CurAccumExp ) / DifExp ); byNextDivide = (BYTE)( ( NewExp - CurAccumExp ) / DifExp ); //ÇöÀç °æÇèÄ¡¿¡ ÀÇÇÑ µîºÐº¸´Ù ¾÷µÈ °æÇèÄ¡¿¡ ÀÇÇÑ µîºÐÀÌ °°´Ù¸é if( byCurDivide == byNextDivide ) return; } m_ExpData.Init(); m_ExpData.SetLogType( EXP_DIVIDECNT ); m_ExpData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ExpData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ExpData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_ExpData.SetDivideCount( byNextDivide ); m_ExpData.SetOldExp( NewExp - OldExp ); m_ExpData.SetNewExp( NewExp ); m_ExpData.SetOldLevel( wCurLevel ); // ·¹º§¾÷À̶ó¸é if( NewExp >= NextAccumExp ) m_ExpData.SetNewLevel( wCurLevel + 1 ); else m_ExpData.SetNewLevel( wCurLevel ); if( Mapcode ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "MCode:%u", Mapcode ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ExpData.AddAddInfo(m_pTmpBuffer); // CHANGES: f110602.3L, fixed the invalid data setting. } m_LogMng.Serialize( m_ExpData ); } // 3. °æÇèÄ¡ ´Ù¿î void GameLog::WriteDownExp( Player* pPlayer, EXPTYPE NewExp, EXPTYPE OldExp ) { if( !IsRun() || !pPlayer ) return; // ÇöÀçÀÇ ÀÎÅÍÆäÀ̽º·Î´Â ºÒ°¡´É.. // Çö Ç÷¹À̾îÀÇ Àüü °æÇèÄ¡¿Í ´Ù¿îµÈ °æÇèÄ¡¸¦ ¿ä±¸Çϴµ¥, ÇöÀç ÀÎÀڷδ ºÒ°¡´É. // AddInfo¿¡ »ðÀÔÇÒ °æ¿ì, ´Ù¿îµÈ °æÇèÄ¡¸¦ ³ÖÀ»°ÍÀΰ¡? m_ExpData.Init(); m_ExpData.SetLogType( EXP_DOWN ); m_ExpData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ExpData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ExpData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_ExpData.SetNewExp( NewExp ); m_ExpData.SetOldExp( OldExp ); m_LogMng.Serialize( m_ExpData ); } void GameLog::LogExp( int iLogType, Player* pPlayer, EXPTYPE NewExp, EXPTYPE OldExp ) { if( !IsRun() || !pPlayer ) return; // ÇöÀçÀÇ ÀÎÅÍÆäÀ̽º·Î´Â ºÒ°¡´É.. // Çö Ç÷¹À̾îÀÇ Àüü °æÇèÄ¡¿Í ´Ù¿îµÈ °æÇèÄ¡¸¦ ¿ä±¸Çϴµ¥, ÇöÀç ÀÎÀڷδ ºÒ°¡´É. // AddInfo¿¡ »ðÀÔÇÒ °æ¿ì, ´Ù¿îµÈ °æÇèÄ¡¸¦ ³ÖÀ»°ÍÀΰ¡? m_ExpData.Init(); m_ExpData.SetLogType( iLogType ); m_ExpData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ExpData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ExpData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_ExpData.SetNewExp( NewExp ); m_ExpData.SetOldExp( OldExp ); m_LogMng.Serialize( m_ExpData ); } // implemented by _NA_20100423_GROUPSYSTEM_MONEY_AND_EXP_GAMELOG void GameLog::LogExp (int log_type, Player* player, EXPTYPE new_exp, EXPTYPE old_exp, const TCHAR* char_name) { if (!IsRun() || !player) return; m_ExpData.Init(); m_ExpData.SetLogType(log_type); m_ExpData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ExpData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ExpData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); m_ExpData.SetNewExp(new_exp); m_ExpData.SetOldExp(old_exp); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "Low Member:%s", char_name); m_pTmpBuffer[_countof(m_pTmpBuffer)-1]='\0'; m_ExpData.AddAddInfo(m_pTmpBuffer); // CHANGES: f110602.3L, fixed the invalid data setting. m_LogMng.Serialize(m_ExpData); } void GameLog::LogExpPerk(Player* player, int perk_group, EXPTYPE new_exp, EXPTYPE old_exp) { if (player == NULL || IsRun() == false) { return; }; m_ExpData.Init(); m_ExpData.SetLogType(EXP_PERK); m_ExpData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ExpData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ExpData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); m_ExpData.SetNewExp(new_exp); m_ExpData.SetOldExp(old_exp); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "Code:%u", perk_group); m_pTmpBuffer[_countof(m_pTmpBuffer)-1]='\0'; m_ExpData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize(m_ExpData); } // //class aaab //{ //public: // void CopyOut( ITEMSTREAMEX & aa ) const // { // aa.OptionPart.Block =1; // } //}; //void aaa(const aaab & rItemSlot) //{ // ITEMSTREAMEX ItemStreamEx; // rItemSlot.CopyOut(ItemStreamEx); //} void GameLog::LogMonsterMoneyDrop( int iLogType, DWORD64 dw64Money, DWORD dwMonsterCode, DWORD dwMonsterLevel, WORD wMapCode, const WzVector& vecPos, KEYTYPE RoomKey ) { // ·Î±×¾ç ÁÙÀ̱â À§ÇØ ¸ó½ºÅÍ µå¶ø ¿ì¼± ·Î±× ¾È³²±è // 20060802 ¿ÀÈÄ 5:30:13 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! return; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #if SUN_CODE_BACKUP if( !IsRun() ) return; m_MoneyData.Init(); m_MoneyData.SetLogType( iLogType ); m_MoneyData.SetMapCode( wMapCode ); m_MoneyData.SetMapX( (SHORT)vecPos.x ); m_MoneyData.SetMapY( (SHORT)vecPos.y ); m_MoneyData.SetMapZ( (SHORT)vecPos.z ); m_MoneyData.SetMoney( dw64Money ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Room:%u,Mon:%u,MonLV:%u", RoomKey, dwMonsterCode, dwMonsterLevel ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "RmKy:%u,Mon:%u,MonLV:%u", RoomKey, dwMonsterCode, dwMonsterLevel ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_MoneyData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_MoneyData ); #endif } void GameLog::LogTotalMoney( DWORD64 dw64Money, DWORD64 dw64ToMoney, WORD PlayerNum, DWORD64 dw64PlayerTotalMoney ) { if( !IsRun() ) return; m_MoneyData.Init(); m_MoneyData.SetLogType( MONEY_TOTAL ); m_MoneyData.SetAccountID( NULL, ID_MAX_LEN ); m_MoneyData.SetCharName( NULL, MAX_CHARNAME_LENGTH ); m_MoneyData.SetUserIP( NULL, MAX_IPADDRESS_SIZE ); m_MoneyData.SetMoney( dw64Money ); m_MoneyData.SetToMoney( dw64ToMoney ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "PlayerNum:%u,TotMoney:%I64u", PlayerNum, dw64PlayerTotalMoney ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "PlyNo:%u,TotMny:%I64u", PlayerNum, dw64PlayerTotalMoney ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_MoneyData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_MoneyData ); } void GameLog::LogTotalWarehouseMoney( DWORD64 dw64Money, DWORD64 dw64ToMoney, WORD PlayerNum, DWORD64 dw64PlayerTotalMoney ) { if( !IsRun() ) return; m_MoneyData.Init(); m_MoneyData.SetLogType( MONEY_TOTALWAREHOUSE ); m_MoneyData.SetAccountID( NULL, ID_MAX_LEN ); m_MoneyData.SetCharName( NULL, MAX_CHARNAME_LENGTH ); m_MoneyData.SetUserIP( NULL, MAX_IPADDRESS_SIZE ); m_MoneyData.SetMoney( dw64Money ); m_MoneyData.SetToMoney( dw64ToMoney ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "PlayerNum:%u,TotMoney:%I64u", PlayerNum, dw64PlayerTotalMoney ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "PlyNo:%u,TotMny:%I64u", PlayerNum, dw64PlayerTotalMoney ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_MoneyData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_MoneyData ); } // implemented by _NA_20100901_ADD_GAMELOG_FOR_SYSTEM_MEMO_TYPE void GameLog::LogMemoReward(eSYSTEM_MEMO_TYPE memo_type, Player* player, WORD reward_item_code, ULONGLONG amount_item, const TCHAR* memo_contents) { if (!IsRun() || !player) { return; } //-- º¸»óÀº ¾ÆÀÌÅÛ or µ· int log_type = (reward_item_code == 0) ? MONEY_MAX : ITEM_MAX; switch(memo_type) { case SYSMEMO_LOTTO_WIN: case SYSMEMO_LOTTO_WIN_NEW: { log_type = MONEY_LOTTO_REWARD; } break; case SYSMEMO_DOMINATION_RETURN_MONEY: case SYSMEMO_DOMINATION_RETURN_MONEY_NEW: { log_type = (reward_item_code == 0) ? MONEY_DOMINATION_ACTIONMONEY_RETURN : ITEM_DOMINATION_AUCTION_RETURN_ITEM_BY_SYSTEM_MEMO; } break; case SYSMEMO_DOMINATION_REWARD_MONEY: case SYSMEMO_DOMINATION_REWARD_MONEY_NEW: { log_type = (reward_item_code == 0) ? MONEY_DOMINATION_ACTIONMONEY_REWARD : ITEM_DOMINATION_AUCTION_REWARD_ITEM_BY_SYSTEM_MEMO; } break; default: { log_type = (reward_item_code == 0) ? MONEY_DEFAULT_SYSTEM_MEMO_REWARD : ITEM_DEFAULT_SYSTEM_MEMO_REWARD; } break; } if(reward_item_code == 0) { LogMemoRewardMoney(log_type, player, amount_item, memo_contents); } else { WORD item_num = static_cast(amount_item); LogMemoRewardItem(log_type, player, reward_item_code, item_num, memo_contents); } return; } void GameLog::LogMemoRewardMoney(int log_type, Player* player, ULONGLONG amount_Heim, const TCHAR* memo_contents) { if (!IsRun() || !player) { return; } ASSERT(log_type >= MONEY_TOTAL || log_type < MONEY_MAX); SystemMemo system_memo; m_MoneyData.Init(); m_MoneyData.SetLogType(log_type); m_MoneyData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_MoneyData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_MoneyData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); m_MoneyData.SetMoney(player->GetMoney()); m_MoneyData.SetToMoney(amount_Heim); GameZone *zone = player->GetGameZonePtr(); if (zone) { WzVector vector_pos; player->GetPos( &vector_pos ); m_MoneyData.SetMapCode( (WORD)zone->GetMapCode() ); m_MoneyData.SetMapX( (short)vector_pos.x ); m_MoneyData.SetMapY( (short)vector_pos.y ); m_MoneyData.SetMapZ( (short)vector_pos.z ); } //-- ¸Þ¸ðº° AddInfo ÀÛ¼º : ¸Þ¸ðº°·Î ÇÊ¿äÇÑ Á¤º¸¸¦ ¾òÀ»¶§ ½Ã½ºÅÛ //¸Þ¸ð³»¿¡ ÁöÁ¤µÈ Æ÷¸ËÀÇ ¸î¹øÂ° Á¤º¸ÀÎÁö ¹Ì¸® ¾Ë¾Æ¾ß ÇÑ´Ù. if (log_type == MONEY_DOMINATION_ACTIONMONEY_RETURN || log_type == MONEY_DOMINATION_ACTIONMONEY_REWARD) { GameGuild* guild = g_GameGuildManager.FindGuild(player->GetGuildGuid()); if(guild != NULL) { _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "Guild:%s, Map:%d, Money:%I64u", guild->GetGuildName(), system_memo.GetMemoDataToINT(memo_contents, 2), amount_Heim);//¸Þ¸ð ³»¿ëÁß 2¹øÂ°°¡ ¸ÊÄÚµå m_pTmpBuffer[_countof(m_pTmpBuffer) - 1] = '\0'; m_MoneyData.AddAddInfo(m_pTmpBuffer); } } else if(log_type == MONEY_LOTTO_REWARD) { _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "Name:%s, Money:%I64u", player->GetCharName(), amount_Heim); m_pTmpBuffer[_countof(m_pTmpBuffer) - 1] = '\0'; m_MoneyData.AddAddInfo(m_pTmpBuffer); } m_LogMng.Serialize(m_MoneyData); } void GameLog::LogMemoRewardItem(int log_type, Player* player, WORD reward_item_code, WORD amount_item, const TCHAR* memo_contents) { if (!IsRun() || !player) { return; } ASSERT(log_type < ITEM_MAX); SystemMemo system_memo; m_ItemData.Init(); m_ItemData.SetLogType(log_type); m_ItemData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ItemData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ItemData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); m_ItemData.SetItemCode(reward_item_code);//Äڵ尡 0À̸é ÇÏÀÓ m_ItemData.SetItemNum(amount_item); GameZone *zone = player->GetGameZonePtr(); if (zone) { WzVector vector_pos; player->GetPos(&vector_pos); m_ItemData.SetMapCode((WORD)zone->GetMapCode()); m_ItemData.SetMapX((short)vector_pos.x); m_ItemData.SetMapY((short)vector_pos.y); m_ItemData.SetMapZ((short)vector_pos.z); } //-- ¸Þ¸ðº° AddInfo ÀÛ¼º : ¸Þ¸ðº°·Î ÇÊ¿äÇÑ Á¤º¸¸¦ ¾òÀ»¶§ ½Ã½ºÅÛ //¸Þ¸ð³»¿¡ ÁöÁ¤µÈ Æ÷¸ËÀÇ ¸î¹øÂ° Á¤º¸ÀÎÁö ¹Ì¸® ¾Ë¾Æ¾ß ÇÑ´Ù. if (log_type == ITEM_DOMINATION_AUCTION_RETURN_ITEM_BY_SYSTEM_MEMO || log_type == ITEM_DOMINATION_AUCTION_REWARD_ITEM_BY_SYSTEM_MEMO) { GameGuild* guild = g_GameGuildManager.FindGuild(player->GetGuildGuid()); if(guild != NULL) { _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "Guild:%s, Map:%d, ItemNum:%d", guild->GetGuildName(), system_memo.GetMemoDataToINT(memo_contents, 2), amount_item);//¸Þ¸ð ³»¿ëÁß 2¹øÂ°°¡ ¸ÊÄÚµå m_pTmpBuffer[_countof(m_pTmpBuffer) - 1] = '\0'; m_ItemData.AddAddInfo(m_pTmpBuffer); } } m_LogMng.Serialize(m_ItemData); } void GameLog::LogMoney( int iLogType, Player * pPlayer, DWORD64 dw64Money, DWORD64 dw64ToMoney, const TCHAR * ptszToUserID, const TCHAR * ptszToCharName ) { if( !IsRun() || !pPlayer ) return; ASSERT( iLogType >= MONEY_TOTAL || iLogType < MONEY_MAX ); m_MoneyData.Init(); m_MoneyData.SetLogType( iLogType ); m_MoneyData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_MoneyData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_MoneyData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_MoneyData.SetToAccountID( ptszToUserID , ID_MAX_LEN ); m_MoneyData.SetToCharName( ptszToCharName, MAX_CHARNAME_LENGTH ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_MoneyData.SetMapCode( (WORD)pZone->GetMapCode() ); m_MoneyData.SetMapX( (short)vecPos.x ); m_MoneyData.SetMapY( (short)vecPos.y ); m_MoneyData.SetMapZ( (short)vecPos.z ); } if( iLogType == MONEY_TRADE ) { //°¡Áø µ· m_MoneyData.SetMoney( pPlayer->GetMoney() ); //ÁÙ µ· m_MoneyData.SetToMoney( dw64Money ); //¹ÞÀ» µ·Àº AddInfo¿¡ _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",FromMny:%I64d", dw64ToMoney ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_MoneyData.AddAddInfo( m_pTmpBuffer ); } else { // Ç÷¹À̾îÀÇ ÇöÀç ÃÑ ¸Ó´Ï°ª if( 0 == dw64ToMoney ) { m_MoneyData.SetMoney( pPlayer->GetMoney() ); // Ç÷¹À̾îÀÇ º¯È­ ¸Ó´Ï°ª m_MoneyData.SetToMoney( dw64Money ); } else { m_MoneyData.SetMoney( dw64Money ); m_MoneyData.SetToMoney( dw64ToMoney ); } } GameZone * pGameZone = pPlayer->GetGameZonePtr(); if( pGameZone ) { m_MoneyData.SetRoomKey( pGameZone->GetKey() ); } if( iLogType == MONEY_WAREHOUSE_PUT || iLogType == MONEY_WAREHOUSE_GET ) { if( pPlayer->GetWarehouseContainer() ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",WrHusMny:%I64u", pPlayer->GetWarehouseContainer()->GetCurMoney() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_MoneyData.AddAddInfo( m_pTmpBuffer ); } } if( iLogType == MONEY_GUILD_WAREHOUSE_PUT || iLogType == MONEY_GUILD_WAREHOUSE_GET ) { if(GameGuild* pGuild = g_GameGuildManager.FindGuild(pPlayer->GetGuildGuid())) { MONEY curMoney(0); if(pPlayer->GetGuildWarehouseContainer()) { curMoney = pPlayer->GetGuildWarehouseContainer()->GetCurMoney(); } _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "GuildName:%s, GuildGuid:%u, CurMoney:%I64u", pGuild->GetGuildName(), pGuild->GetGuildGuid(), curMoney); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_MoneyData.AddAddInfo(m_pTmpBuffer); } } //_KR_001385_20091211_DOMINATION_GAMELOG_MONEY if( iLogType == MONEY_DOMINATION_ACTIONMONEY_RETURN || iLogType == MONEY_DOMINATION_ACTIONMONEY_REWARD || iLogType == MONEY_DOMINATION_ACTIONMONEY_APPLY) { if(GameGuild* pGuild = g_GameGuildManager.FindGuild(pPlayer->GetGuildGuid())) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "%s", pGuild->GetGuildName() ); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_MoneyData.AddAddInfo(m_pTmpBuffer); } } //_NA_20100423_GROUPSYSTEM_MONEY_AND_EXP_GAMELOG if (iLogType == MONEY_GROUPSYSTEM_GETMONEY) { _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "High Member : %s", ptszToCharName); m_pTmpBuffer[_countof(m_pTmpBuffer)-1] = '\0'; m_MoneyData.AddAddInfo(m_pTmpBuffer); } m_LogMng.Serialize( m_MoneyData ); // Å« ÇÏÀÓÀÏ °æ¿ì ·Î±× Áߺ¹ ³²±è, 100¸¸ ÇÏÀÓÀÌ»óÀÏ °æ¿ì - 07.11.13 ±Ý¾× 1¾ï º¯°æ if( dw64Money >= LOG_TRADE_OVER_MONEY || dw64ToMoney >= LOG_TRADE_OVER_MONEY ) { m_MoneyData.SetLogType( MONEY_GREATE_MONEY ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",LogType:%u", iLogType ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_MoneyData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_MoneyData ); } } void GameLog::LogACItem( int iLogType, Player * pPlayer, const SCItemSlot * pItemSlot, float fPercentage ) { if( !IsRun() || !pPlayer ) return; ASSERT( iLogType >= ITEM_MONSTER_DROP || iLogType < ITEM_MAX ); m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // ¾ÆÀÌÅÛ Á¤º¸ if( pItemSlot ) { m_ItemData.SetItemCode( pItemSlot->GetItemCode() ); m_ItemData.SetItemSerial( pItemSlot->GetWorldSerial() ); m_ItemData.SetItemNum( (BYTE)pItemSlot->GetNum() ); ITEMSTREAMEX ItemStreamEx; pItemSlot->CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); } // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Percent:%f%%", fPercentage ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",P:%f%%", fPercentage ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } void GameLog::LogItemWarehouse( int iLogType, Player * pPlayer, const SCItemSlot * pItemSlot, DURATYPE byItemNum, SLOTIDX f_idx, POSTYPE f_pos, SLOTIDX t_idx, POSTYPE t_pos ) { if( !IsRun() || !pPlayer ) return; ASSERT( iLogType >= ITEM_MONSTER_DROP || iLogType < ITEM_MAX ); m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // ¾ÆÀÌÅÛ Á¤º¸ if( pItemSlot ) { m_ItemData.SetItemCode( pItemSlot->GetItemCode() ); m_ItemData.SetItemSerial( pItemSlot->GetWorldSerial() ); m_ItemData.SetItemNum( (BYTE)byItemNum ); ITEMSTREAMEX ItemStreamEx; pItemSlot->CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); } // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",FSlotIdx:%u,FPos:%u,TSlotIdx:%u,TPos:%u,Tick:%u", f_idx, f_pos, t_idx, t_pos, GetTickCount() ); //< ¾ÆÀÌÅÛ¸¦ »ì¶§ °¡°Ý. // m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; // m_ItemData.AddAddInfo( m_pTmpBuffer ); if(iLogType == ITEM_GUILD_WAREHOUSE_GET || iLogType == ITEM_GUILD_WAREHOUSE_PUT) { if(GameGuild* pGuild = g_GameGuildManager.FindGuild(pPlayer->GetGuildGuid())) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "GuildName:%s, GuildGuid:%u", pGuild->GetGuildName(), pGuild->GetGuildGuid()); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ItemData.AddAddInfo(m_pTmpBuffer); } } m_LogMng.Serialize( m_ItemData ); } void GameLog::LogItem_Pos( int iLogType, Player * pPlayer, const SCItemSlot * pItemSlot, MONEY ullMoney, DURATYPE byItemNum, SLOTIDX f_idx, POSTYPE f_pos, SLOTIDX t_idx, POSTYPE t_pos ) { if( !IsRun() || !pPlayer ) return; ASSERT( iLogType >= ITEM_MONSTER_DROP || iLogType < ITEM_MAX ); m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } m_ItemData.SetMoney( ullMoney ); // ¾ÆÀÌÅÛ Á¤º¸ if( pItemSlot ) { m_ItemData.SetItemCode( pItemSlot->GetItemCode() ); m_ItemData.SetItemSerial( pItemSlot->GetWorldSerial() ); m_ItemData.SetItemNum( (BYTE)byItemNum ); ITEMSTREAMEX ItemStreamEx; pItemSlot->CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); } // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",FSlotIdx:%u,FPos:%u,TSlotIdx:%u,TPos:%u,Tick:%u", f_idx, f_pos, t_idx, t_pos, GetTickCount() ); //< ¾ÆÀÌÅÛ¸¦ »ì¶§ °¡°Ý. // m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; // m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } void GameLog::LogItem(int log_type, Player* player, uint use_count, const SCItemSlot* use_slot, const SCItemSlot* target_slot) { if (!IsRun() || !player) { return; } ASSERT(log_type == ITEM_USE); if (log_type != ITEM_USE) { return; } m_ItemData.Init(); m_ItemData.SetLogType(log_type); m_ItemData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ItemData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ItemData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); GameZone* zone = player->GetGameZonePtr(); if (zone) { WzVector vecPos; player->GetPos(&vecPos); m_ItemData.SetMapCode((WORD)zone->GetMapCode()); m_ItemData.SetMapX((short)vecPos.x); m_ItemData.SetMapY((short)vecPos.y); m_ItemData.SetMapZ((short)vecPos.z); } m_ItemData.SetMoney(0); if (use_slot) { m_ItemData.SetItemCode(use_slot->GetItemCode()); m_ItemData.SetItemSerial(use_slot->GetWorldSerial()); m_ItemData.SetItemNum(use_count); ITEMSTREAMEX ItemStreamEx; use_slot->CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1((const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx)); } _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "Target Item, Code : %d, Serial : %d", target_slot->GetItemCode(), target_slot->GetWorldSerial()); m_pTmpBuffer[_countof(m_pTmpBuffer) - 1]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } #ifdef _NA_20110303_ADD_TYPE_OF_NPCSHOP void GameLog::LogItem(int log_type, Player * player, const SCItemSlot* item_slot, DURATYPE item_num, WORD price_of_goods, SHOPINFO* shop_info) { if (!IsRun() || !player) { return; } ASSERT(log_type >= ITEM_MONSTER_DROP || log_type < ITEM_MAX); if (log_type < ITEM_MONSTER_DROP || log_type >= ITEM_MAX) { return; } m_ItemData.Init(); m_ItemData.SetLogType(log_type); m_ItemData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ItemData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ItemData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); GameZone* zone = player->GetGameZonePtr(); if (zone) { WzVector vecPos; player->GetPos(&vecPos); m_ItemData.SetMapCode((WORD)zone->GetMapCode()); m_ItemData.SetMapX((short)vecPos.x); m_ItemData.SetMapY((short)vecPos.y); m_ItemData.SetMapZ((short)vecPos.z); } m_ItemData.SetMoney(price_of_goods); if (item_slot) { m_ItemData.SetItemCode(item_slot->GetItemCode()); m_ItemData.SetItemSerial(item_slot->GetWorldSerial()); m_ItemData.SetItemNum((BYTE)item_num); ITEMSTREAMEX ItemStreamEx; item_slot->CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1((const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx)); } _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "ShopID:%u, ShopType:%d, NeedItem:%u", shop_info->GetShopListID(), shop_info->GetShopType(), shop_info->GetCurrencyItemCode()); m_pTmpBuffer[_countof(m_pTmpBuffer) - 1]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } #endif void GameLog::LogItem( int iLogType, Player * pPlayer, const SCItemSlot * pItemSlot, MONEY ullMoney, DURATYPE byItemNum, const TCHAR * ptszToUserID, const TCHAR * ptszToCharName, const TCHAR* ptszAddInfo ) { if( !IsRun() || !pPlayer ) return; ASSERT( iLogType >= ITEM_MONSTER_DROP || iLogType < ITEM_MAX ); //switch( iLogType ) //{ ////case ITEM_MAKE_SERIAL: ////case ITEM_PICK: // { // if( pItemSlot && eITEMTYPE_WASTE == pItemSlot->GetItemInfo()->m_wType ) // { // // ¼Ò¸ð¼º ¾ÆÀÌÅÛ °æ¿ì ·Î±× ¾È³²±è : ·Î±×¾ç ÁÙÀ̱â À§ÇØ // return; // } // } // break; //} m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_ItemData.SetToAccountID( ptszToUserID, ID_MAX_LEN); m_ItemData.SetToCharName( ptszToCharName, MAX_CHARNAME_LENGTH); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } m_ItemData.SetMoney( ullMoney ); // ¾ÆÀÌÅÛ Á¤º¸ if( pItemSlot ) { m_ItemData.SetItemCode( pItemSlot->GetItemCode() ); m_ItemData.SetItemSerial( pItemSlot->GetWorldSerial() ); m_ItemData.SetItemNum( (BYTE)byItemNum ); ITEMSTREAMEX ItemStreamEx; pItemSlot->CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); } // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); if (ptszAddInfo != NULL) { m_ItemData.AddAddInfo((TCHAR*)ptszAddInfo); } m_LogMng.Serialize( m_ItemData ); } void GameLog::LogItemEx( int iLogType, Player * pPlayer, const SCItemSlot & rItemSlot1, const SCItemSlot & rItemSlot2, MONEY ullMoney, DURATYPE byItemNum, const TCHAR * ptszToUserID, const TCHAR * ptszToCharName ) { if( !IsRun() || !pPlayer ) return; m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_ItemData.SetToAccountID( ptszToUserID, ID_MAX_LEN); m_ItemData.SetToCharName( ptszToCharName, MAX_CHARNAME_LENGTH); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } m_ItemData.SetMoney( ullMoney ); // ¾ÆÀÌÅÛ Á¤º¸ m_ItemData.SetItemCode( rItemSlot1.GetItemCode() ); m_ItemData.SetItemSerial( rItemSlot1.GetWorldSerial() ); m_ItemData.SetItemNum((BYTE) byItemNum ); ITEMSTREAMEX ItemStreamEx; rItemSlot1.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); rItemSlot2.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx2( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); if( iLogType == ITEM_GET_BY_LOTTERY ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ", Lottery Serial = %I64u", rItemSlot2.GetWorldSerial() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); } m_LogMng.Serialize( m_ItemData ); } void GameLog::LogItemEx2( int iLogType, Player * pPlayer, const SCItemSlot & rItemSlot1, MONEY ullMoney, DURATYPE byItemNum, DBWLDSERIAL dwItem2WorldSerial, SLOTCODE Item2Code, DURATYPE Item2Num, const TCHAR * ptszToUserID, const TCHAR * ptszToCharName ) { if( !IsRun() || !pPlayer ) return; m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_ItemData.SetToAccountID( ptszToUserID, ID_MAX_LEN); m_ItemData.SetToCharName( ptszToCharName, MAX_CHARNAME_LENGTH); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } m_ItemData.SetMoney( ullMoney ); // ¾ÆÀÌÅÛ Á¤º¸ m_ItemData.SetItemCode( rItemSlot1.GetItemCode() ); m_ItemData.SetItemSerial( rItemSlot1.GetWorldSerial() ); m_ItemData.SetItemNum( (BYTE)byItemNum ); ITEMSTREAMEX ItemStreamEx; rItemSlot1.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); ItemStreamEx.Part.dwSerial = dwItem2WorldSerial; ItemStreamEx.Part.wCode = Item2Code; ItemStreamEx.Part.byDura = Item2Num; m_ItemData.SetItemStreamEx2( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); m_LogMng.Serialize( m_ItemData ); } void GameLog::LogCrystalizeSuccess( Player * pPlayer, const SCItemSlot & rItemSlot, DURATYPE byTotalCount, SLOTCODE * IN pObtainItemCode, DURATYPE * IN pObtainItemNum ) { if( !IsRun() || !pPlayer ) return; m_ItemData.Init(); m_ItemData.SetLogType( ITEM_CRYSTALIZE_SUCCESS ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // ¾ÆÀÌÅÛ Á¤º¸ m_ItemData.SetItemCode( rItemSlot.GetItemCode() ); m_ItemData.SetItemSerial( rItemSlot.GetWorldSerial() ); m_ItemData.SetItemNum( (BYTE)rItemSlot.GetNum() ); ITEMSTREAMEX ItemStreamEx; rItemSlot.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); for( BYTE i = 0 ; i < byTotalCount ; ++i ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Item:%u,Num:%u", pObtainItemCode[i], pObtainItemNum[i] ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); } m_LogMng.Serialize( m_ItemData ); } void GameLog::LogCompose( BOOL bSuccess, Player * pPlayer, SCItemSlot * pItemSlot1, DURATYPE byMatCount, sITEM_COMPOSE_LIST::sITEM_FOR_COMPOSE * pMaterials, MONEY ullMoney, DBWLDSERIAL *pSerial, DURATYPE ComposeNum ) { if( !IsRun() || !pPlayer ) return; int iLogType = ITEM_COMPOSE_SUCCESS; if( !bSuccess ) iLogType = ITEM_COMPOSE_FAILED; m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } if( pItemSlot1 ) { // ¾ÆÀÌÅÛ Á¤º¸ m_ItemData.SetItemCode( pItemSlot1->GetItemCode() ); m_ItemData.SetItemSerial( pItemSlot1->GetWorldSerial() ); #ifdef _NA_007257_20140527_GAMELOG_ITEM_COMPOSE_SUCCESS_COUNT // pItemSlot1->GetNum() Àº Àκ¥Å丮¿¡ ÀÖ´Â ÃÑ °³¼ö, ComposeNum¿¡ ¼º°øÇÑ °³¼ö¸¦ ³Ñ±âÀÚ m_ItemData.SetItemNum((BYTE)ComposeNum ); #else m_ItemData.SetItemNum( pItemSlot1->GetNum() ); #endif //_NA_007257_20140527_GAMELOG_ITEM_COMPOSE_SUCCESS_COUNT ITEMSTREAMEX ItemStreamEx; pItemSlot1->CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); } m_ItemData.SetMoney( ullMoney*ComposeNum ); // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); for( BYTE i = 0 ; i < byMatCount ; ++i ) { #ifdef _NA_0_20091020_COMPACT_COMPOSITION_LOG_ if (i > 0) { m_ItemData.AddAddInfo(","); } _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "%u:%u:%u", \ pMaterials[i].m_ItemCode, pMaterials[i].m_byItemNum*ComposeNum, pSerial[i]); #else _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Item:%u,Num:%u,Serial:%u", pMaterials[i].m_ItemCode, pMaterials[i].m_byItemNum*ComposeNum, pSerial[i] ); #endif m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); } #ifdef _NA_007257_20140527_GAMELOG_ITEM_COMPOSE_SUCCESS_COUNT if (byMatCount == 0) { _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "TotalItemNum: %d", pItemSlot1->GetNum()); } #endif //_NA_007257_20140527_GAMELOG_ITEM_COMPOSE_SUCCESS_COUNT m_LogMng.Serialize( m_ItemData ); } void GameLog::LogFillSocket( Player * pPlayer, const SCItemSlot & rSocketSlot, const SCItemSlot & rTargetSlot, BYTE bySocketLevel, int iAttrIndex, int iValue ) { if( !IsRun() || !pPlayer ) return; m_ItemData.Init(); m_ItemData.SetLogType( ITEM_SOCKETOPT_FILL ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // ¾ÆÀÌÅÛ Á¤º¸ m_ItemData.SetItemCode( rSocketSlot.GetItemCode() ); m_ItemData.SetItemSerial( rSocketSlot.GetWorldSerial() ); ITEMSTREAMEX ItemStreamEx; rSocketSlot.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); rTargetSlot.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx2( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",SockLV:%u,AttrIdx:%d,AttrVal:%u", bySocketLevel, iAttrIndex, iValue ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",SockLV:%u,AttrIdx:%d,AttVal:%u", bySocketLevel, iAttrIndex, iValue ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } void GameLog::LogItemExtrackSocket( Player * pPlayer, const SCItemSlot & rTargetSlot, WORD ItemCode, DURATYPE ItemNum ) { if( !IsRun() || !pPlayer ) return; m_ItemData.Init(); m_ItemData.SetLogType( ITEM_SOCKETOPT_EXTRACT ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // ¾ÆÀÌÅÛ Á¤º¸ m_ItemData.SetItemCode( rTargetSlot.GetItemCode() ); m_ItemData.SetItemSerial( rTargetSlot.GetWorldSerial() ); ITEMSTREAMEX ItemStreamEx; rTargetSlot.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",ItemCode:%u,Num:%u", ItemCode, ItemNum ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",ItemCd:%u,Num:%u", ItemCode, ItemNum ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } void GameLog::LogMonsterItemDrop( const SCItemSlot & rItemSlot, DWORD dwMonsterCode, DWORD dwMonsterLevel, WORD wMapCode, const WzVector& vecPos, KEYTYPE RoomKey ) { // ·Î±×¾ç ÁÙÀ̱â À§ÇØ ¸ó½ºÅÍ µå¶ø ¿ì¼± ·Î±× ¾È³²±è // 20060802 ¿ÀÈÄ 5:30:13 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! return; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #if SUN_CODE_BACKUP if( !IsRun() ) return; m_ItemData.Init(); m_ItemData.SetLogType( ITEM_MONSTER_DROP ); m_ItemData.SetMapCode( wMapCode ); m_ItemData.SetMapX( (SHORT)vecPos.x ); m_ItemData.SetMapY( (SHORT)vecPos.y ); m_ItemData.SetMapZ( (SHORT)vecPos.z ); m_ItemData.SetItemCode( rItemSlot.GetItemCode() ); ITEMSTREAMEX ItemStreamEx; rItemSlot.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Room:%u", RoomKey ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); #endif } void GameLog::LogUseStorageItem(int iLogType, Player* player, SLOTCODE item_code, uint item_count, uint date_time) { if( !IsRun() || !player ) return; m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( player->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( player->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( player->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = player->GetGameZonePtr(); if( pZone ) { WzVector vecPos; player->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Item:%u,Num:%u,Date:%u", item_code, item_count, date_time); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ItemData ); } void GameLog::LogMultiItem( int iLogType, Player * pPlayer, DURATYPE byCount, WORD * pItemCode IN, DURATYPE * pItemNum IN, DWORD * pDateTime IN ) { if( !IsRun() || !pPlayer ) return; m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); for( BYTE i = 0 ; i < byCount ; ++i ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Item:%u,Num:%u", pItemCode[i], pItemNum[i] ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); if( pDateTime ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Date:%u", pDateTime[i] ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); } } m_LogMng.Serialize( m_ItemData ); } void GameLog::LogShopItem( int iLogType, Player * pPlayer, DWORD dwPriceGuid, DWORD dwTransactionGuid, DWORD dwErrorCode ) { if( !IsRun() || !pPlayer ) return; m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",PriceGuid:%u,TransactionGuid:%u,ErrorCode:%u", dwPriceGuid, dwTransactionGuid, dwErrorCode ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",PrcGuid:%u,TrnGuid:%u,ErrCd:%u", dwPriceGuid, dwTransactionGuid, dwErrorCode ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } void GameLog::LogShop_RecvItem( int iLogType, Player * pPlayer, DWORD GiftGuid, DWORD dwResult ) { if( !IsRun() || !pPlayer ) return; m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // addinfo¿¡ ¹æÅ° // SetRoomKey( m_ItemData, pPlayer ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",GiftGuid:%u,Result:%u", GiftGuid, dwResult ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",PakageSequence:%u,Rt:%u", GiftGuid, dwResult ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } //_KR_0_20091021_FIRENDINVITATION_EXTEND void GameLog::LogItemInvitatedFriendReward( Player * pPlayer, BYTE ItemCount, SLOTCODE RewardItemCode, LEVELTYPE RewardLevel) { if( !IsRun() || !pPlayer ) return; int iLogType = ITEM_REWARD_EVENT; m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // addinfo¿¡ ¹æÅ° SetRoomKey( m_ItemData, pPlayer ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Item:%u,Num:%u,level:%u", RewardItemCode, ItemCount, RewardLevel ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } void GameLog::LogItemReward( BYTE byRewardType, Player * pPlayer, DURATYPE totalCount, WORD * IN pRewardItemCode, DURATYPE * IN pRewardItemNum, BYTE * IN pRewardItemEnchant, BYTE * IN pRewardItemSet, BYTE * IN pRewardItemRank, CODETYPE reward_code ) { if( !IsRun() || !pPlayer ) return; int iLogType = ITEM_MAX; switch( byRewardType ) { case RewardManager::eREWARD_QUEST: iLogType = ITEM_REWARD_QUEST; break; case RewardManager::eREWARD_AC: iLogType = ITEM_REWARD_AC; break; case RewardManager::eREWARD_MISSION: iLogType = ITEM_REWARD_MISSION; break; case RewardManager::eREWARD_EVENT: iLogType = ITEM_REWARD_EVENT; break; case RewardManager::eREWARD_COMPETITION: iLogType = ITEM_REWARD_COMPETITION; break; case RewardManager::eREWARD_MISSIONRANKING: iLogType = ITEM_REWARD_RANKING; break; #ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM case RewardManager::eREWARD_ATTENDANCE: iLogType = ITEM_REWARD_ATTENDANCE; break; #endif // _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM #ifdef _NA_008404_20150712_MINIGAME_SYSTEM case RewardManager::eREWARD_MINIGAME_BINGO: iLogType = ITEM_REWARD_MINIGAME_BINGO; break; #endif //_NA_008404_20150712_MINIGAME_SYSTEM } m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); m_ItemData.SetMapCode( (WORD)pZone->GetMapCode() ); m_ItemData.SetMapX( (short)vecPos.x ); m_ItemData.SetMapY( (short)vecPos.y ); m_ItemData.SetMapZ( (short)vecPos.z ); } // addinfo¿¡ ¹æÅ° SetRoomKey( m_ItemData, pPlayer ); //C_NA_0_20100520_ACSYSTEM_CHANGED if (RewardManager::eREWARD_AC == byRewardType) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Location:%u,Object:%u", m_ACInfoData.location, m_ACInfoData.index_number); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); } for( BYTE i = 0 ; i < totalCount ; ++i ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",RewardCode:%d,Item:%u,Num:%u,Encht:%u,Set:%u,Rank:%u", reward_code, pRewardItemCode[i], pRewardItemNum[i], pRewardItemEnchant[i], pRewardItemSet[i], pRewardItemRank[i] ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); } m_LogMng.Serialize( m_ItemData ); } // //////////////////////////////////////////////////////////////////////////// //// ¾ÆÀÌÅÛ ·Î±× //// 1. ¾ÆÀÌÅÛ µå·Ó ·Î±×(¹ö¸²°ú Á׾ ¶³±¸´Â°Í°ú ¸ó½ºÅÍ Á׿©¼­ ¶³±¸´Â °ÍÀÇ Â÷ÀÌ?) //// 1. ¾ÆÀÌÅÛ µå·Ó(¶¥¿¡ ¶³±À) °ú Áݱâ //void GameLog::WriteItemOwner( Player* pPlayer, BOOL bPickUp, const SCItemSlot & rItemSlot ) //{ // if( !IsRun() || !pPlayer ) return; // // m_ItemData.Init(); // // if( bPickUp == TRUE ) m_ItemData.SetBaseData( ITEM_PICK, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // else m_ItemData.SetBaseData( ITEM_DROP, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // // SetItemInfo( m_ItemData, rItemSlot ); // SetPlayerPosInfo( m_ItemData, pPlayer ); // // SetRoomKey( m_ItemData, pPlayer ); // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // // m_LogMng.Serialize( m_ItemData ); //} // //// 2. ÀÎþƮ ¼º°ø / ½ÇÆÐ //void GameLog::WriteEnchantResult( Player* pPlayer, BOOL bSuccess, const SCItemSlot & rItemSlot ) //{ // if( !IsRun() || !pPlayer ) return; // // m_ItemData.Init(); // // if( bSuccess == TRUE) m_ItemData.SetBaseData( ITEM_ENCHANTSUCCESS, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // else m_ItemData.SetBaseData( ITEM_ENCHANTFAIL, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // // SetItemInfo( m_ItemData, rItemSlot ); // SetPlayerPosInfo( m_ItemData, pPlayer ); // // SetRoomKey( m_ItemData, pPlayer ); // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // SetItemSlotPos( m_ItemData, rItemSlot ); // // // m_LogMng.Serialize( m_ItemData ); //} // //// 3. NPC¿ÍÀÇ °Å·¡ //void GameLog::WriteItemTradeWithNPC( Player* pPlayer, BOOL bSell, const SCItemSlot & rItemSlot ) //{ // if( !IsRun() || !pPlayer ) return; // // m_ItemData.Init(); // if( bSell == TRUE ) m_ItemData.SetBaseData( ITEM_SELLNPC, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // else m_ItemData.SetBaseData( ITEM_BUYNPC, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // // SetItemInfo( m_ItemData, rItemSlot ); // SetPlayerPosInfo( m_ItemData, pPlayer ); // // SetRoomKey( m_ItemData, pPlayer ); // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // SetBaseItemPriceInfo( m_ItemData, pPlayer, rItemSlot, bSell ); // // m_LogMng.Serialize( m_ItemData ); //} // ////°³Àΰŷ¡ //void GameLog::WriteItemTradeWithPlayer( Player* pPlayer1, BOOL bGive, const SCItemSlot & rItemSlot, Player* pPlayer2 ) //{ // if( !IsRun() || !pPlayer1 || !pPlayer2 ) return; // // m_ItemData.Init(); // if( bGive == TRUE ) m_ItemData.SetBaseData( ITEM_TRADE_GIVE, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // »ó´ë Ç÷¹À̾°Ô ÁÖ±â // else m_ItemData.SetBaseData( ITEM_TRADE_RECEIVE, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // »ó´ë¿¡°Ô¼­ ¹Þ±â // // SetItemInfo( m_ItemData, rItemSlot ); // SetOtherPlayerInfo( m_ItemData, pPlayer2 ); // SetPlayerPosInfo( m_ItemData, pPlayer1 ); // // SetRoomKey( m_ItemData, pPlayer1 ); // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // SetItemSlotPos( m_ItemData, rItemSlot ); // // m_LogMng.Serialize( m_ItemData ); //} // //// 5. µ· °³Àΰŷ¡ //void GameLog::WriteMoneyTradeWithPlayer( Player* pPlayer1, BOOL bGive, DWORD dwMoney, Player* pPlayer2 ) //{ // if( !IsRun() || !pPlayer1 || !pPlayer2 ) return; // // m_ItemData.Init(); // // //¾ÆÁ÷ µ· Áֱ⠹ޱ⠱¸ºÐÀÌ ¾È µÇ¾î ÀÖ´Ù. ÃßÈÄ °í·ÁÇØ¼­ ³ª´«´Ù. // if( bGive == TRUE ) m_ItemData.SetBaseData( ITEM_MONEY, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // »ó´ë Ç÷¹À̾°Ô ÁÖ±â // else m_ItemData.SetBaseData( ITEM_MONEY, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // »ó´ë Ç÷¹À̾°Ô ¹Þ±â // // SetOtherPlayerInfo( m_ItemData, pPlayer2 ); // SetPlayerPosInfo( m_ItemData, pPlayer1 ); // // SetRoomKey( m_ItemData, pPlayer1 ); // // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",%u,%I64u", dwMoney, pPlayer1->GetMoney() ); //< °Å·¡ÇÑ µ·, ¼ÒÁö ÇÏÀÓ°ª // m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; // m_ItemData.AddAddInfo( m_pTmpBuffer ); // // // m_LogMng.Serialize( m_ItemData ); //} // //// 6. °³ÀλóÁ¡ °Å·¡ //void GameLog::WriteItemVendorWithPlayer( Player* pPlayer1, BOOL bSell, const SCItemSlot & rItemSlot, DWORD dwMoney, Player* pPlayer2 ) //{ // if( !IsRun() || !pPlayer1 || !pPlayer2 ) return; // // m_ItemData.Init(); // if( bSell == TRUE ) m_ItemData.SetBaseData( ITEM_SELLPC, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // °³ÀλïÁ¤¿¡¼­ ¹°°Ç ÆÈ±â // else m_ItemData.SetBaseData( ITEM_BUYPC, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // °³ÀλóÁ¡¿¡¼­ ¹°°Ç »ç±â // // SetItemInfo( m_ItemData, rItemSlot ); // SetOtherPlayerInfo( m_ItemData, pPlayer2 ); // SetPlayerPosInfo( m_ItemData, pPlayer1 ); // // SetRoomKey( m_ItemData, pPlayer1 ); // // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // SetTradeItemPriceInfo( m_ItemData, rItemSlot, dwMoney, bSell ); // // // m_LogMng.Serialize( m_ItemData ); //} // //void GameLog::LogRankUp_Before( Player * pPlayer, const SCItemSlot & rItemSlot1, const SCItemSlot & rItemSlot2 ) //{ // if( !IsRun() || !pPlayer ) return; // // m_ItemData.Init(); // m_ItemData.SetBaseData( ITEM_RANKUP_BEFORE, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // // ITEMSTREAMEX ItemStreamEx; // rItemSlot1.CopyOut(ItemStreamEx); // m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx ); // // rItemSlot2.CopyOut(ItemStreamEx); // m_ItemData.SetItemStreamEx2( (const BYTE*)&ItemStreamEx ); // // m_LogMng.Serialize( m_ItemData ); //} //// 7. ¾ÆÀÌÅÛ ·©Å©¾÷ //void GameLog::WriteItemRankUpResult( Player* pPlayer, const SCItemSlot & rItemSlot, DWORD dwMoney ) //{ // if( !IsRun() || !pPlayer ) return; // // m_ItemData.Init(); // m_ItemData.SetBaseData( ITEM_RANKUPSUCCESS, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // SetItemInfo( m_ItemData, rItemSlot ); // // SetRoomKey( m_ItemData, pPlayer ); // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",%u", dwMoney ); //< »ç¿ë ÇÏÀÓ °ª // m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; // m_ItemData.AddAddInfo( m_pTmpBuffer ); // SetItemSlotPos( m_ItemData, rItemSlot ); //¾ÆÀÌÅÛ ½½·Ô À§Ä¡ // // m_LogMng.Serialize( m_ItemData ); //} // //// 8. â°í¿¡ ¸Â±â±â / ã±â //// dwMoney : â°í º¸°ü·á //void GameLog::WriteItemMoveInWareHouse( Player* pPlayer, BOOL bKeep, const SCItemSlot & rItemSlot ) //{ // if( !IsRun() || !pPlayer ) return; // // m_ItemData.Init(); // // if( bKeep == TRUE ) m_ItemData.SetBaseData( ITEM_PUTSTORAGE, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // â°í¿¡ º¸°ü // else m_ItemData.SetBaseData( ITEM_GETSTORAGE, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // â°í¿¡¼­ ²¨³»±â // SetItemInfo( m_ItemData, rItemSlot ); // SetPlayerPosInfo( m_ItemData, pPlayer ); // // SetRoomKey( m_ItemData, pPlayer ); // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // // if( bKeep == TRUE ) //º¸°ü // { // // } // else //< ãÀ»¶§ // { // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",%I64u", rItemSlot.GetPriceForBuy() ); //< ¾ÆÀÌÅÛ¸¦ »ì¶§ °¡°Ý. // m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; // m_ItemData.AddAddInfo( m_pTmpBuffer ); // } // // // // m_LogMng.Serialize( m_ItemData ); //} // void GameLog::LogEnchant( int iLogType, Player* pPlayer, const SCItemSlot & rItemSlot, MONEY ullMoney, STLX_VECTOR & vecMatInfo, BYTE byDownLV ) { if( !IsRun() || !pPlayer ) return; if( ITEM_ENCHANT_SUCCESS != iLogType && ITEM_ENCHANT_FAILED != iLogType && ITEM_ENCHANT_FAILED_DOWN != iLogType #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION && ITEM_ENCHANT_FAILED_DESTROY != iLogType && ITEM_ENCHANT_FAILED_PREVENT != iLogType #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION ) { return; } m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); // ¾ÆÀÌÅÛ Á¤º¸ m_ItemData.SetItemCode( rItemSlot.GetItemCode() ); m_ItemData.SetItemSerial( rItemSlot.GetWorldSerial() ); m_ItemData.SetItemNum( (BYTE)rItemSlot.GetNum() ); m_ItemData.SetMoney( ullMoney ); ITEMSTREAMEX ItemStreamEx; rItemSlot.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); //ÀÎþƮ Àç·á for( int i = 0 ; i < (int)vecMatInfo.size() ; ++i ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Item:%u,Num:%u", vecMatInfo[i].MaterialCode, vecMatInfo[i].MaterialNum ); //< ¾ÆÀÌÅÛ¸¦ »ì¶§ °¡°Ý. m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); } if( byDownLV ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "ItemDownLV:%d", byDownLV ); //< ¾ÆÀÌÅÛ´Ù¿î°ªÀÌ ÀÖÀ»½Ã Ãß°¡ÇØÁØ´Ù. m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); } m_LogMng.Serialize( m_ItemData ); } //// 9. ÀÎþƮ ½Ãµµ //void GameLog::WriteEnchantStart( Player* pPlayer, const SCItemSlot & rItemSlot, STLX_VECTOR vecMatInfo ) //{ // if( !IsRun() || !pPlayer ) return; // // m_ItemData.Init(); // m_ItemData.SetBaseData( ITEM_ENCHANTTRY, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // // SetItemInfo( m_ItemData, rItemSlot ); // SetPlayerPosInfo( m_ItemData, pPlayer ); // // SetRoomKey( m_ItemData, pPlayer ); // // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // SetItemPrice( m_ItemData, rItemSlot, FALSE ); //¾ÆÀÌÅÛ »ì¶§ °¡°Ý // SetItemSlotPos( m_ItemData, rItemSlot ); //¾ÆÀÌÅÛ½½·Ô À§Ä¡ // // //ÀÎþƮ Àç·á // for(int i = 0; i < (int)vecMatInfo.size(); i++) // { // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",%u,%u", vecMatInfo[i].MaterialCode, vecMatInfo[i].MaterialNum ); //< ¾ÆÀÌÅÛ¸¦ »ì¶§ °¡°Ý. // m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; // m_ItemData.AddAddInfo( m_pTmpBuffer ); // } // // // m_LogMng.Serialize( m_ItemData ); //} // //// 10. ¸ó½ºÅÍ ¾ÆÀÌÅÛ µå¶ø //void GameLog::WriteMonsterItemDrop( const SCItemSlot & rItemSlot, DWORD dwMonsterCode, DWORD dwMonsterLevel, int nMapCode, WzVector& vecPos, KEYTYPE RoomKey ) //{ // if( !IsRun() ) return; // // m_ItemData.Init(); // m_ItemData.SetLogType( ITEM_MONSTER_ITEMDROP ); // SetItemInfo( m_ItemData, rItemSlot ); // m_ItemData.SetMapCode( nMapCode ); // m_ItemData.SetMapX( (short)vecPos.x ); // m_ItemData.SetMapY( (short)vecPos.y ); // m_ItemData.SetMapZ( (short)vecPos.z ); // // //1. RoomKey // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",%u", RoomKey ); //< ¾ÆÀÌÅÛ¸¦ »ì¶§ °¡°Ý. // m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; // m_ItemData.AddAddInfo( m_pTmpBuffer ); // // //2. Item // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // // // m_LogMng.Serialize( m_ItemData ); //} // //// 11. ¾ÆÀÌÅÛ °³Àΰŷ¡ ¿äû / ½ÂÀÎ / ¿äû°ÅºÎ //// nType (0 : °Å·¡ ¿äû, 1 : ½ÂÀÎ, 2 : °ÅÀý) //void GameLog::WriteItemTradeStatus( Player * pPlayer1, Player * pPlayer2, int nType ) //{ // if( !IsRun() || !pPlayer1 || !pPlayer2 ) return; // // m_ItemData.Init(); // // switch( nType ) // ¾ÆÀÌÅÛ °Å·¡ ¿äû // { // case 0: // m_ItemData.SetBaseData( ITEM_REQUEST, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // break; // case 1: // ½ÂÀÎ // m_ItemData.SetBaseData( ITEM_ACCEPT, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // break; // case 2: // °ÅÀý // m_ItemData.SetBaseData( ITEM_REJECT, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // break; // default: // return; // } // // SetOtherPlayerInfo( m_ItemData, pPlayer2 ); // SetRoomKey( m_ItemData, pPlayer1 ); // // m_LogMng.Serialize( m_ItemData ); //} // //// 12. °³ÀλóÁ¡ °³¼³/Æó¼â //void GameLog::WriteItemVendorStatus( Player* pPlayer, BOOL bOpen ) //{ // if( !IsRun() || !pPlayer ) return; // // m_ItemData.Init(); // // if( bOpen == TRUE ) m_ItemData.SetBaseData( ITEM_NEWPC, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // else m_ItemData.SetBaseData( ITEM_DELPC, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // // SetPlayerPosInfo( m_ItemData, pPlayer ); // // SetRoomKey( m_ItemData, pPlayer ); // // m_LogMng.Serialize( m_ItemData ); //} // //// 13. °³ÀλóÁ¡ º¸±â //void GameLog::WriteViewItemVendor( Player* pPlayer1, Player* pPlayer2 ) //{ // if( !IsRun() || !pPlayer1 || !pPlayer2 ) return; // // m_ItemData.Init(); // // m_ItemData.SetBaseData( ITEM_WATCHPC, pPlayer1->GetUserID(), pPlayer1->GetCharName(), pPlayer1->GetUserIP() ); // SetOtherPlayerInfo( m_ItemData, pPlayer2 ); // // SetRoomKey( m_ItemData, pPlayer1); // // m_LogMng.Serialize( m_ItemData ); //} // // 14. â°í Á¤º¸ void GameLog::WriteWareHouseInfo( Player* pPlayer, BOOL bOpen ) { if( !IsRun() || !pPlayer ) return; m_WareHouseData.Init(); if( bOpen == TRUE ) { m_WareHouseData.SetLogType( SNAPSHOT_WAREHOUSE_OEPN ); m_WareHouseData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_WareHouseData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_WareHouseData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); } else { m_WareHouseData.SetLogType( SNAPSHOT_WAREHOUSE_CLOSE ); m_WareHouseData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_WareHouseData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_WareHouseData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); } // â°í ½ÃÀÛ »óÅ·Π¹Ù²Þ if( m_WareHouseData.GetWareHouseSize() >= MAX_WAREHOUSESTREAM_SIZE ) { CWarehouseSlotContainer * pContainer = pPlayer->GetWarehouseContainer(); if( !pContainer ) return; pContainer->SerializeItemInfo( m_WareHouseData.GetWareHousePtr(), m_WareHouseData.GetWareHouseSize(), SERIALIZE_LOAD ); m_WareHouseData.SetMoney( pContainer->GetCurMoney() ); m_LogMng.Serialize( m_WareHouseData ); } } // //// 15. °³ÀλóÁ¡ Á¤º¸(°¡°Ý¼³Á¤) //void GameLog::WriteVendorInfo( Player* pPlayer, const SCItemSlot & rItemSlot, DWORD dwMoney ) //{ // if( !IsRun() || !pPlayer ) return; // // m_ItemData.Init(); // // m_ItemData.SetBaseData( ITEM_SETPRICE_PC, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // SetItemInfo( m_ItemData, rItemSlot ); // SetPlayerPosInfo( m_ItemData, pPlayer ); // // SetRoomKey( m_ItemData, pPlayer ); // SetBaseItemAddInfo( m_ItemData, rItemSlot ); // SetTradeItemPriceInfo( m_ItemData, rItemSlot, dwMoney, FALSE ); // // m_LogMng.Serialize( m_ItemData ); //} // //// 16. ·©Å©¾÷ ½Ãµµ //void GameLog::WriteItemRankUpStart( Player* pPlayer, POSTYPE pos1, POSTYPE pos2 ) //{ // if( !IsRun() || !pPlayer ) return; // // SCSlotContainer* pInventory = (SCSlotContainer*)pPlayer->GetItemManager()->GetItemSlotContainer( SI_INVENTORY ); // if( !pInventory ) return; // // SCItemSlot& rTargetSlot1 = (SCItemSlot &)pInventory->GetSlot(pos1); // SCItemSlot& rTargetSlot2 = (SCItemSlot &)pInventory->GetSlot(pos2); // // m_ItemData.Init(); // m_ItemData.SetBaseData( ITEM_RANKUPTRY, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // // //1¹øÂ° »ç¿ëµÈ ¾ÆÀÌÅÛ // SetItemInfo( m_ItemData, rTargetSlot1 ); // // SetRoomKey( m_ItemData, pPlayer ); // SetBaseItemAddInfo( m_ItemData, rTargetSlot1 ); //1¹øÀç »ç¿ëµÈ ¾ÆÀÌÅÛ Ãß°¡Á¤º¸. // SetFullItemAddInfo( m_ItemData, rTargetSlot2 ); //2¹øÂ° »ç¿ëµÈ ¾ÆÀÌÅÛ. // // m_LogMng.Serialize( m_ItemData ); //} void GameLog::LogAction( int iLogType, Player * pPlayer, Player* pOtherPlayer, DWORD64 dwReservedData1, DWORD64 dwReservedData2 ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( iLogType ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_ActionData, pPlayer ); // SetRoomKey( m_ActionData, pPlayer ); if( 0 != dwReservedData1 ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",%I64u,%I64u", dwReservedData1, dwReservedData2 ); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } if( pOtherPlayer ) { SetBasePlayerAddInfo( m_ActionData, pOtherPlayer ); } if( iLogType == ACT_JOIN_MAP ) { GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { #ifdef _NA_007750_20141113_WZDAT_MODIFY_LOG _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Class:%u", (pPlayer->GetCharInfo() != NULL) ? pPlayer->GetCharInfo()->m_byClassCode : eCLASS_NONE); #else // _NA_007750_20141113_WZDAT_MODIFY_LOG _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "MapCode:%u", pZone->GetMapCode() ); #endif // _NA_007750_20141113_WZDAT_MODIFY_LOG m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } } else if( iLogType == ACT_QUEST_REWARD || iLogType == ACT_QUEST_ACCEPT ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "QuestCode:%u", dwReservedData1 ); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } else if (iLogType == ACT_DOMINATION_KILL || iLogType == ACT_DOMINATION_DIE) { if (pOtherPlayer) { GameZone* pZone = pPlayer->GetGameZonePtr(); const GUILDGUID guildGuid = pOtherPlayer->GetGuildGuid(); GameGuild* const pGuild = g_GameGuildManager.FindGuild(guildGuid); if (NULL != pZone) { const MAPCODE mapCode = pZone->GetMapCode(); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "MapCode:%u", mapCode); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } if (NULL != pGuild) { const TCHAR* guildName = pGuild->GetGuildName(); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, ", GuildName:%s", guildName); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } } } //_KR_0_20091021_FIRENDINVITATION_EXTEND else if(iLogType == ACT_FRIENDINVITATION_RECALL) { if( pOtherPlayer ) { GameZone *pZone = pOtherPlayer->GetGameZonePtr(); if( pZone ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ", Map:%u", pZone->GetMapCode()); m_ActionData.AddAddInfo(m_pTmpBuffer); } } } m_LogMng.Serialize( m_ActionData ); } void GameLog::LogSimpleAction( int iLogType, Player* pPlayer, const TCHAR* tszAddInfo ) { if( !IsRun() || !pPlayer ) { return; } m_ActionData.Init(); m_ActionData.SetLogType( iLogType ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_ActionData, pPlayer ); if (tszAddInfo != NULL) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "%s", tszAddInfo ); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } m_LogMng.Serialize( m_ActionData ); } void GameLog::LogAction_Ranking( int iLogType, Player * pPlayer, RANKINGNO MissionNo, BYTE Ranking, DWORD ClearTime, BYTE Error ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( iLogType ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_ActionData, pPlayer ); // SetRoomKey( m_ActionData, pPlayer ); /* _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",MissionNo:%u,Ranking:%u,Time:%u,Error:%u", MissionNo, Ranking, ClearTime, Error ); */ _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",MisnNo:%u,Rnkg:%u,Time:%u,Err:%u", MissionNo, Ranking, ClearTime, Error ); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } void GameLog::LogKillSpecialMonster( Player * pPlayer, MONSTERCODE MonCode, BYTE MonsterType ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( ACT_KILL_SPECIAL_MONSTER ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_ActionData, pPlayer ); // SetRoomKey( m_ActionData, pPlayer ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "MonCode:%u, MonType:%u", MonCode, MonsterType ); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } void GameLog::LogFatigue( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; // ÀÏÁ¤ ÁÖ±â·Î ·Î±×¸¦ ³²±â±â À§ÇØ m_ActionData.Init(); SetPlayerPosInfo( m_ActionData, pPlayer ); m_ActionData.SetLogType( ACT_FATIGUE_PLAY_TIME ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Time:%d", pPlayer->GetFatigueManager()->GetPlayTime() ); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } void GameLog:: LogRankingPoint( Player *pPlayer, DWORD GetPoint, DWORD SumPoint ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); SetPlayerPosInfo( m_ActionData, pPlayer ); m_ActionData.SetLogType( ACT__RANKING_POINT ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Get:%u, Sum:%u", GetPoint, SumPoint ); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } //Áö¿ª Á¡·ÉÀü °ü·Ã ¾ÆÀÌÅÛ »ç¿ë½Ã ·Î±× void GameLog::LogDomination(int log_type, Player * player, SLOTCODE item_code, BYTE item_num, MAPCODE map_code) { if (!IsRun() || !player) { return; } assert(log_type >= ITEM_MONSTER_DROP || log_type < ITEM_MAX ); m_ItemData.Init(); m_ItemData.SetLogType(log_type); m_ItemData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ItemData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ItemData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); GameZone *pZone = player->GetGameZonePtr(); if (pZone) { WzVector vecPos; player->GetPos(&vecPos); m_ItemData.SetMapCode((WORD)pZone->GetMapCode()); m_ItemData.SetMapX((short)vecPos.x); m_ItemData.SetMapY((short)vecPos.y); m_ItemData.SetMapZ((short)vecPos.z); } m_ItemData.SetItemCode(item_code); m_ItemData.SetItemNum(item_num); if (log_type == ITEM_DOMINATION_AUCTION_APPLY || log_type == ITEM_DOMINATION_AUCTION_DUP_APPLY) { GameGuild* guild = g_GameGuildManager.FindGuild(player->GetGuildGuid()); if (guild == NULL) { return; } _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "Domination Map:%d, Guild Name:%s", map_code, guild->GetGuildName()); m_pTmpBuffer[_countof(m_pTmpBuffer) - 1] = '\0'; m_ItemData.AddAddInfo(m_pTmpBuffer); } //_NA_20110216_INCREASE_DOMINATION_DEFFENSEWALL_POINT else if (log_type == ACT_DOMINATION_ADD_DEFFENSEWALL_POINT) { GameGuild* guild = g_GameGuildManager.FindGuild(player->GetGuildGuid()); if(guild == NULL) { return; } _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "Domination Map:%d, Guild Name : %s", map_code, guild->GetGuildName()); m_pTmpBuffer[_countof(m_pTmpBuffer) - 1] = '\0'; m_ItemData.AddAddInfo(m_pTmpBuffer); } m_LogMng.Serialize(m_ItemData); } void GameLog::LogDomination(int iLogType, MAPCODE map_code) { if (FALSE == IsRun()) { return; } GameDominationManager* const domination_manager = GameDominationManager::Instance(); m_ActionData.Init(); m_ActionData.SetLogType(iLogType); const DOMINATION_INFO* domination_info = domination_manager->GetDominationInfo(map_code); if (NULL == domination_info) { return; } TCHAR* guildName = NULL; if (iLogType == ACT_DOMINATION_SUCCESS_DEFENCE) { const TCHAR* guildName = domination_info->m_inGuildInfo.m_tszGuildName; _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "MapCode:%u, GuildName:%s", map_code, guildName); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } else if (iLogType == ACT_DOMINATION_SUCCESS_OFFENCE) { const TCHAR* guildName = domination_info->m_disGuildInfo.m_tszGuildName; _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "MapCode:%u, GuildName:%s", map_code, guildName); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } else if (iLogType == ACT_DOMINATION_REWORD_EVENT_START) { const TCHAR* guild_name = (domination_info->m_inGuildInfo.m_tszGuildName[0] != '\0') ? domination_info->m_inGuildInfo.m_tszGuildName : _T("NULL"); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, _T("MapCode:%u, GuildName:%s"), map_code, guild_name); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } else if (iLogType == ACT_DOMINATION_SET_ATTACK_GUILD) { const TCHAR* guild_name = (domination_info->m_disGuildInfo.m_tszGuildName[0] != '\0') ? domination_info->m_disGuildInfo.m_tszGuildName : _T("NULL"); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, _T("Map_code:%u, AttackGuildName:%s"), domination_info->m_FieldCode, guild_name); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } m_LogMng.Serialize( m_ActionData ); } void GameLog::LogDomination(int iLogType, Player* pPlayer, NPC* pNpc, BYTE gate1, BYTE gate2, BYTE gate3) { if (FALSE == IsRun() || NULL == pPlayer) return; m_ActionData.Init(); m_ActionData.SetLogType(iLogType); m_ActionData.SetAccountID(pPlayer->GetUserID(), ID_MAX_LEN); m_ActionData.SetCharName(pPlayer->GetCharName(), MAX_CHARNAME_LENGTH); m_ActionData.SetUserIP(pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE); SetPlayerPosInfo( m_ActionData, pPlayer ); MAPCODE mapCode = 0; const GameZone* pZone = pPlayer->GetGameZonePtr(); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "."); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); const GUILDGUID guildGuid = pPlayer->GetGuildGuid(); GameGuild* const pGuild = g_GameGuildManager.FindGuild(guildGuid); if (NULL != pGuild) { const TCHAR* guildName = pGuild->GetGuildName(); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, ", GuildName:%s", guildName); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } if (NULL != pNpc) { GameZone* pZone = pNpc->GetGameZonePtr(); if (NULL != pZone) { WzVector vecPos; pNpc->GetPos(&vecPos); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, ", X:%0.3f,Y:%0.3f,Z:%0.3f", vecPos.x, vecPos.y, vecPos.z); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } } switch(iLogType) { case ACT_DOMINATION_DESTROY_OBJECT: if (NULL != pNpc) { const TCHAR* charName = pNpc->GetCharName(); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, ", ObjectName:%s", charName); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } break; case ACT_DOMINATION_SET_GATE: _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, ", L:%u,C:%u,R:%u", gate1,gate2,gate3); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); break; } m_LogMng.Serialize( m_ActionData ); } #ifdef _NA_1419_20100121_ACCUMULATE_POINT void GameLog::LogAccumulatePoint( int iLogType, Player* pPlayer, WORD IncreasePoint, SLOTCODE RewardItemCode ) { if( !IsRun() || !pPlayer ) return; BASE_PLAYERINFO* pInfo = pPlayer->GetCharInfo(); ASSERT(pInfo); if ( !pInfo ) return; WORD PreviousPoint = pInfo->m_wAccumulatePoint; switch(iLogType) { case ACCUM_ACQUISITION_TIME: case ACCUM_ACQUISITION_QUEST: PreviousPoint = max((pInfo->m_wAccumulatePoint - IncreasePoint), 0); break; case ACCUM_CONSUMPTION_ROULETTE: PreviousPoint = min((pInfo->m_wAccumulatePoint + IncreasePoint), 65000); break; } m_AccumulatePointData.Init(); m_AccumulatePointData.SetLogType( iLogType ); m_AccumulatePointData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AccumulatePointData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AccumulatePointData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_AccumulatePointData.SetAccumulateYear(pInfo->m_wAccumulateYear); m_AccumulatePointData.SetAccumulateTime(pInfo->m_dwAccumulateTime); m_AccumulatePointData.SetOldAccumulatePoint(PreviousPoint); m_AccumulatePointData.SetNewAccumulatePoint(pInfo->m_wAccumulatePoint); m_AccumulatePointData.SetRewardItemCode(RewardItemCode); m_LogMng.Serialize( m_AccumulatePointData ); } void GameLog::LogAccumulatePoint_GM( int iLogType, Player* pPlayer, WORD IncreasePoint, SLOTCODE RewardItemCode ) { if( !IsRun() || !pPlayer ) return; BASE_PLAYERINFO* pInfo = pPlayer->GetCharInfo(); ASSERT(pInfo); if ( !pInfo ) return; WORD PreviousPoint = pInfo->m_wAccumulatePoint; switch(iLogType) { case GM_ACQUISITION_ACCMULATE_POINT_BY_QUEST: case GM_ACQUISITION_ACCMULATE_POINT: PreviousPoint = max((pInfo->m_wAccumulatePoint - IncreasePoint), 0); break; case GM_CONSUMPTION_ACCMULATE_POINT: PreviousPoint = min((pInfo->m_wAccumulatePoint + IncreasePoint), 65000); break; } m_AdminData.Init(); m_AdminData.SetLogType( iLogType ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Year:%u,Time:%u,PreviousPoint:%u,CurrentPoint:%u,RewardItem:%u", pInfo->m_wAccumulateYear, pInfo->m_dwAccumulateTime, PreviousPoint, pInfo->m_wAccumulatePoint, RewardItemCode ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_AdminData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_AdminData ); } #endif ////////////////////////////////////////////////////////////////////////// // À¯Àú¾×¼Ç ·Î±× //1. ºÎȰ ·Î±× void GameLog::WritePlayerResurrection( Player* pPlayer, Player *pHealer ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( ACT_REBIRTH_CHAR ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_ActionData, pPlayer ); // SetRoomKey( m_ActionData, pPlayer ); // ºÎȰ½ÃÄÑÁØ »ç¶÷ÀÇ Á¤º¸ if( pHealer ) { SetBasePlayerAddInfo( m_ActionData, pHealer ); } m_LogMng.Serialize( m_ActionData ); } //ij¸¯ÅÍ »ç¸Á void GameLog::WritePlayerDead( Player* pPlayer, MAPCODE Mapcode ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( ACT_DEAD_CHAR ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_ActionData, pPlayer ); // SetRoomKey( m_ActionData, pPlayer ); if( Mapcode ) { #ifdef _NA_007750_20141113_WZDAT_MODIFY_LOG _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE,_T("MCode:%u,Class:%u"), Mapcode, (pPlayer->GetCharInfo() != NULL) ? pPlayer->GetCharInfo()->m_byClassCode : eCLASS_NONE); #else // _NA_007750_20141113_WZDAT_MODIFY_LOG _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "MCode:%u", Mapcode ); #endif // _NA_007750_20141113_WZDAT_MODIFY_LOG m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); // CHANGES: f110602.3L, fixed the invalid data setting. } m_LogMng.Serialize( m_ActionData ); } //½ºÅÝ»ç¿ë void GameLog::WriteUseStat( Player* pPlayer, BYTE byStatType ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( ACT_USE_STAT ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "StatPt:%u,StatType:%u", pPlayer->GetRemainStatPoint(), byStatType ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ActionData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ActionData ); } //½ºÅÝ °¨¼Ò void GameLog::WriteDecreaseStat( Player* pPlayer, BYTE byStatType, SHORT Decrease ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( ACT_DECREASE_STAT ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); /* _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "RemainStatPt:%u,StatType:%u,Decrease:%u", pPlayer->GetRemainStatPoint(), byStatType, Decrease ); */ _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "RmnStatPt:%u,StatType:%u,Dec:%u", pPlayer->GetRemainStatPoint(), byStatType, Decrease ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ActionData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ActionData ); } //½ºÅÝ ÃʱâÈ­ void GameLog::WriteInitStatAll( Player* pPlayer, eLOG_ACTION eLogAction ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( eLogAction ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "RemainStatPt:%u", pPlayer->GetRemainStatPoint() ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "RmnStatPt:%u", pPlayer->GetRemainStatPoint() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ActionData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ActionData ); } // 7. ½ºÅ³·¹º§¾÷ void GameLog::WriteSkillLevelUp( Player* pPlayer, SLOTCODE SkillCode, BOOL bLevelUp ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); //·¹º§¾÷ÀÌ ¾Æ´Ï¸é, óÀ½ ½ºÅ³À» ¹è¿ì´Â °Å´Ù. if( bLevelUp == FALSE ) { m_ActionData.SetLogType( ACT_ACQUIRE_SKILL ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); } else { m_ActionData.SetLogType( ACT_SKILLLV_UP ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); } ROOT_SKILLINFO *pRootInfo = SkillInfoParser::Instance()->GetInfo( SkillCode ); if( !pRootInfo ) return; if( pRootInfo->IsSkill() ) { SkillScriptInfo *pBaseSkillInfo = (SkillScriptInfo*)pRootInfo; /* _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "SkillPt:%d,Skill:%u,ReqSKillPt:%u", pPlayer->GetRemainSkillPoint(), SkillCode, pBaseSkillInfo->m_byRequireSkillPoint ); */ _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "SklPt:%d,Skill:%u,ReqSklPt:%u", pPlayer->GetRemainSkillPoint(), SkillCode, pBaseSkillInfo->m_byRequireSkillPoint ); } else { BASE_STYLEINFO *pBaseStyleInfo = (BASE_STYLEINFO*)pRootInfo; /* _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "SkillPt:%d,Skill:%u,ReqSKillPt:%u", pPlayer->GetRemainSkillPoint(), SkillCode, pBaseStyleInfo->m_byRequireSkillPoint ); */ _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "SklPt:%d,Skill:%u,ReqSklPt:%u", pPlayer->GetRemainSkillPoint(), SkillCode, pBaseStyleInfo->m_byRequireSkillPoint ); } m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ActionData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ActionData ); } //8. PVP »ó´ë¹æ Á×ÀÌ±â ·Î±× void GameLog::WritePVPKillUser( Player* pPlayer, Player* pOtherPlayer, BOOL bKill ) { if( !IsRun() || !pPlayer || !pOtherPlayer ) return; m_ActionData.Init(); if( bKill == TRUE ) { m_ActionData.SetLogType( ACT_PVPKILL ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); } else { m_ActionData.SetLogType( ACT_PVPDIE ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); } SetRoomKey( m_ActionData, pPlayer ); SetBasePlayerAddInfo( m_ActionData, pOtherPlayer ); m_LogMng.Serialize( m_ActionData ); } //9. PVP ½ÃÀÛ void GameLog::WritePVPStart( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( ACT_PVP_START ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetRoomKey( m_ActionData, pPlayer ); m_LogMng.Serialize( m_ActionData ); } //½ºÅ³ ·¹º§ ´Ù¿î void GameLog::WriteSkillLevelDown( Player* pPlayer, SLOTCODE SkillCode, BOOL bLevelDown ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); //·¹º§´Ù¿îÀÌ ¾Æ´Ï¸é, ½ºÅ³À» Àش°ŴÙ. if( bLevelDown == FALSE ) { m_ActionData.SetLogType( ACT_SKILL_UNLEARN ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); } else { m_ActionData.SetLogType( ACT_SKILLLV_DOWN ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); } ROOT_SKILLINFO *pRootInfo = SkillInfoParser::Instance()->GetInfo( SkillCode ); if( !pRootInfo ) return; if( pRootInfo->IsSkill() ) { SkillScriptInfo *pBaseSkillInfo = (SkillScriptInfo*)pRootInfo; /* _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "SkillPt:%d,Skill:%u,ReqSKillPt:%u", pPlayer->GetRemainSkillPoint(), SkillCode, pBaseSkillInfo->m_byRequireSkillPoint ); */ _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "SklPt:%d,Skill:%u,ReqSklPt:%u", pPlayer->GetRemainSkillPoint(), SkillCode, pBaseSkillInfo->m_byRequireSkillPoint ); } else { BASE_STYLEINFO *pBaseStyleInfo = (BASE_STYLEINFO*)pRootInfo; /* _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "SkillPt:%d,Skill:%u,ReqSKillPt:%u", pPlayer->GetRemainSkillPoint(), SkillCode, pBaseStyleInfo->m_byRequireSkillPoint ); */ _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "SklPt:%d,Skill:%u,ReqSklPt:%u", pPlayer->GetRemainSkillPoint(), SkillCode, pBaseStyleInfo->m_byRequireSkillPoint ); } m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ActionData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ActionData ); } //üÀÎÁö¾÷ void GameLog::CharacterChangeUpLog( Player* pPlayer, BYTE byClassType, BYTE byChangeUpCode ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( ACT_CHARACTER_CHANGE_UP ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_ActionData, pPlayer ); m_LogMng.Serialize( m_ActionData ); } // 4. ij¸¯ÅÍ Á¢¼Ó void GameLog::WriteCharConnect( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_SessionData.Init(); m_SessionData.SetLogType( SESSION_CHAR_CONNECT ); m_SessionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_SessionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_SessionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_LogMng.Serialize( m_SessionData ); } // ////·Î±×ÀÎ/¾Æ¿ô½Ã Àκ¥Å丮 Á¤º¸(½º³À¼¦ ·Î±×·Î ´ëü) //void GameLog::LogInvenInfo( int iLogType, Player * pPlayer ) //{ // if( !IsRun() || !pPlayer ) return; // // m_InventoryData.Init(); // // // m_InventoryData.SetBaseData( iLogType, pPlayer->GetUserID(), pPlayer->GetCharName(), pPlayer->GetUserIP() ); // // m_InventoryData.SetMoney( pPlayer->GetMoney() ); // // /************************************************************************/ // /* Àκ¥Å丮 */ // /************************************************************************/ // // Àκ¥Å丮 Á¤º¸ // //Inventory // if( m_InventoryData.GetInventorySize() == MAX_INVENTORYITEMSTREAM_SIZE ) // { // ITEMSTREAMEX* pItemStrem = (ITEMSTREAMEX*)m_InventoryData.GetInventoryPtr(); // // SCItemSlotContainer* pItemContainer = (SCItemSlotContainer*)pPlayer->GetItemManager()->GetItemSlotContainer( SI_INVENTORY ); // if( !pItemContainer ) return; // // pItemContainer->SerializeItemStreamAll( pItemStrem, MAX_INVENTORYITEM_SIZE, SERIALIZE_LOAD ); // } // // if( m_InventoryData.GetTempInventorySize() == MAX_TEMPINVENTORYITEMSTREAM_SIZE ) // { // // ÅÛÇÁÀκ¥Å丮 // ITEMSTREAMEX* pTempItemStrem = (ITEMSTREAMEX*)m_InventoryData.GetTempInventoryPtr(); // // SCItemSlotContainer* pTempItemContainer = (SCItemSlotContainer*)pPlayer->GetItemManager()->GetItemSlotContainer( SI_TEMPINVENTORY ); // if( !pTempItemContainer ) return; // // pTempItemContainer->SerializeItemStreamAll( pTempItemStrem, MAX_TEMPINVENTORYITEM_SIZE, SERIALIZE_LOAD ); // } // // // m_LogMng.Serialize( m_InventoryData ); //} // ½º³À¼¦ ·Î±× void GameLog::LogSnapShot( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; // ÀÏÁ¤ ÁÖ±â·Î ·Î±×¸¦ ³²±â±â À§ÇØ pPlayer->GetSnapShotLogTimer().Reset( SNAPSHOT_LOG_CYCLE ); m_SnapShotData.Init(); // ±âº»Á¤º¸ m_SnapShotData.SetLogType( SNAPSHOT_REGULAR ); m_SnapShotData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_SnapShotData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_SnapShotData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); int nSize = 0; /************************************************************************/ /* ij¸¯ÅÍ Á¤º¸ */ /************************************************************************/ BASE_PLAYERINFO* pCharInfo = NULL; pCharInfo = pPlayer->GetCharInfo(); nSize = sizeof(BASE_PLAYERINFO); //ASSERT( nSize <= MAX_CHAR_STAT_SIZE ); // if( nSize <= MAX_CHAR_STAT_SIZE ) m_SnapShotData.SetCharStat( (BYTE*)pCharInfo, pCharInfo->GetLogSize() ); /************************************************************************/ /* ¹Ì¼ÇÁ¤º¸ */ /************************************************************************/ if( m_SnapShotData.GetMissionSize() == MAX_MISSIONSTREAM_SIZE ) { pPlayer->GetMissionManager()->SerializeStream( m_SnapShotData.GetMissionPtr(), m_SnapShotData.GetMissionSize(), SERIALIZE_LOAD ); } else { ASSERT(FALSE); } //#ifdef _DEV_TAIYO_ADD_SNAPSHOT_AC /************************************************************************/ /* Äù½ºÆ® */ /************************************************************************/ // Äù½ºÆ®´Â ÃßÈÄ Ãß°¡.. if( m_SnapShotData.GetProgrQuestSize() == MAX_PROGR_QUESTSTREAM_SIZE ) { pPlayer->GetQuestManager()->SerializeProgrStream( m_SnapShotData.GetProgrQuestPtr(), m_SnapShotData.GetProgrQuestSize(), QSERIALIZE_LOAD ); } else { ASSERT(FALSE); } if( m_SnapShotData.GetComplQuestSize() == MAX_COMPL_QUESTSTREAM_SIZE ) { pPlayer->GetQuestManager()->SerializeComplStream( m_SnapShotData.GetComplQuestPtr(), m_SnapShotData.GetComplQuestSize(), QSERIALIZE_LOAD ); } else { ASSERT(FALSE); } /************************************************************************/ /* AC½ºÆ®¸² */ /************************************************************************/ if( m_SnapShotData.GetACSize() == MAX_ACSTREAM_SIZE ) { //C_NA_0_20100520_ACSYSTEM_CHANGED //»õ·Î¿î ¾÷Àû¿¡´Â ½º³Ü¼¦¿¡¼­ AC Á¤º¸¸¦ »«´Ù. (¿ë·®ÀÌ ³Ê¹« Ä¿¼­) //pPlayer->GetACManager()->Serialize( m_SnapShotData.GetACPtr(), SERIALIZE_LOAD ); } else { ASSERT(FALSE); } //#endif /************************************************************************/ /* Àåºñ */ /************************************************************************/ //Inventory if( m_SnapShotData.GetEquipItemSize() >= MAX_EQUIPITEMSTREAM_SIZE ) { ITEMSTREAMEX* pEquipItemStrem = (ITEMSTREAMEX*)m_SnapShotData.GetEquipItemPtr(); SCItemSlotContainer* pEquipContainer = (SCItemSlotContainer*)pPlayer->GetItemManager()->GetItemSlotContainer( SI_EQUIPMENT ); if( !pEquipItemStrem ) return; pEquipContainer->SerializeItemStreamAll( pEquipItemStrem, m_SnapShotData.GetEquipItemSize(), SERIALIZE_LOAD ); } else { ASSERT(FALSE); } /************************************************************************/ /* ½ºÅ³ */ /************************************************************************/ if( m_SnapShotData.GetSkillSize() == MAX_SKILLSTREAM_SIZE ) { SKILLSTREAM* pSkillStrem = (SKILLSTREAM*)m_SnapShotData.GetSkillPtr(); SCSkillSlotContainer* pSkillContainer = (SCSkillSlotContainer*)pPlayer->GetSkillSlotManager()->GetSkillSlotContainer(); if( !pSkillContainer ) return; pSkillContainer->SerializeSkillStreamAll( pSkillStrem, m_SnapShotData.GetSkillSize(), SERIALIZE_LOAD ); } else { ASSERT(FALSE); } /************************************************************************/ /* Àκ¥Å丮 */ /************************************************************************/ // Àκ¥Å丮 Á¤º¸ //Inventory if( m_SnapShotData.GetInventorySize() >= MAX_INVENTORYITEMSTREAM_SIZE ) { ITEMSTREAMEX * pItemStrem = (ITEMSTREAMEX*)m_SnapShotData.GetInventoryPtr(); SCItemSlotContainer* pItemContainer = (SCItemSlotContainer*)pPlayer->GetItemManager()->GetItemSlotContainer( SI_INVENTORY ); if( !pItemContainer ) return; int Size = m_SnapShotData.GetInventorySize(); pItemContainer->SerializeItemStreamAll( pItemStrem, m_SnapShotData.GetInventorySize(), SERIALIZE_LOAD ); } else { ASSERT(FALSE); } if( m_SnapShotData.GetTempInventorySize() >= MAX_TEMPINVENTORYITEMSTREAM_SIZE ) { // ÅÛÇÁÀκ¥Å丮 ITEMSTREAMEX* pTempItemStrem = (ITEMSTREAMEX*)m_SnapShotData.GetTempInventoryPtr(); SCItemSlotContainer* pTempItemContainer = (SCItemSlotContainer*)pPlayer->GetItemManager()->GetItemSlotContainer( SI_TEMPINVENTORY ); //youngmoon ÅÛÇÁÀκ¥Å丮°¡ ¾ø¾îÁ³À¸¹Ç·Î NULL À̾ ½º³Ü¼¦Àº Âï¾î¾ß ÇÑ´Ù. if( pTempItemContainer ) { pTempItemContainer->SerializeItemStreamAll( pTempItemStrem, m_SnapShotData.GetTempInventorySize(), SERIALIZE_LOAD ); } } else { ASSERT(FALSE); } m_LogMng.Serialize( m_SnapShotData ); } // Á¤±âÀûÀ¸·Î °ÔÀÓ ·Î±×¸¦ ³²±ä´Ù. // ¿©±â¼­ ½ÇÇàµÇÁö ¾ÊÀ¸¸é, ·Î±×µ¥ÀÌÅ͸¦ ÀÌ Å¬·¡½º·Î ³Ñ°Üµµ, ±â·ÏµÇÁö ¾Ê´Â´Ù. void GameLog::StartRegularLog( int nLogType ) { if( nLogType == REGULAR_SKILL ) //½ºÅ³·Î±×¸¦ ½ÃÀÛ½ÃŲ´Ù¸é.. { // ¿©±â¼­ ¾²·¹µå¸¦ ½ÇÇà½Ã۰í, // ¾²·¹µå ³»¿¡¼­ Timer¸¦ ½ÇÇà½ÃŲ´Ù. /*unsigned int nThreadID = 1; HANDLE hSkillThread = (HANDLE)_beginthreadex( NULL, 0, SkillWorkThread, NULL, 0, &nThreadID );*/ } } /* //¾ÆÀÌÅÛ ±âº»Á¤º¸¸¦ ¾ò´Â´Ù. VOID GameLog::SetItemInfo( ItemData & rData, const SCItemSlot & rItemSlot ) { rData.SetItemCode( rItemSlot.GetItemCode() ); rData.SetItemSerial( rItemSlot.GetSerial() ); rData.SetItemNum( rItemSlot.GetNum() ); } */ //Ç÷¹À̾îÀÇ À§Ä¡Á¤º¸(¸ÊÄÚµå, À§Ä¡)¸¦ ¾ò´Â´Ù. VOID GameLog::SetPlayerPosInfo( ItemData & rData, Player* pPlayer) { GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); rData.SetMapCode( (WORD)pZone->GetMapCode() ); rData.SetMapX( (short)vecPos.x ); rData.SetMapY( (short)vecPos.y ); rData.SetMapZ( (short)vecPos.z ); } } //Ç÷¹À̾îÀÇ À§Ä¡Á¤º¸(¸ÊÄÚµå, À§Ä¡)¸¦ ÀúÀåÇÑ´Ù. VOID GameLog::SetPlayerPosInfo( ActionData & rData, Player* pPlayer ) { GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); rData.SetMapCode( pZone->GetMapCode() ); rData.SetMapX( (short)vecPos.x ); rData.SetMapY( (short)vecPos.y ); rData.SetMapZ( (short)vecPos.z ); } } //Ç÷¹À̾îÀÇ À§Ä¡Á¤º¸(¸ÊÄÚµå, À§Ä¡)¸¦ ÀúÀåÇÑ´Ù. VOID GameLog::SetPlayerPosInfo( AdminData & rData, Player * pPlayer ) { GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); rData.SetMapCode( pZone->GetMapCode() ); rData.SetMapX( (short)vecPos.x ); rData.SetMapY( (short)vecPos.y ); rData.SetMapZ( (short)vecPos.z ); } } //Ç÷¹À̾îÀÇ À§Ä¡Á¤º¸¸¦ AddInfo¿¡ ÀúÀåÇÑ´Ù. VOID GameLog::SetPlayerPosAddInfo( BaseLogData & rLogData, Player* pPlayer ) { GameZone * pZone = pPlayer->GetGameZonePtr(); if( pZone ) { WzVector vecPos; pPlayer->GetPos( &vecPos ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Map:%u,X:%0.2f,Y:%0.2f", pZone->GetMapCode(), vecPos.x, vecPos.y ); } else { m_pTmpBuffer[0]=','; m_pTmpBuffer[1]='\0'; } m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } /* //pPlayer : »ó´ë¹æ Ç÷¹À̾î Á¤º¸ void GameLog::SetOtherPlayerInfo( ItemData & rData, Player* pPlayer ) { rData.SetToAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); rData.SetToCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); } */ VOID GameLog::SetRoomKey( BaseLogData & rLogData, Player* pPlayer ) { //¹æ¹øÈ£ GameZone * pGameZone = pPlayer->GetGameZonePtr(); if( pGameZone ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",MapCode:%d,Room:%u", pGameZone->GetMapCode(), pGameZone->GetKey() ); } else { m_pTmpBuffer[0] = ','; m_pTmpBuffer[1] = '\0'; } m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } /* VOID GameLog::SetBaseItemPriceInfo( BaseLogData & rLogData, Player * pPlayer, const SCItemSlot & rItemSlot, BOOL bSell ) { DWORD dwPrice = 0; if( bSell ) dwPrice = (DWORD)rItemSlot.GetPriceForSell(); else dwPrice = (DWORD)rItemSlot.GetPriceForBuy(); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Price:%u,Money:%I64u", dwPrice, pPlayer->GetMoney() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } //°³Àΰŷ¡ ¾ÆÀÌÅÛÀÇ °¡°ÝÁ¤º¸ VOID GameLog::SetTradeItemPriceInfo( BaseLogData & rLogData, const SCItemSlot & rItemSlot, DWORD dwPrice, BOOL bSell ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Price:%u", dwPrice ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } VOID GameLog::SetItemSlotPos( BaseLogData & rLogData, const SCItemSlot & rItemSlot ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Pos:%u", rItemSlot.GetPos() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } VOID GameLog::SetFullItemAddInfo( BaseLogData & rLogData, const SCItemSlot & rItemSlot ) // ¾ÆÀÌÅÛÀÇ ¸ðµç Á¤º¸¸¦ AddInfo¿¡ ³Ö´Â´Ù. { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Code:%u,Serial:%u,Num:%u", rItemSlot.GetItemCode(), rItemSlot.GetSerial(), rItemSlot.GetNum() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); SetBaseItemAddInfo( rLogData, rItemSlot ); } VOID GameLog::SetBaseItemAddInfo( BaseLogData & rLogData, const SCItemSlot & rItemSlot ) { eRANK rank = rItemSlot.GetRank(); if( rank > RANK_E ) { // ÇöÀç·©Å©,·©Å©¿É¼ÇÀ妽º,·©Å©¿É¼Ç°ª _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Rank:%u,AttrIdx:%u,AttrValue:%u", rank, rItemSlot.GetRankAttrIndex(rank), rItemSlot.GetRankAttrValue(rank) ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } else { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Rank:%u,,", rank ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } if(rItemSlot.WithDura()) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Dura:%u", (BYTE)rItemSlot.GetDura() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } else { m_pTmpBuffer[0]=','; m_pTmpBuffer[1]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",SockNum:%u", rItemSlot.GetSocketNum() ); //¼ÒÄÏÀÇ °³¼ö m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); //¼ÒÄÏ ¿É¼ÇÀº ÃÖ´ë 3°³ÀÌ´Ù. for( int i = 0; i < SOCKET_MAX ; i++ ) { if( 0 != rItemSlot.GetSocketAttrIndex((eSOCKET)i) ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",AttrIdx:%d,AttrValue:%d", rItemSlot.GetSocketAttrIndex((eSOCKET)i), rItemSlot.GetSocketAttrValue((eSOCKET)i) ); //< ¼ÒÄÏÀÇ ¼Ó¼º(ºÒ, ¹°.... ) m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } else { m_pTmpBuffer[0]=','; m_pTmpBuffer[1]=','; m_pTmpBuffer[2]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } } } // ¾ÆÀÌÅÛÀÇ »óÁ¡¿¡¼­ »ì¶§, ÆÈ¶§ °¡°Ý¸¦ ¼³Á¤ÇÑ´Ù. VOID GameLog::SetItemPrice( BaseLogData & rLogData, const SCItemSlot & rItemSlot, BOOL bSell ) { MONEY Price = 0; if( bSell ) Price = rItemSlot.GetPriceForSell(); else Price = rItemSlot.GetPriceForBuy(); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Price:%u", Price ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } */ // Ç÷¹À̾îÀÇ ±âº»Á¤º¸¸¦ AddInfo¿¡ ³Ö´Â´Ù. VOID GameLog::SetBasePlayerAddInfo( BaseLogData & rLogData, Player * pPlayer ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",UsrID:%s,ChrName:%s", pPlayer->GetUserID(), pPlayer->GetCharName() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; rLogData.AddAddInfo( m_pTmpBuffer ); } // ////Thread Argument //unsigned int __stdcall SkillWorkThread(void* pArg) //{ // GameLog* pLog = (GameLog*)pArg; // // while(TRUE) // { // // } //} // ÀÔÀå void GameLog::WriteEntrance( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_ENTRANCE ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } // Åõ¸í void GameLog::WriteTransparent( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_TRANSPARENT ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } // ¹«Àû void GameLog::WriteInvincibility( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_INVINCIBILITY ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } // ¹æÁ¤º¸ void GameLog::WriteRoomInfo( Player* pPlayer, DWORD dwRoomKey ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_ROOMINFO ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); SetRoomKey( m_AdminData, pPlayer ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Room:%u", dwRoomKey ); //< ã´Â ¹æ¹øÈ£ m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_AdminData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_AdminData ); } // ºÎȰ void GameLog::WriteRebirth( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_REBIRTH ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } // ¾ÆÀÌÅÛÁ¦°Å void GameLog::WriteRemovalItem( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_REMOVALITEM ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } // ¸ó½ºÅÍÁ¦°Å void GameLog::WriteRemovalMonster( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_REMOVALMONSTER ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } // ȸº¹ void GameLog::WriteRecovery( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_RECOVERY ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } // ·¹º§¾÷ void GameLog::WriteLevelUp( Player* pPlayer, WORD wOldLevel ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_LEVELUP ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",LV:%u,OldLV:%u", pPlayer->GetLevel(), wOldLevel ); //< ÇöÀç·¹º§,ÀÌÀü·¹º§ m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_AdminData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_AdminData ); } // ½ºÅݾ÷ void GameLog::WriteStatPointUp( Player* pPlayer, WORD wPlusPoint ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_STATPOINTUP ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",PlusPt:%u,StatPt:%d", wPlusPoint, pPlayer->GetStatPoint() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_AdminData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_AdminData ); } // ½ºÅ³Æ÷ÀÎÆ®¾÷ void GameLog::WriteSkillPointUp( Player* pPlayer, WORD wPlusPoint ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_SKILLPOINTUP ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",PlusPt:%u,SkillRemainPt:%d", wPlusPoint, pPlayer->GetRemainSkillPoint() ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_AdminData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_AdminData ); } // ¸ó½ºÅͼÒȯ void GameLog::WriteCreateMonster( Player* pPlayer, DWORD dwMonsterCode, WORD wMonsterCount ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_CREATEMONSTER ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); // _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",MonCode:%u,MonNum%u", dwMonsterCode, wMonsterCount ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",MonCd:%u,MonNum%u", dwMonsterCode, wMonsterCount ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_AdminData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_AdminData ); } // Á¦°Å void GameLog::WriteRemoval( Player* pPlayer, const TCHAR* pszMonsterName ) // Á¦°Å { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_REMOVAL ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); m_AdminData.SetToCharName( pszMonsterName, MAX_MONSTERNAME_LENGTH ); // SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } // »ý¼º void GameLog::WriteCreateItem( Player* pPlayer, WORD wItemCode, WORD wItemCount ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_CREATEITEM ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",Item:%u,Num:%u", wItemCode, wItemCount ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_AdminData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_AdminData ); } // ÇÏÀÓ void GameLog::WriteCreateHeim( Player* pPlayer, MONEY amount ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_CREATEHEIM ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Money : %I64u", amount ); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_AdminData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_AdminData ); } // ų void GameLog::WriteKill( Player* pPlayer, const TCHAR* pszMonsterName ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_KILL ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); m_AdminData.SetToCharName( pszMonsterName, MAX_MONSTERNAME_LENGTH ); // SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } //¼Óµµ void GameLog::WriteSpeed( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_SPEED ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); // SetRoomKey( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } //¾îÄ«¿îÆ® void GameLog::WriteAccount( Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( GM_KILL ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } void GameLog::LogGM( int nLogType, Player* pPlayer ) { if( !IsRun() || !pPlayer ) return; m_AdminData.Init(); m_AdminData.SetLogType( nLogType ); m_AdminData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_AdminData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_AdminData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_AdminData, pPlayer ); m_LogMng.Serialize( m_AdminData ); } void GameLog:: PreProcess() { BOOST_STATIC_ASSERT( MAX_ITEMPARTEX_SIZE == sizeof(ITEMSTREAMEX) ); BOOST_STATIC_ASSERT( MAX_BASE_PLAYER_INFO_SIZE == sizeof(BASE_PLAYERINFO_LOG) ); } //C_NA_0_20100520_ACSYSTEM_CHANGED void GameLog::SetAchievementInfo( WORD location, WORD index_number ) { m_ACInfoData.location = location; m_ACInfoData.index_number = index_number; } #ifdef _NA004034_20120102_POINT_WALLET_SYSTEM void GameLog::LogPointWallet( Player* pPlayer, eLOG_ACTION action_type, DWORD point_code, \ DWORD previous_point, DWORD point_diffrence, DWORD current_point ) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_ActionData.SetLogType( action_type ); SetPlayerPosInfo( m_ActionData, pPlayer ); memset(m_pTmpBuffer, 0, sizeof(m_pTmpBuffer)); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "MoneyCode:%d,Before:%d,Use:%d,Total:%d", \ point_code, previous_point, point_diffrence, current_point); m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } #endif //_NA004034_20120102_POINT_WALLET_SYSTEM //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND void GameLog::LogChaosZone(eLOG_ACTION log_type, Player* player, const TCHAR* target_character_name, const TCHAR * add_info) { if( !IsRun() || !player ) return; m_ActionData.Init(); m_ActionData.SetLogType(log_type); m_ActionData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ActionData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ActionData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); SetPlayerPosInfo(m_ActionData, player); SetRoomKey(m_ActionData, player); if (target_character_name != NULL) { m_ActionData.SetCharName(target_character_name, MAX_CHARNAME_LENGTH); } if (add_info != NULL) { m_ActionData.AddAddInfo((TCHAR*)add_info); } m_LogMng.Serialize(m_ActionData); } #ifdef _NA_007237_20140519_GAMELOG_DONATION_GUILDCOIN void GameLog::LogGuild( eLOG_ACTION log_type, Player* player, const WORD donated_point, const TCHAR* add_info /*= NULL*/ ) { if( !IsRun() || !player ) return; m_ActionData.Init(); m_ActionData.SetLogType(log_type); m_ActionData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ActionData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ActionData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); SetPlayerPosInfo(m_ActionData, player); memset(m_pTmpBuffer, 0, sizeof(m_pTmpBuffer)); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "DonatedPoint: %d", donated_point); m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } #endif //_NA_007237_20140519_GAMELOG_DONATION_GUILDCOIN #ifdef _JP_007387_20140702_GAMELOG_GOLDRUSH_GOLDPOINT // °ñµå·¯½Ã¸¦ À§ÇÑ DB·Î±× // changed_point, total_point -- °ñµåÆ÷ÀÎÆ®°ü·Ã ·Î±×¸¦ ³²±æ °æ¿ì »ç¿ë // monster_code -- ¸ó½ºÅÍų ·Î±×¸¦ ³²±æ °æ¿ì »ç¿ë void GameLog::LogGoldRush( eLOG_ACTION log_type, Player* player, WORD changed_point, WORD total_point, MONSTERCODE monster_code /*= 0*/, const TCHAR* add_info /* = NULL */) { if( !IsRun() || !player ) return; m_ActionData.Init(); m_ActionData.SetLogType(log_type); m_ActionData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ActionData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ActionData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); SetPlayerPosInfo(m_ActionData, player); GameZone * game_zone = player->GetGameZonePtr(); ZONEKEY room_key = 0; if (game_zone) { room_key = game_zone->GetKey(); } memset(m_pTmpBuffer, 0, sizeof(m_pTmpBuffer)); switch (log_type) { case ACT_GOLDRUSH_MONSTERKILL: _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",MonsterCode:%d Room:%u", monster_code ,room_key ); break; case ACT_GOLDRUSH_GOLDPOINT_GET: _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",ChangedPoint: %d, TotalPoint: %d, Room:%u", changed_point, total_point, room_key ); break; case ACT_GOLDRUSH_GOLDPOINT_LOSE: //°ñµåÆ÷ÀÎÆ® ¼Õ½Ç _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",ChangedPoint: %d, TotalPoint: %d, Room:%u", changed_point * -1, total_point, room_key ); break; case ACT_GOLDRUSH_BATTLERESULT: if (add_info != NULL) { _tcscpy(m_pTmpBuffer, add_info); } break; } m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ActionData.AddAddInfo((TCHAR*)m_pTmpBuffer); m_LogMng.Serialize(m_ActionData); } #endif //_JP_007387_20140702_GAMELOG_GOLDRUSH_GOLDPOINT #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION void GameLog::LogGuildFacility( eLOG_ACTION log_type, Player* player, GameGuild* const guild, FCODE code, FLEVEL level ) { if( !IsRun() || !player ) return; m_ActionData.Init(); m_ActionData.SetLogType(log_type); m_ActionData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ActionData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ActionData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); SetPlayerPosInfo(m_ActionData, player); if (guild != NULL) { memset(m_pTmpBuffer, 0, sizeof(m_pTmpBuffer)); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Guild Guid : %d, Guild Name : %s", guild->GetGuildGuid(), guild->GetGuildName()); m_ActionData.AddAddInfo(m_pTmpBuffer); } memset(m_pTmpBuffer, 0, sizeof(m_pTmpBuffer)); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Facility Code : %d, Facility Level : %d", code, level); m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION #ifdef _NA_007086_20140318_MONSTERBOOK void GameLog::LogMonsterBook( eLOG_ACTION log_type, Player* player, MONSTERCODE monster_code ) { if( !IsRun() || !player ) return; m_ActionData.Init(); m_ActionData.SetLogType(log_type); m_ActionData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ActionData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ActionData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); SetPlayerPosInfo(m_ActionData, player); memset(m_pTmpBuffer, 0, sizeof(m_pTmpBuffer)); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "MonsterCode: %d", monster_code); m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } #endif //_NA_007086_20140318_MONSTERBOOK #ifdef _NA_007750_20141113_WZDAT_MODIFY_LOG void GameLog::LogWzDat( eLOG_ACTION log_type, const TCHAR* add_info /*= NULL*/ ) { if( !IsRun()) { return; } m_ActionData.Init(); m_ActionData.SetLogType(log_type); m_ActionData.SetAccountID("WzDat", ID_MAX_LEN); m_ActionData.SetCharName("WzDat", MAX_CHARNAME_LENGTH); if (add_info != NULL) { m_ActionData.AddAddInfo((TCHAR*)add_info); } m_LogMng.Serialize(m_ActionData); } #endif // _NA_007750_20141113_WZDAT_MODIFY_LOG #ifdef _NA_008119_20150310_CHECK_ONESHOT_ONEKILL_SITUATION void GameLog::LogAction_PK( int iLogType, Player * pPlayer, Player* pOtherPlayer/*=NULL*/, DAMAGETYPE _damage_value /*= 0*/) { if( !IsRun() || !pPlayer ) return; m_ActionData.Init(); m_ActionData.SetLogType( iLogType ); m_ActionData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ActionData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ActionData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); SetPlayerPosInfo( m_ActionData, pPlayer ); if( pOtherPlayer ) { SetBasePlayerAddInfo( m_ActionData, pOtherPlayer ); } // óġ ½ÃÀÇ µ¥¹ÌÁö ±â·Ï if (_damage_value != 0) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ", LastHitDmg: %d", _damage_value); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } if (iLogType == ACT_PK_KILL) { time_t cur_time; util::TimeSync::time( &cur_time ); DWORD dwLeavedTime = max( 0, pPlayer->GetChaoState().GetChaoEndTime() - cur_time ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ",%I64u", dwLeavedTime); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } // PK ų ·Î±×¸é Ä«¿À»óÅ ǥ½Ã if( pOtherPlayer != NULL && (iLogType == ACT_PK_KILL || iLogType == ACT_PK_DIE) ) { _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, ", CaoStat:%u/%u,OtherCaoStat:%u/%u", pPlayer->GetChaoState().GetChaoState(), pPlayer->GetChaoState().IsBoradori(), pOtherPlayer->GetChaoState().GetChaoState(), pOtherPlayer->GetChaoState().IsBoradori() ); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } else if (pOtherPlayer != NULL && (iLogType == ACT_DOMINATION_KILL ||iLogType == ACT_DOMINATION_DIE)) { GameZone* pZone = pPlayer->GetGameZonePtr(); const GUILDGUID guildGuid = pOtherPlayer->GetGuildGuid(); GameGuild* const pGuild = g_GameGuildManager.FindGuild(guildGuid); if (NULL != pZone) { _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, "."); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } if (NULL != pGuild) { const TCHAR* guildName = pGuild->GetGuildName(); _sntprintf(m_pTmpBuffer, MAX_ADDINFO_SIZE, ", GuildName:%s", guildName); m_pTmpBuffer[MAX_ADDINFO_SIZE] = '\0'; m_ActionData.AddAddInfo(m_pTmpBuffer); } } m_LogMng.Serialize( m_ActionData ); } #endif //_NA_008119_20150310_CHECK_ONESHOT_ONEKILL_SITUATION #ifdef _NA_008124_20150313_AWAKENING_SYSTEM void GameLog::LogAwakening( int iLogType, Player * pPlayer, SCItemSlot& equip_item, const CODETYPE material_item_code, const BYTE material_awakening, const BYTE result_awakening, const BYTE prev_awakening, const CODETYPE additive_item_code ) { if( !IsRun() || !pPlayer ) return; if( ITEM_AWAKENING_SUCCESS != iLogType && ITEM_AWAKENING_FAILED != iLogType ) { return; } m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); m_ItemData.SetItemCode( equip_item.GetItemCode() ); m_ItemData.SetItemSerial( equip_item.GetWorldSerial() ); m_ItemData.SetItemNum( (BYTE)equip_item.GetNum() ); ITEMSTREAMEX ItemStreamEx; equip_item.CopyOut(ItemStreamEx); m_ItemData.SetItemStreamEx1( (const BYTE*)&ItemStreamEx, sizeof(ItemStreamEx) ); int need_additive_number = 0; const AwakeningInfo* awakening_info = AwakeningInfoParser::Instance()->FindData(equip_item.GetCode()); if ( awakening_info != NULL ) { need_additive_number = result_awakening - prev_awakening; need_additive_number *= awakening_info->additive_count; } _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Material:%d,ResultAwakening:%d,PrevAwakening:%d,Additive:%d,NeedAdditive:%d", material_item_code, result_awakening, prev_awakening, additive_item_code, need_additive_number); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } void GameLog::LogEvolution( int iLogType, Player * pPlayer, const CODETYPE result_item_code, const CODETYPE prev_item_code,const CODETYPE additive_item_code ) { if( !IsRun() || !pPlayer ) return; if( ITEM_EVOLUTION_SUCCESS != iLogType && ITEM_EVOLUTION_FAILED != iLogType ) { return; } m_ItemData.Init(); m_ItemData.SetLogType( iLogType ); m_ItemData.SetAccountID( pPlayer->GetUserID(), ID_MAX_LEN ); m_ItemData.SetCharName( pPlayer->GetCharName(), MAX_CHARNAME_LENGTH ); m_ItemData.SetUserIP( pPlayer->GetUserIP(), MAX_IPADDRESS_SIZE ); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "ResultItemCode:%d,PrevItemCode:%d,Additive:%d", result_item_code, prev_item_code, additive_item_code); m_pTmpBuffer[MAX_ADDINFO_SIZE]='\0'; m_ItemData.AddAddInfo( m_pTmpBuffer ); m_LogMng.Serialize( m_ItemData ); } #endif // _NA_008124_20150313_AWAKENING_SYSTEM #ifdef _NA_008299_20150519_MAX_DAMAGE_LOG void GameLog::LogMaxDamage( eLOG_ACTION log_type, Character* attacked_character, Character* attacker, DamageArgs* damage_arg ) { if( !IsRun() || !attacked_character || !attacker || !damage_arg ) return; m_ActionData.Init(); m_ActionData.SetLogType(log_type); if (attacker->IsEqualObjectKind(PLAYER_OBJECT)) { Player* attacker_player = static_cast(attacker); if (attacker_player != NULL) { m_ActionData.SetAccountID(attacker_player->GetUserID(), ID_MAX_LEN); m_ActionData.SetCharName(attacker_player->GetCharName(), MAX_CHARNAME_LENGTH); m_ActionData.SetUserIP(attacker_player->GetUserIP(), MAX_IPADDRESS_SIZE); SetPlayerPosInfo(m_ActionData, attacker_player); } } int npc_code = 0; if (attacked_character->IsEqualObjectKind(NPC_OBJECT)) { NPC* npc = static_cast(attacked_character); if (npc != NULL) { const BASE_NPCINFO* pInfo = npc->GetBaseInfo(); if (pInfo != NULL) { npc_code = pInfo->m_MonsterCode; } } } MAPCODE map_code = 0; GameZone *pZone = attacked_character->GetGameZonePtr(); if (pZone != NULL) { map_code = pZone->GetMapCode(); } memset(m_pTmpBuffer, 0, sizeof(m_pTmpBuffer)); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "NpcCode:%d, MapCode:%d, Damage:%d, SkillCode:%d, AttackType:%d", npc_code, map_code, damage_arg->damage_, damage_arg->skill_code_, damage_arg->attack_type_); m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } #endif // _NA_008299_20150519_MAX_DAMAGE_LOG #ifdef _NA_008334_20150608_SONNENSCHEIN VOID GameLog::LogSonnenSchein( eLOG_ACTION log_type, GUILDGUID guild_guid, Player* player ) { if( !IsRun() ) { return; } m_ActionData.Init(); m_ActionData.SetLogType(log_type); CHARGUID stamper_guid = 0; if (player != NULL) { m_ActionData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ActionData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ActionData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); SetPlayerPosInfo(m_ActionData, player); CHARGUID stamper_guid = player->GetCharGuid(); } memset(m_pTmpBuffer, 0, sizeof(m_pTmpBuffer)); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "GuildGuid:%d, StamperGuid:%d", guild_guid, stamper_guid); m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); } #endif //_NA_008334_20150608_SONNENSCHEIN //_NA_008506_20150923_LOG_LOGOUT_IN_GAMESERVER VOID GameLog::LogLogout( Player* player ) { if( !IsRun() ) { return; } m_ActionData.Init(); m_ActionData.SetLogType(SESSION_LOGOUT_GAMESERVER); MAPCODE map_code = 0; if (player != NULL) { m_ActionData.SetAccountID(player->GetUserID(), ID_MAX_LEN); m_ActionData.SetCharName(player->GetCharName(), MAX_CHARNAME_LENGTH); m_ActionData.SetUserIP(player->GetUserIP(), MAX_IPADDRESS_SIZE); SetPlayerPosInfo(m_ActionData, player); GameZone* zone = player->GetGameZonePtr(); if (zone != NULL) { map_code = zone->GetMapCode(); } } memset(m_pTmpBuffer, 0, sizeof(m_pTmpBuffer)); _sntprintf( m_pTmpBuffer, MAX_ADDINFO_SIZE, "Last Location:%d", map_code); m_ActionData.AddAddInfo(m_pTmpBuffer); m_LogMng.Serialize( m_ActionData ); }