Files
Client/Server/AdminTool/AdminToolClient/Dispatch.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

2488 lines
88 KiB
C++

#include "stdafx.h"
#include "./res/resource.h"
#include "AdminToolClient.h"
#include "Dispatch.h"
#include "WindowMgr.h"
#include "UserInfoDoc.h"
#include "CharacterDoc.h"
#include "CharSheetView.h"
#include "ItemManageDlg.h"
#include "PacketManager.h"
#include "GuildSearchDlg.h"
#include "GuildMainDlg.h"
#include "GuildRestoreDlg.h"
#include "FortInfoDlg.h"
#include "ShopCampPage.h"
#include "MiningCampDlg.h"
#include "CastleSearchDlg.h"
#include "CastleCreatureDlg.h"
#include "ItemQuantityControlDlg.h"
#include "UserBillingLogDlg.h"
#include "QuickMenuDlgBar.h"
#include "GAdminManagementDlg.h"
#include "InitDialogBar.h"
#include "GlobalFunctions.h"
#include "UserCharTreeView.h"
#include "InterestedUserDlg.h"
#include "ConnectionInfoDlg.h"
#include "DuplicatedItemDlg.h"
#include "ItemDistributeDlg.h"
#include "UnifiedCharInfoDlg.h"
#include "UnifiedGuildInfoDlg.h"
#include "DetailCharInfo.h"
#include "AdminStoreDlgBar.h"
#include "GMLogMsgDlg.h"
#include "CharInfoTime.h"
#include <Network/Packet/PacketBase.h>
#include <Network/Packet/PacketStruct/GuildPacket.h>
#include <Utility/Debug/DebugMacros.h>
#include <Network/SingleSession/ClientSingleSession.h>
#include <Network/Protocol/Ryl_AdminMgrProtocol.h>
#include <Character/ModifyCharacter.h>
#include <Item/ItemMgr.h>
#include <Item/ItemFactory.h>
#include <Item/Container/ItemContainer.h>
#include <Item/Container/EquipmentsContainer.h>
#define RADIAN 57.2957
bool CClientDispatch::DispatchPacket(PktBase* lpPktBase)
{
using namespace PktAdminMgr;
unsigned char cCmd = lpPktBase->GetCmd();
switch(cCmd)
{
case PktCMD::PktResultAck: return PktResultAck (lpPktBase);
case PktCMD::PktNewAdminAck: return PktAdminListAck (lpPktBase); // 형태가 PktAdminListAck와 같다 이놈은 싱글
case PktCMD::PktAdminListAck: return PktAdminListAck (lpPktBase); // 이놈은 멀티?
case PktCMD::PktLoginInfoAck: return PktLoginInfoAck (lpPktBase);
case PktCMD::PktDelAdminAck: return PktDelAdminAck (lpPktBase);
case PktCMD::PktUpdateLevelAck: return PktUpdateLevelAck (lpPktBase);
case PktCMD::PktUpdateIPAck: return PktUpdateIPAck (lpPktBase);
case PktCMD::PktLogListAck: return PktLogListAck (lpPktBase);
case PktCMD::PktDetailLogAck: return PktDetailLogAck (lpPktBase);
case PktCMD::PktGetExitLogAck: return PktGetExitLogAck (lpPktBase);
case PktCMD::PktBeforeAfterAck: return PktBeforeAfterAck (lpPktBase);
case PktCMD::PktAgentServerIndex: return PktAgentServerIndexAck (lpPktBase);
case PktCMD::PktSearchAck: return PktSearchAck (lpPktBase);
case PktCMD::PktSearchResultAck: return PktSearchResultAck (lpPktBase);
case PktCMD::PktGetCharacterAck: return PktGetCharacterAck (lpPktBase);
case PktCMD::PktCloseCharacterAck: return PktCloseCharacterAck (lpPktBase);
case PktCMD::PktCreateItemAck: return PktCreateItemAck (lpPktBase);
case PktCMD::PktUpdateItemAck: return PktUpdateItemAck (lpPktBase);
case PktCMD::PktDepositSync: return PktSyncDeposit (lpPktBase);
case PktCMD::PktRemoveItemAck: return PktRemoveItemAck (lpPktBase);
case PktCMD::PktItemResetAck: return PktItemResetAck (lpPktBase);
case PktCMD::PktInvenGold: return PktInvenGold (lpPktBase);
case PktCMD::PktSkillEditAck: return PktSkillEditAck (lpPktBase);
case PktCMD::PktSearchBlockAck: return PktSearchBlockAck (lpPktBase);
case PktCMD::PktSetZoneListAck: return PktSetZoneList (lpPktBase);
case PktCMD::PktChangeNameAck: return PktChangeNameAck (lpPktBase);
case PktCMD::PktDelCharListAck: return PktDelCharListAck (lpPktBase);
case PktCMD::PktCharRestoreAck: return PktCharRestoreAck (lpPktBase);
case PktCMD::PktAdminStoreInsertAck: return PktAdminStoreInsertAck (lpPktBase);
case PktCMD::PktAdminStoreDeleteAck: return PktAdminStoreDeleteAck (lpPktBase);
case PktCMD::PktGetAdminStoreItem: return PktGetAdminStoreItemAck (lpPktBase);
case PktCMD::PktGuildSearchAck: return PktGuildSearchAck (lpPktBase);
case PktCMD::PktRequestGuildMemberListAck: return PktRequestGuildMemberListAck (lpPktBase);
case PktCMD::PktGuildRestoreDataListAck: return PktGuildRestoreDataListAck (lpPktBase);
case PktCMD::PktFortSearchAck: return PktFortSearchAck (lpPktBase);
case PktCMD::PktMiningCampAck: return PktMiningCampAck (lpPktBase);
case PktCMD::PktShopCampAck: return PktShopCampAck (lpPktBase);
case PktCMD::PktCastleSearchAck: return PktCastleSearchAck (lpPktBase);
case PktCMD::PktCastleCreatureAck: return PktCastleCreatureAck (lpPktBase);
case PktCMD::PktItemQtyControl: return PktItemQtyControlAck (lpPktBase);
case PktCMD::PktUserBillingLogAck: return PktUserBillingLogAck (lpPktBase);
case PktCMD::PktGameAdminAck: return PktGameAdminAck (lpPktBase);
case PktCMD::PktRefreshConnectedList: return PktConnectAllServerzAck (lpPktBase);
case PktCMD::PktInterestedUser: return PktInterestedUserList (lpPktBase);
case PktCMD::PktConnectionChk: return PktConnectionChk (lpPktBase);
case PktCMD::PktConnectedUserList: return PktConnectedUserList (lpPktBase);
case PktCMD::PktDuplicatedItem: return PktDuplicatedItem (lpPktBase);
case PktCMD::PktItemDistributeAck: return PktItemDistributeAck (lpPktBase);
case PktCMD::PktGuildRight: return PktGuildRight (lpPktBase);
case PktCMD::PktUnifiedCharInfo: return PktUnifiedCharInfo (lpPktBase);
case PktCMD::PktUnifiedGuildInfo: return PktUnifiedGuildInfo (lpPktBase);
case PktCMD::PktDetailCharInfo: return PktDetailCharInfo (lpPktBase);
case PktCMD::PktCancelExecuteQuest: return PktCancelExecuteQuest (lpPktBase);
case PktCMD::PktDeleteHistoryQuest: return PktDeleteHistoryQuest (lpPktBase);
case PktCMD::PktUserNation: return PktUserNation (lpPktBase);
case PktCMD::PktShiftToUID: return PktShiftToUID (lpPktBase);
case PktCMD::PktStoreTabEdit: return PktStoreTabEdit (lpPktBase);
case PktCMD::PktGMLogMsg: return PktGMLogMsg (lpPktBase);
case PktCMD::PktGuildMemberEdit: return PktGuildMemberEdit (lpPktBase);
case PktCMD::PktGetCharInfoTimeAck: return PktResultCharInfoTime (lpPktBase);
}
return true;
}
// 작업 결과 ACK
bool CClientDispatch::PktResultAck(PktBase* lpPktBase)
{
PktAdminMgr::PktResultAck* lpPktResultAck = static_cast<PktAdminMgr::PktResultAck*>(lpPktBase);
switch(lpPktResultAck->m_Result)
{
case PktAdminMgr::PktResult::Result_Null: AfxMessageBox(GetLocalString("MSG_0005"), MB_OK | MB_ICONINFORMATION); break;
case PktAdminMgr::PktResult::Err_Unknown: Report(GetLocalString("MSG_0006"), FAILED); break;
case PktAdminMgr::PktResult::Err_Database: Report(GetLocalString("MSG_0007"), FAILED); break;
case PktAdminMgr::PktResult::Err_Account: Report(GetLocalString("MSG_0008"), FAILED); break;
case PktAdminMgr::PktResult::Err_Passwd: Report(GetLocalString("MSG_0009"), FAILED); break;
case PktAdminMgr::PktResult::Err_ConnectIP: Report(GetLocalString("MSG_0010"), FAILED); break;
case PktAdminMgr::PktResult::Err_OverlapID: Report(GetLocalString("MSG_0011"), FAILED); break;
case PktAdminMgr::PktResult::Err_NewAdmin: Report(GetLocalString("MSG_0012"), FAILED); break;
case PktAdminMgr::PktResult::Err_DelAdmin: Report(GetLocalString("MSG_0013"), FAILED); break;
case PktAdminMgr::PktResult::Err_UpdateLevel: Report(GetLocalString("MSG_0014"), FAILED); break;
case PktAdminMgr::PktResult::Err_UpdateIP: Report(GetLocalString("MSG_0015"), FAILED); break;
case PktAdminMgr::PktResult::Err_UpdatePasswd: Report(GetLocalString("MSG_0016"), FAILED); break;
case PktAdminMgr::PktResult::Err_Authority: Report(GetLocalString("MSG_0017"), FAILED); break;
case PktAdminMgr::PktResult::Err_UnkonwnPacket: Report(GetLocalString("MSG_0018"), FAILED); break;
case PktAdminMgr::PktResult::Err_ModifyCharacter: Report(GetLocalString("MSG_0019"), FAILED); ResultErrModifyCharacter(lpPktBase); break;
case PktAdminMgr::PktResult::Err_NotFountDBComponent: Report(GetLocalString("MSG_0020"), FAILED); break;
case PktAdminMgr::PktResult::Err_CloseCharacter: Report(GetLocalString("MSG_0021"), FAILED); break;
case PktAdminMgr::PktResult::Err_ChangeStatus: Report(GetLocalString("MSG_0022"), FAILED); break;
case PktAdminMgr::PktResult::Err_PacketDispatch: Report(GetLocalString("MSG_0023"), FAILED); break;
case PktAdminMgr::PktResult::Err_CreateItem1: Report(GetLocalString("MSG_0024"), FAILED); break;
case PktAdminMgr::PktResult::Err_CreateItem2: Report(GetLocalString("MSG_0025"), FAILED); break;
case PktAdminMgr::PktResult::Err_CreateItem3: Report(GetLocalString("MSG_0026"), FAILED); break;
case PktAdminMgr::PktResult::UNKNOWN_ERROR: Report(GetLocalString("MSG_0027"), FAILED); break;
case PktAdminMgr::PktResult::INVALID_REQUEST: Report(GetLocalString("MSG_0028"), FAILED); break;
case PktAdminMgr::PktResult::GET_UIDCID_QUERY_FAILED: Report(GetLocalString("MSG_0029"), FAILED); break;
case PktAdminMgr::PktResult::INVALID_UID_CID_DATA: Report(GetLocalString("MSG_0030"), FAILED); break;
case PktAdminMgr::PktResult::GET_STORE_QUERY_FAILED: Report(GetLocalString("MSG_0031"), FAILED); break;
case PktAdminMgr::PktResult::GET_CHAR_DATA_QUERY_FAILED: Report(GetLocalString("MSG_0032"), FAILED); break;
case PktAdminMgr::PktResult::INVALID_UID_CID_ERROR: Report(GetLocalString("MSG_0033"), FAILED); break;
case PktAdminMgr::PktResult::LOGIN_ANOTHER_GAMESERVER: Report(GetLocalString("MSG_0034"), FAILED); break;
case PktAdminMgr::PktResult::SESSION_OPEN_FAILED: Report(GetLocalString("MSG_0035"), FAILED); break;
case PktAdminMgr::PktResult::ALREADY_LOGIN_USER_SESSION_OPEN: Report(GetLocalString("MSG_0036"), FAILED); break;
case PktAdminMgr::PktResult::ANOTHER_CHAR_LOAD_FAILED: Report(GetLocalString("MSG_0037"), CAUTION); break;
case PktAdminMgr::PktResult::SETTING_DATA_FAILED: Report(GetLocalString("MSG_0038"), FAILED); break;
case PktAdminMgr::PktResult::SESSION_START_FAILED: Report(GetLocalString("MSG_0039"), FAILED); break;
case PktAdminMgr::PktResult::Err_Invalid_ItemID: Report(GetLocalString("MSG_0040"), FAILED); break;
case PktAdminMgr::PktResult::Err_Invalid_Item: Report(GetLocalString("MSG_0041"), FAILED); break;
case PktAdminMgr::PktResult::Err_Invalid_Character: Report(GetLocalString("MSG_0042"), FAILED); break;
case PktAdminMgr::PktResult::Err_RemoveItem: Report(GetLocalString("MSG_0043"), FAILED); break;
case PktAdminMgr::PktResult::Err_NotUseDeposit: Report(GetLocalString("MSG_0044"), FAILED); break;
case PktAdminMgr::PktResult::Err_NotFoundAgentDispatch: Report(GetLocalString("MSG_0045"), FAILED); break;
case PktAdminMgr::PktResult::Err_StateisSave: Report(GetLocalString("MSG_0046"), FAILED); ResultErrModifyCharacter(lpPktBase); break;
case PktAdminMgr::PktResult::Err_SetInventoryGold: Report(GetLocalString("MSG_0047"), FAILED); break;
case PktAdminMgr::PktResult::Err_SkipCharacterSave: Report(GetLocalString("MSG_0048"), FAILED); break;
case PktAdminMgr::PktResult::Err_SkillEdit: Report(GetLocalString("MSG_0049"), FAILED); break;
case PktAdminMgr::PktResult::Err_DepositPasswd: Report(GetLocalString("MSG_0050"), FAILED); break;
case PktAdminMgr::PktResult::Err_NotUseName: Report(GetLocalString("MSG_0051"), FAILED); break;
case PktAdminMgr::PktResult::Err_NotChangeName: Report(GetLocalString("MSG_0052"), FAILED); break;
case PktAdminMgr::PktResult::Err_NotCharacterInfo: Report(GetLocalString("MSG_0053"), FAILED); break;
case PktAdminMgr::PktResult::Err_NotUserInfoSlot: Report(GetLocalString("MSG_0054"), FAILED); break;
case PktAdminMgr::PktResult::Err_AdminStore: Report(GetLocalString("MSG_0055"), FAILED); break;
case PktAdminMgr::PktResult::Err_AdminStoreDelete: Report(GetLocalString("MSG_0056"), FAILED); break;
case PktAdminMgr::PktResult::Err_GameAdminManage: Report(GetLocalString("MSG_0057"), FAILED); break;
case PktAdminMgr::PktResult::Err_InterestedUserManage: Report(GetLocalString("MSG_0144"), FAILED); break;
case PktAdminMgr::PktResult::Err_NOT_ENOUGH_STAT: Report(GetLocalString("MSG_0145"), FAILED); break;
case PktAdminMgr::PktResult::Err_NOT_ENOUGH_SKILLSLOT: Report(GetLocalString("MSG_0146"), FAILED); break;
case PktAdminMgr::PktResult::Err_FAILED_TO_GET_SKILLPROTOTYPE: Report(GetLocalString("MSG_0147"), FAILED); break;
case PktAdminMgr::PktResult::Err_OVERED_MAX_LOCKCOUNT: Report(GetLocalString("MSG_0148"), FAILED); break;
case PktAdminMgr::PktResult::Err_OVERED_MAX_SKILL_LEVEL: Report(GetLocalString("MSG_0149"), FAILED); break;
case PktAdminMgr::PktResult::Err_NOT_CURRENT_CLASS: Report(GetLocalString("MSG_0150"), FAILED); break;
case PktAdminMgr::PktResult::Success_Login: Report(GetLocalString("MSG_0058"), SUCCESS); SucessLogin(); break;
case PktAdminMgr::PktResult::Success_ConnectIP: Report(GetLocalString("MSG_0059"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_NewAdmin: Report(GetLocalString("MSG_0060"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_SearchCompleted: Report(GetLocalString("MSG_0061"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_ModifyCharacter: Report(GetLocalString("MSG_0062"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_ChangeStatus: Report(GetLocalString("MSG_0063"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_ChangePos: Report(GetLocalString("MSG_0064"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_DepositPasswd: Report(GetLocalString("MSG_0065"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_UseName: Report(GetLocalString("MSG_0066"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_CharacterRestore: Report(GetLocalString("MSG_0067"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_AdminStore: Report(GetLocalString("MSG_0068"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_UpdateAdminStore: Report(GetLocalString("MSG_0069"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_SaveCharacter: Report(GetLocalString("MSG_0070"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_ChkDuplicatedItem: Report(GetLocalString("MSG_0151"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_SUCCESS: Report(GetLocalString("MSG_0152"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_DeleteQuest: Report(GetLocalString("MSG_0180"), SUCCESS); break;
case PktAdminMgr::PktResult::Err_DeleteQuest: Report(GetLocalString("MSG_0181"), FAILED); break;
case PktAdminMgr::PktResult::Success_StoreTabEdit: Report(GetLocalString("ADDED_STRIMG_037"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_AddBlockUser: Report(GetLocalString("ADDED_STRING_054"), SUCCESS); break;
case PktAdminMgr::PktResult::Success_DelBlockUser: Report(GetLocalString("ADDED_STRING_056"), SUCCESS); break;
case PktAdminMgr::PktResult::Err_AddBlockUser: Report(GetLocalString("ADDED_STRING_055"), FAILED); break;
case PktAdminMgr::PktResult::Err_DelBlockUser: Report(GetLocalString("ADDED_STRING_057"), FAILED); break;
case PktAdminMgr::PktResult::Success_NameChangeCount: Report(GetLocalString("ADDED_STRING_081"), SUCCESS); break;
default: Report(GetLocalString("MSG_0071"), CAUTION); break;
}
return true;
}
// 로그인 성공
bool CClientDispatch::SucessLogin()
{
CDialog* lpDlg = static_cast<CDialog*>(GET_WINDOW(IDD_ADMIN_LOGIN));
if(NULL != lpDlg)
{
lpDlg->EndDialog(IDOK);
}
else
{
AfxMessageBox(GetLocalString("MSG_0004"));
}
return true;
}
// 로그인 Ack
bool CClientDispatch::PktLoginInfoAck(PktBase* lpPktBase)
{
PktAdminMgr::PktLoginInfoAck* lpPktLoginInfo = static_cast<PktAdminMgr::PktLoginInfoAck*>(lpPktBase);
CAdminToolClientApp* pApp = static_cast<CAdminToolClientApp*>(AfxGetApp());
pApp->m_MyInfo.m_UID = lpPktLoginInfo->m_UID;
pApp->m_MyInfo.m_Level = lpPktLoginInfo->m_Level;
g_bIsLogin = true; // 인증을 통과했음을 체크!
_tcsncpy(pApp->m_MyInfo.m_szAccount, CONV_CLISTR(lpPktLoginInfo->m_szAccount), PktAdminMgr::MAX_ACCOUNT);
_tcsncpy(pApp->m_MyInfo.m_szPassword, CONV_CLISTR(lpPktLoginInfo->m_szPassword), PktAdminMgr::MAX_PASSWORD);
_tcsncpy(pApp->m_MyInfo.m_szIP, CONV_CLISTR(lpPktLoginInfo->m_szIP), PktAdminMgr::MAX_IP);
_tcsncpy(pApp->m_MyInfo.m_RegDate, CONV_CLISTR(lpPktLoginInfo->m_RegDate), PktAdminMgr::MAX_DATE);
_tcsncpy(pApp->m_MyInfo.m_szName, CONV_CLISTR(lpPktLoginInfo->m_szName), PktAdminMgr::MAX_NAME);
CPacketMgr::GetInstance()->SendRefrechConnectedServerList(); // 접속된 중계서버 리스트 요청
return true;
}
// 중계서버 정보 얻기
bool CClientDispatch::PktAgentServerIndexAck(PktBase* lpPktBase)
{
PktAdminMgr::PktAgentServerIndex* lpPktAgentServerIndex =
static_cast<PktAdminMgr::PktAgentServerIndex*>(lpPktBase);
// 구조체 ServerInfo(Name, Index)를 요소로 가진 리스트 셋팅
CString szServerName = CONV_CLISTR(lpPktAgentServerIndex->m_szServerName);
CCharacterDoc::GetInstance().PushServerGroup(szServerName,
lpPktAgentServerIndex->m_ServerGroup);
return true;
}
// 관리자 아이템창고 리스트
bool CClientDispatch::PktSetZoneList(PktBase* lpPktBase)
{
PktAdminMgr::PktSetZoneList* lpPktSetZoneAck = static_cast<PktAdminMgr::PktSetZoneList*>(lpPktBase);
CCharacterDoc& CharDocument = CCharacterDoc::GetInstance();
CharDocument.GetZoneList().Serialize_In(lpPktSetZoneAck->m_ZoneBuffer);
return true;
}
// 관리자 창고에 아이템삽입 Ack
bool CClientDispatch::PktAdminStoreInsertAck(PktBase* lpPktBase)
{
PktAdminMgr::PktAdminStoreInsertAck* lpPktAdminStore = static_cast< PktAdminMgr::PktAdminStoreInsertAck* >( lpPktBase );
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_STATUS_DLGBAR));
CListCtrl* lpList = static_cast<CListCtrl*>(lpDialog->GetDlgItem(IDC_ADMINSTORELIST));
if(NULL != lpList)
{
int ItemCount = lpList->GetItemCount();
TCHAR szUID[10];
CString strServerName;
_sntprintf(szUID, sizeof(szUID), _T("%d"), lpPktAdminStore->m_dwStoreUID);
CCharacterDoc::GetInstance().GetServerName((unsigned long)lpPktAdminStore->m_cServerIdx, strServerName);
lpList->InsertItem(ItemCount, szUID);
lpList->SetItemText(ItemCount, 1, strServerName);
lpList->SetItemText(ItemCount, 2, CONV_CLISTR(lpPktAdminStore->m_szOwnerName));
lpList->SetItemText(ItemCount, 3, CONV_CLISTR(lpPktAdminStore->m_szItemName));
}
return true;
}
// 상세로그 정보 ACK
bool CClientDispatch::PktBeforeAfterAck( PktBase* lpPktBase )
{
PktAdminMgr::PktBeforeAfterAck* lpPktBeforeAfter = static_cast< PktAdminMgr::PktBeforeAfterAck* >( lpPktBase );
CDialog* LogDlg = static_cast< CDialog* >( GET_WINDOW( IDD_TADMINUSELOGDLG ) );
LogDlg->SetDlgItemText(IDC_TADMINDETAILUSELOGBEFOREEDIT, CONV_CLISTR(lpPktBeforeAfter->m_szBefore));
LogDlg->SetDlgItemText(IDC_TADMINDETAILUSELOGAFTEREDIT, CONV_CLISTR(lpPktBeforeAfter->m_szAfter));
return true;
}
// 상세로그 리스트 Ack
bool CClientDispatch::PktDetailLogAck( PktBase* lpPktBase )
{
PktAdminMgr::PktDetailLogAck* lpPktDetailLog = static_cast<PktAdminMgr::PktDetailLogAck*>(lpPktBase);
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_TADMINUSELOGDLG));
if(NULL == lpDialog)
return true;
CListCtrl* lpListCtrl = static_cast<CListCtrl*>(lpDialog->GetDlgItem(IDC_TADMINDETAILUSELOGLIST));
if(NULL == lpListCtrl)
return true;
int ItemCount = lpListCtrl->GetItemCount();
TCHAR LogID[65], LogType[10];
_itot(lpPktDetailLog->m_UpdateType, LogType, 10);
_itot(lpPktDetailLog->m_DetailLogID, LogID, 10);
lpListCtrl->InsertItem(ItemCount, LogID);
lpListCtrl->SetItemText(ItemCount, 1, CONV_CLISTR(lpPktDetailLog->m_UpdateDate));
lpListCtrl->SetItemText(ItemCount, 2, LogType);
return true;
}
// 지워진 캐릭터리스트 목록
bool CClientDispatch::PktDelCharListAck( PktBase* lpPktBase )
{
PktAdminMgr::PktDelCharListAck* lpPktAck = static_cast<PktAdminMgr::PktDelCharListAck*>(lpPktBase);
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_CHARRESTOREDLG));
if(NULL != lpDialog)
{
CListCtrl* lpList = static_cast<CListCtrl*>(lpDialog->GetDlgItem(IDC_CR_DELHISTORYLIST));
if(NULL != lpList)
{
CString strForFormat;
strForFormat.Format(_T("%d"), lpPktAck->m_dwUID);
lpList->InsertItem(0, strForFormat);
strForFormat.Format(_T("%d"), lpPktAck->m_dwCID);
lpList->SetItemText(0, 1, strForFormat);
strForFormat.Format(_T("%d"), lpPktAck->m_cNewServerGroupID);
lpList->SetItemText(0, 2, strForFormat);
strForFormat.Format(_T("%d"), lpPktAck->m_cOldServerGroupID);
lpList->SetItemText(0, 3, strForFormat);
lpList->SetItemText(0, 4, CONV_CLISTR(lpPktAck->m_szCharName));
strForFormat.Format(_T("%d"), lpPktAck->m_nLevel);
lpList->SetItemText(0, 5, strForFormat);
strForFormat.Format(_T("%u"), lpPktAck->m_dwGold);
lpList->SetItemText(0, 6, strForFormat);
lpList->SetItemText(0, 7, CONV_CLISTR(lpPktAck->m_szInsertTime));
lpList->SetItemText(0, 8, CONV_CLISTR(lpPktAck->m_szDeleteTime));
}
}
return true;
}
// 사용사유 Ack
bool CClientDispatch::PktGetExitLogAck(PktBase* lpPktBase)
{
PktAdminMgr::PktGetExitLogAck* lpPktExitLog = static_cast<PktAdminMgr::PktGetExitLogAck*>(lpPktBase);
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_TADMINUSELOGDLG));
if(NULL != lpDialog)
{
lpDialog->SetDlgItemText(IDC_TADMINUSELOGREASON,
CONV_CLISTR(lpPktExitLog->m_szExitLog));
}
return true;
}
// 로그 리스트 Ack
bool CClientDispatch::PktLogListAck(PktBase* lpPktBase)
{
PktAdminMgr::PktLogListAck* lpLogListAck = static_cast< PktAdminMgr::PktLogListAck* >( lpPktBase );
CDialog* CAdminLogDlg = static_cast<CDialog*>(GET_WINDOW(IDD_TADMINUSELOGDLG));
if(NULL == CAdminLogDlg)
return true;
CListCtrl* LogList = static_cast<CListCtrl*>(CAdminLogDlg->GetDlgItem(IDC_TADMINUSELOGLIST));
int ItemCount = LogList->GetItemCount();
TCHAR LogID[65];
_itot(lpLogListAck->m_LogID, LogID, 10);
LogList->InsertItem(ItemCount, LogID);
LogList->SetItemText(ItemCount, 1, CONV_CLISTR(lpLogListAck->m_Login));
if(_tcslen(CONV_CLISTR(lpLogListAck->m_Logout)))
{
LogList->SetItemText(ItemCount, 2, CONV_CLISTR(lpLogListAck->m_Logout));
}
else
{
LogList->SetItemText(ItemCount, 2, _T("Connected..."));
}
LogList->SetItemText(ItemCount, 3, CONV_CLISTR(lpLogListAck->m_UseIP));
return true;
}
// 관리자 레벨 변경 ACK
bool CClientDispatch::PktUpdateLevelAck( PktBase* lpPktBase )
{
PktAdminMgr::PktUpdateLevel* lpPktUpdateLevelAck = static_cast< PktAdminMgr::PktUpdateLevel* >( lpPktBase );
CDialog* ManagementDlg = static_cast< CDialog* >( GET_WINDOW( IDD_TADMINMANAGEMENTDLG ) );
if( ManagementDlg != NULL )
{
LVFINDINFO Info;
int Index;
CListCtrl* RegAdminz = static_cast< CListCtrl* >( ManagementDlg->GetDlgItem(IDC_TADMINLIST));
Info.flags = LVFI_PARTIAL | LVFI_STRING;
Info.psz = CONV_CLISTR(lpPktUpdateLevelAck->m_szAccount);
Index = RegAdminz->FindItem(&Info);
if(Index != -1)
{
RegAdminz->SetItemText(Index, 2,
GetAdminLVName(lpPktUpdateLevelAck->m_szLevel));
}
}
return true;
}
// 관리자 접속 IP변경 ACK
bool CClientDispatch::PktUpdateIPAck( PktBase* lpPktBase )
{
PktAdminMgr::PktUpdateIP* lpIPAck = static_cast< PktAdminMgr::PktUpdateIP* >( lpPktBase );
CDialog* ManagementDlg = static_cast< CDialog* >( GET_WINDOW( IDD_TADMINMANAGEMENTDLG ) );
if( ManagementDlg != NULL )
{
LVFINDINFO Info;
int Index;
CListCtrl* RegAdminz = static_cast< CListCtrl* >( ManagementDlg->GetDlgItem( IDC_TADMINLIST ) );
Info.flags = LVFI_PARTIAL | LVFI_STRING;
Info.psz = CONV_CLISTR(lpIPAck->m_szAccount);
Index = RegAdminz->FindItem( &Info );
if( Index != -1 )
{
RegAdminz->SetItemText( Index, 3, CONV_CLISTR(lpIPAck->m_szIP) );
}
}
return true;
}
// 관리자 계정 삭제 ACK
bool CClientDispatch::PktDelAdminAck(PktBase* lpPktBase)
{
PktAdminMgr::PktDelAdmin* lpPktDelAdmin =
static_cast<PktAdminMgr::PktDelAdmin*>(lpPktBase);
CDialog* ManagementDlg = static_cast<CDialog*>(GET_WINDOW(IDD_TADMINMANAGEMENTDLG));
if (ManagementDlg != NULL)
{
LVFINDINFO Info;
int Index;
CListCtrl* RegAdminz = static_cast<CListCtrl*>(ManagementDlg->GetDlgItem(IDC_TADMINLIST));
Info.flags = LVFI_PARTIAL | LVFI_STRING;
Info.psz = CONV_CLISTR(lpPktDelAdmin->m_szAccount);
Index = RegAdminz->FindItem(&Info);
if (Index != -1)
RegAdminz->DeleteItem(Index);
}
return true;
}
// 캐릭터 정보 가져오기 오류 ACK
void CClientDispatch::ResultErrModifyCharacter(PktBase* lpPktBase)
{
PktAdminMgr::PktResultAck* lpResult = static_cast<PktAdminMgr::PktResultAck*>(lpPktBase);
unsigned long* dwRequest = reinterpret_cast<unsigned long*>(lpResult + 1);
CCharacterDoc::CharDocInfo* CharDocument =
CCharacterDoc::GetInstance().GetCharDocInfo(*dwRequest);
if (NULL != CharDocument)
{
CharDocument->m_cCharacterState = CCharacterDoc::CharDocInfo::FINISH;
CharDocument->ReleaseCharacter();
CharDocument->m_ModifyDocument->SetTitle(_T("UNLOADED"));
CharInfoParseFinish(CharDocument);
// MDI 자식윈도우들 아이콘 변경... 나중에 추가하자..
/*POSITION POS = CharDocument->m_ModifyDocument->GetFirstViewPosition();
CView* lpView = CharDocument->m_ModifyDocument->GetNextView(POS);
if (NULL != lpView)
{
CFrameWnd* lpFrame = lpView->GetParentFrame();
lpFrame->SetIcon(AfxGetApp()->LoadIcon(IDI_BLOCK), true);
}*/
}
}
// 캐릭터 복구 ACK
bool CClientDispatch::PktCharRestoreAck(PktBase* lpPktBase)
{
PktAdminMgr::PktCharRestoreAck* lpPktAck = static_cast<PktAdminMgr::PktCharRestoreAck*>(lpPktBase);
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_CHARRESTOREDLG));
if (NULL == lpDialog)
{
return true;
}
CListCtrl* lpList = static_cast<CListCtrl*>(lpDialog->GetDlgItem(IDC_CR_DELHISTORYLIST));
TCHAR szUID[64], szCID[64], szNewServerGroupID[64], szOldServerGroupID[64];
_sntprintf(szUID, sizeof(szUID), _T("%d"), lpPktAck->m_dwUID);
_sntprintf(szCID, sizeof(szCID), _T("%d"), lpPktAck->m_dwCID);
_sntprintf(szNewServerGroupID, sizeof(szNewServerGroupID), _T("%d"), lpPktAck->m_cNewServerGroupID);
_sntprintf(szOldServerGroupID, sizeof(szOldServerGroupID), _T("%d"), lpPktAck->m_cOldServerGroupID);
for(int cnt = 0; cnt < lpList->GetItemCount(); cnt ++) // 무식검색
{
CString strUID = lpList->GetItemText(cnt, 0);
CString strCID = lpList->GetItemText(cnt, 1);
CString strNewServerGroupID = lpList->GetItemText(cnt, 2);
CString strOldServerGroupID = lpList->GetItemText(cnt, 3);
if((!_tcsicmp(strUID, szUID)) && (!_tcsicmp(strCID, szCID))
&& (!_tcsicmp(strNewServerGroupID, szNewServerGroupID))
&& (!_tcsicmp(strNewServerGroupID, szNewServerGroupID)))
{
lpList->DeleteItem(cnt);
break;
}
}
return true;
}
// 각종 아이템 컨테이너 초기화 ACK
bool CClientDispatch::PktItemResetAck(PktBase* lpPktBase)
{
PktAdminMgr::PktItemResetAck* lpPktItemResetAck =
static_cast<PktAdminMgr::PktItemResetAck*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDocument =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktItemResetAck->m_dwRequest);
if (NULL != lpCharDocument)
{
CModifyCharacter* lpCharacter = lpCharDocument->m_ModifyCharacter;
if (NULL != lpCharacter)
{
switch(lpPktItemResetAck->m_cTakePos)
{
case TakeType::TS_DEPOSIT:
{
Item::CDepositContainer& Deposit = lpCharacter->GetDeposit();
for(int iMaxTab = 0; iMaxTab < Deposit.GetMaxTabNum(); ++iMaxTab)
{
Deposit.GetTab(iMaxTab)->ClearItems();
}
}
break;
case TakeType::TS_INVEN:
lpCharacter->GetInventory().ClearItems();
break;
case TakeType::TS_EQUIP:
lpCharacter->GetEquipments().ClearItems();
break;
case TakeType::TS_TEMPINVEN:
lpCharacter->GetTempInven().ClearItems();
break;
case TakeType::TS_EXTRA:
lpCharacter->GetExtra().ClearItems();
break;
}
CharInfoParseFinish(lpCharDocument);
}
}
return true;
}
// 등록되어있는 운영툴 계정 리스트 Ack
bool CClientDispatch::PktAdminListAck(PktBase* lpPktBase)
{
PktAdminMgr::PktAdminListAck* lpPktAdminListAck = static_cast<PktAdminMgr::PktAdminListAck*>(lpPktBase);
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_TADMINMANAGEMENTDLG));
if (NULL != lpDialog)
{
CListCtrl* ctrlAdminList = static_cast<CListCtrl*>(lpDialog->GetDlgItem(IDC_TADMINLIST));
ctrlAdminList->InsertItem(0, CONV_CLISTR(lpPktAdminListAck->m_szAccount),
GetAdminLVIconIndex(lpPktAdminListAck->m_szLevel));
ctrlAdminList->SetItemText(0, 1, CONV_CLISTR(lpPktAdminListAck->m_szName));
ctrlAdminList->SetItemText(0, 2, GetAdminLVName(lpPktAdminListAck->m_szLevel));
ctrlAdminList->SetItemText(0, 3, CONV_CLISTR(lpPktAdminListAck->m_szIP));
ctrlAdminList->SetItemText(0, 4, CONV_CLISTR(lpPktAdminListAck->m_szDate));
}
return true;
}
// 블록된 계정 리스트 ACK
bool CClientDispatch::PktSearchBlockAck(PktBase* lpPktBase)
{
PktAdminMgr::PktSearchBlockAck* lpBlockedListAck =
static_cast<PktAdminMgr::PktSearchBlockAck*>(lpPktBase);
CDialog* lpBlockManageDlg = static_cast<CDialog*>(GET_WINDOW(IDD_BLOCKEDLISTDLG));
if (NULL != lpBlockManageDlg)
{
CListCtrl* lpListCtrl = static_cast<CListCtrl*>(lpBlockManageDlg->GetDlgItem(IDC_BLOCKEDLIST));
int nInsertRow = lpListCtrl->GetItemCount();
CString strFormat;
strFormat.Format(_T("%d"), lpBlockedListAck->m_nidx);
lpListCtrl->InsertItem(0, strFormat);
CCharacterDoc::GetInstance().GetServerName((unsigned long)lpBlockedListAck->m_cServerGroup, strFormat);
lpListCtrl->SetItemText(0, 1, strFormat);
strFormat.Format(_T("%u"), lpBlockedListAck->m_dwUID);
lpListCtrl->SetItemText(0, 2, strFormat);
lpListCtrl->SetItemText(0, 3, lpBlockedListAck->m_szClientID);
lpListCtrl->SetItemText(0, 4, lpBlockedListAck->m_szCharacterName);
strFormat.Format(_T("%d"), lpBlockedListAck->m_cBlockTarget);
lpListCtrl->SetItemText(0, 5, strFormat);
strFormat.Format(_T("%d"), lpBlockedListAck->m_cBlockTerm);
lpListCtrl->SetItemText(0, 6, strFormat);
lpListCtrl->SetItemText(0, 7, lpBlockedListAck->m_szBlockStartTime);
lpListCtrl->SetItemText(0, 8, lpBlockedListAck->m_szBlockFinishTime);
lpListCtrl->SetItemText(0, 9, lpBlockedListAck->m_szAdminName);
lpListCtrl->SetItemText(0, 10, lpBlockedListAck->m_szDescription);
}
return true;
}
// 검색 결과 Ack
bool CClientDispatch::PktSearchResultAck(PktBase* lpPktBase)
{
PktAdminMgr::PktSearchResultAck* lpPktResult =
static_cast<PktAdminMgr::PktSearchResultAck*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDocInfo =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktResult->m_dwRequestKey);
if(NULL != lpCharDocInfo)
{
if(lpPktResult->m_Result == PktAdminMgr::PktSearchResultAck::Success)
{
CUserInfoDoc* Doc = static_cast <CUserInfoDoc*>(theApp.NewUserDocument());
Doc->SetUserInfo(lpCharDocInfo);
}
else if(lpPktResult->m_Result == PktAdminMgr::PktSearchResultAck::NoData)
{
if (CCharacterDoc::GetInstance().DeleteCharDocInfo(lpPktResult->m_dwRequestKey))
{
Report(GetLocalString("MSG_0072"), GENERAL);
}
}
}
return true;
}
// 인벤토리 소지금 변경 Ack
bool CClientDispatch::PktInvenGold(PktBase* lpPktBase)
{
PktAdminMgr::PktInvenGold* lpPktInvenGold = static_cast<PktAdminMgr::PktInvenGold*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDocument =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktInvenGold->m_dwRequest);
if(NULL != lpCharDocument)
{
CModifyCharacter* lpCharacter = lpCharDocument->m_ModifyCharacter;
if(NULL != lpCharacter)
{
lpCharacter->SetGold(lpPktInvenGold->m_dwGold);
CharInfoParseFinish(lpCharDocument);
}
}
return true;
}
// 캐릭터 검색 ack
bool CClientDispatch::PktSearchAck(PktBase* lpPktBase)
{
PktAdminMgr::PktSearchAck* lpPktSearchAck = static_cast<PktAdminMgr::PktSearchAck*>(lpPktBase);
char* In_CharPos = reinterpret_cast<char*>(lpPktSearchAck + 1);
CCharacterDoc::CharDocInfo* lpCharDoc =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktSearchAck->m_dwRequestKey);
if(NULL != lpCharDoc)
{
CCharacterDoc::In_ServerCharacter lpServChar;
ZeroMemory(&lpServChar, sizeof(CCharacterDoc::In_ServerCharacter));
lpServChar.dwCharCount = lpPktSearchAck->m_CharCount;
lpServChar.dwServerGroup = lpPktSearchAck->m_dwServerGroup;
lpCharDoc->m_cOldServerGroup = lpPktSearchAck->m_cOldServerGroup;
for(int CharCount = 0; CharCount < lpPktSearchAck->m_CharCount; CharCount++)
{
int nPos = sizeof(CCharacterDoc::In_CharacterIndex) * CharCount;
CCharacterDoc::In_CharacterIndex* lpChar =
reinterpret_cast<CCharacterDoc::In_CharacterIndex*>(In_CharPos + nPos);
CopyMemory(lpServChar.CharIdx + CharCount, lpChar, sizeof(CCharacterDoc::In_CharacterIndex));
}
lpCharDoc->m_listTreeInfo.push_back(lpServChar);
}
else
{
// 로그창에 뛰워주던지 암튼 사용자가 알수있도록 하자.
}
return true;
}
// 캐릭터 정보요청 ACK
bool CClientDispatch::PktGetCharacterAck(PktBase* lpPktBase)
{
PktAdminMgr::PktGetCharacterAck* lpPktGetCharacterAck =
static_cast<PktAdminMgr::PktGetCharacterAck*>(lpPktBase);
unsigned long dwUID = lpPktGetCharacterAck->m_dwUID;
unsigned long dwCID = lpPktGetCharacterAck->m_dwCID;
unsigned long dwRequestKey = lpPktGetCharacterAck->m_dwRequestKey;
CCharacterDoc::CharDocInfo* CharDocument =
CCharacterDoc::GetInstance().GetCharDocInfo(dwRequestKey);
char* In_DataBuffer = reinterpret_cast<char*>(lpPktGetCharacterAck + 1);
unsigned short uExtraPktLen = lpPktGetCharacterAck->GetLen() - sizeof(PktAdminMgr::PktGetCharacterAck);
bool bResult = true;
CModifyCharacter* lpModifyChar = CharDocument->m_ModifyCharacter;
CString strWindowTitle;
if(NULL == CharDocument)
{
Report(GetLocalString("MSG_0073"), FAILED);
return true;
}
switch(lpPktGetCharacterAck->m_cType)
{
case PktAdminMgr::PktGetCharacterAck::Type::CHAR_BASIC_DATA:
{
lpModifyChar = CharDocument->Createcharacter();
bResult = Parser.PARSE_CHAR_BASIC_DATA(lpModifyChar, In_DataBuffer);
}
break;
case PktAdminMgr::PktGetCharacterAck::Type::CHAR_EXTRA_DATA:
{
bResult = Parser.PARSE_CHAR_EXTRA_DATA(lpModifyChar, In_DataBuffer);
}
break;
case PktAdminMgr::PktGetCharacterAck::Type::CHAR_FRIEND_DATA:
{
bResult = Parser.PARSE_CHAR_FRIEND_DATA(lpModifyChar, In_DataBuffer, uExtraPktLen);
}
break;
case PktAdminMgr::PktGetCharacterAck::Type::CHAR_BAN_DATA:
{
bResult = Parser.PARSE_CHAR_BAN_DATA(lpModifyChar, In_DataBuffer, uExtraPktLen);
}
break;
case PktAdminMgr::PktGetCharacterAck::Type::STORE_12_DATA:
{
bResult = Parser.PARSE_STORE_12_DATA(lpModifyChar, In_DataBuffer);
}
break;
case PktAdminMgr::PktGetCharacterAck::Type::STORE_34_DATA:
{
bResult = Parser.PARSE_STORE_34_DATA(lpModifyChar, In_DataBuffer);
}
break;
case PktAdminMgr::PktGetCharacterAck::Type::FINISH_GET_DATA:
{
lpModifyChar->SetUID(lpPktGetCharacterAck->m_dwUID);
lpModifyChar->SetCID(lpPktGetCharacterAck->m_dwCID);
lpModifyChar->SetServerGroup(lpPktGetCharacterAck->m_dwServerGroup);
lpModifyChar->SetOldServerGroup(lpPktGetCharacterAck->m_cOldServerGroupID);
strWindowTitle.Format(GetLocalString("FORMAT_001"),
lpModifyChar->GetUID(), lpModifyChar->GetCID(), lpModifyChar->GetName());
CharDocument->m_ModifyDocument->SetTitle(strWindowTitle);
CharDocument->m_cCharacterState = CCharacterDoc::CharDocInfo::FINISH;
CharInfoParseFinish(CharDocument);
// 계정 국가까지 얻은 다음에 CharInfoParseFinish!
CPacketMgr::GetInstance()->SendPktUserNation(
lpModifyChar->GetClientKey(), lpModifyChar->GetServerGroup(),
lpModifyChar->GetUID(), lpModifyChar->GetCID());
}
break;
}
if(!bResult)
{
TCHAR szReport[1024];
_sntprintf(szReport, sizeof(szReport), GetLocalString("ADDED_STRING_053"), lpPktGetCharacterAck->m_cType);
CharDocument->ReleaseCharacter();
CharDocument->m_cCharacterState = CCharacterDoc::CharDocInfo::EMPTY;
Report(szReport, FAILED);
}
return true;
}
// 캐릭터 창고 동기화 ACK
bool CClientDispatch::PktSyncDeposit( PktBase* lpPktBase )
{
PktAdminMgr::PktSyncDeposit* lpPktSyncDeposit = static_cast< PktAdminMgr::PktSyncDeposit* >( lpPktBase );
char* lpDepositBuffer = reinterpret_cast< char* >( lpPktSyncDeposit + 1 );
CCharacterDoc::CharDocInfo* lpCharDocument = CCharacterDoc::GetInstance( ).GetCharDocInfo( lpPktSyncDeposit->m_dwRequestID );
CModifyCharacter* lpCharacter = lpCharDocument->m_ModifyCharacter;
if(NULL != lpCharacter)
{
Item::CDepositContainer& SyncContainer = lpCharacter->GetDeposit();
unsigned long dwCID = lpCharacter->GetCID();
switch(lpPktSyncDeposit->m_cType)
{
case PktAdminMgr::PktSyncDeposit::Tab12:
SyncContainer.GetTab(0)->ClearItems();
SyncContainer.GetTab(1)->ClearItems();
Parser.PARSE_STORE_12_DATA(lpCharacter, lpDepositBuffer);
break;
case PktAdminMgr::PktSyncDeposit::Tab34:
SyncContainer.GetTab(2)->ClearItems();
SyncContainer.GetTab(3)->ClearItems();
Parser.PARSE_STORE_34_DATA(lpCharacter, lpDepositBuffer);
break;
}
CharInfoParseFinish(lpCharDocument);
}
else
{
Report(GetLocalString("MSG_0075"), FAILED);
}
return true;
}
// 캐릭터 정보 파싱 완료
bool CClientDispatch::CharInfoParseFinish(CCharacterDoc::CharDocInfo *lpCharDocInfo)
{
CView* pView;
POSITION pos = lpCharDocInfo->m_ModifyDocument->GetFirstViewPosition();
while (pos != NULL)
{
pView = lpCharDocInfo->m_ModifyDocument->GetNextView(pos);
if((pView->IsKindOf(RUNTIME_CLASS(CCharSheetView)))) break;
}
CCharSheetView* pSheetView = static_cast<CCharSheetView*>(pView);
if (NULL != pSheetView && NULL != lpCharDocInfo->m_ModifyCharacter)
{
lpCharDocInfo->m_ModifyCharacter->CalculateStatusData(true);
pSheetView->SetCharSheetInfo(lpCharDocInfo->m_dwDocKey, lpCharDocInfo->m_ModifyCharacter);
lpCharDocInfo->m_bLoaded = true;
}
else
{
lpCharDocInfo->m_bLoaded = false;
}
return true;
}
// 캐릭터 세션 닫기 ACK
bool CClientDispatch::PktCloseCharacterAck(PktBase* lpPktBase)
{
PktAdminMgr::PktCloseCharacterAck* lpPktCloseCharacterAck =
static_cast<PktAdminMgr::PktCloseCharacterAck*>(lpPktBase);
Report(GetLocalString("MSG_0076"), SUCCESS);
return true;
}
// 아이템 생성 ACK
bool CClientDispatch::PktCreateItemAck(PktBase* lpPktBase)
{
PktAdminMgr::PktCreateItemAck* lpPktCreateItem = static_cast<PktAdminMgr::PktCreateItemAck*>(lpPktBase);
CCharacterDoc::CharDocInfo* CharDocument =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktCreateItem->m_dwRequestKey);
if( NULL != CharDocument )
{
CModifyCharacter* lpModifyCharacter = CharDocument->m_ModifyCharacter;
unsigned long dwUID = lpPktCreateItem->m_dwUID;
unsigned long dwCID = lpPktCreateItem->m_dwCID;
if(NULL != lpModifyCharacter)
{
if((dwUID == lpModifyCharacter->GetUID()) && (dwCID == lpModifyCharacter->GetCID()))
{
Item::CItem* lpItem = Item::CItemFactory::GetInstance().CreateItem(lpPktCreateItem->m_PrototypeID);
if(NULL != lpItem)
{
lpItem->SetNumOrDurability(lpPktCreateItem->m_CreateItemInfo.m_cNumOrDurability);
Item::CEquipment* lpEquipment = Item::CEquipment::DowncastToEquipment(lpItem);
if( NULL != lpEquipment )
{
static_cast<CModifyEquipment*>(lpEquipment)->AdjustData(lpPktCreateItem->m_CreateItemInfo);
}
static_cast< CModifyItem* >( lpItem )->SetUID( lpPktCreateItem->m_ItemID );
unsigned char cTakePos = lpPktCreateItem->m_CreateItemInfo.m_cTakePos;
unsigned char cXPos = lpPktCreateItem->m_CreateItemInfo.m_cXPos;
unsigned char cYPos = lpPktCreateItem->m_CreateItemInfo.m_cYPos;
unsigned char cZPos = lpPktCreateItem->m_CreateItemInfo.m_cZPos;
Item::ItemPos ItemPos = ItemData::MakeItemPos( cTakePos, cXPos, cYPos, cZPos );
lpModifyCharacter->GetInventory().SetAdminTool();
if (false == lpModifyCharacter->SetItem(ItemPos, lpItem))
{
MessageBox(NULL, _T("Error MountItem"), _T("Err"), MB_OK);
}
CharInfoParseFinish(CharDocument);
}
}
}
}
return true;
}
// 아이템 정보변경 ACK
bool CClientDispatch::PktUpdateItemAck(PktBase* lpPktBase)
{
PktAdminMgr::PktUpdateItemAck* lpUpdateAck = static_cast<PktAdminMgr::PktUpdateItemAck*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDocument =
CCharacterDoc::GetInstance().GetCharDocInfo(lpUpdateAck->m_dwRequestKey);
if(NULL != lpCharDocument)
{
CModifyCharacter* lpCharacter = lpCharDocument->m_ModifyCharacter;
if(NULL != lpCharacter)
{
unsigned char cTakePos = lpUpdateAck->m_UpdataItemInfo.m_cTakePos;
unsigned char cXPos = lpUpdateAck->m_UpdataItemInfo.m_cXPos;
unsigned char cYPos = lpUpdateAck->m_UpdataItemInfo.m_cYPos;
unsigned char cZPos = lpUpdateAck->m_UpdataItemInfo.m_cZPos;
Item::ItemPos ItemPos = ItemData::MakeItemPos(cTakePos, cXPos, cYPos, cZPos);
Item::CItem* lpItem = lpCharacter->GetItem(ItemPos);
if(NULL != lpItem)
{
lpItem->SetNumOrDurability(lpUpdateAck->m_UpdataItemInfo.m_cNumOrDurability);
Item::CEquipment* lpEquipment = Item::CEquipment::DowncastToEquipment(lpItem);
if(NULL != lpEquipment)
{
static_cast<CModifyEquipment*>(lpEquipment)->AdjustData(lpUpdateAck->m_UpdataItemInfo);
}
}
CharInfoParseFinish(lpCharDocument);
}
}
return true;
}
// 아이템 삭제 ACK
bool CClientDispatch::PktRemoveItemAck(PktBase* lpPktBase)
{
PktAdminMgr::PktRemoveItemAck* lpRemoveItem = static_cast<PktAdminMgr::PktRemoveItemAck*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDocument =
CCharacterDoc::GetInstance().GetCharDocInfo(lpRemoveItem->m_dwRequestKey);
if(NULL != lpCharDocument)
{
CModifyCharacter* lpCharacter = lpCharDocument->m_ModifyCharacter;
if(NULL != lpCharacter)
{
unsigned char cTaskPos = lpRemoveItem->m_cTakePos;
unsigned char cXPos = lpRemoveItem->m_cXPos;
unsigned char cYPos = lpRemoveItem->m_cYPos;
unsigned char cZPos = lpRemoveItem->m_cZPos;
unsigned __int64 ItemUID = lpRemoveItem->m_ItemUID;
unsigned short PrototypeID = lpRemoveItem->m_ItemPrototypeID;
Item::ItemPos ItemPos = ItemData::MakeItemPos(cTaskPos, cXPos, cYPos, cZPos);
Item::CItem* lpItem = lpCharacter->GetItem(ItemPos);
if(NULL != lpItem)
{
if((lpItem->GetUID() == ItemUID) && (lpItem->GetPrototypeID() == PrototypeID))
{
lpCharacter->GetInventory().SetAdminTool();
if (true == lpCharacter->RemoveItem(ItemPos))
{
DELETE_ITEM(lpItem);
CharInfoParseFinish(lpCharDocument);
}
else
{
Report(GetLocalString("MSG_0077"), FAILED);
}
}
else
{
Report(GetLocalString("MSG_0078"), FAILED);
}
}
else
{
Report(GetLocalString("MSG_0079"), FAILED);
}
}
}
return true;
}
// 스킬 변경 ACK
bool CClientDispatch::PktSkillEditAck(PktBase* lpPktBase)
{
PktAdminMgr::PktSkillEdit* lpPktSkillEditAck = static_cast<PktAdminMgr::PktSkillEdit*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDocument =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktSkillEditAck->m_dwRequest);
if(NULL != lpCharDocument)
{
CModifyCharacter* lpCharacter = lpCharDocument->m_ModifyCharacter;
if(NULL != lpCharacter)
{
unsigned char cResult = PktAdminMgr::PktSkillEdit::FAILED;
unsigned short wSkillID = lpPktSkillEditAck->m_wSkillID;
char cLevel = lpPktSkillEditAck->m_SkillLevel;
char cLockCount = lpPktSkillEditAck->m_SkillLockCount;
switch(lpPktSkillEditAck->m_cType)
{
case PktAdminMgr::PktSkillEdit::Create:
cResult = lpCharacter->AppendSkill(wSkillID, cLevel, cLockCount);
break;
case PktAdminMgr::PktSkillEdit::Edit:
cResult = lpCharacter->AppendSkill(wSkillID, cLevel, cLockCount);
break;
case PktAdminMgr::PktSkillEdit::Delete:
cResult = lpCharacter->DeleteSkill(wSkillID, cLevel, cLockCount);
break;
}
if(cResult = PktAdminMgr::PktSkillEdit::SUCCESS)
{
CharInfoParseFinish(lpCharDocument);
}
else
{
Report(GetLocalString("MSG_0080"), FAILED);
}
}
}
return true;
}
bool CClientDispatch::PktCancelExecuteQuest(PktBase* lpPktBase)
{
PktAdminMgr::PktCancelExecuteQuest* lpPktCancelExecuteQuest =
static_cast<PktAdminMgr::PktCancelExecuteQuest*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDoc =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktCancelExecuteQuest->m_dwRequestKey);
if (NULL != lpCharDoc)
{
CModifyCharacter* lpCharacter = lpCharDoc->m_ModifyCharacter;
if (true == lpCharacter->CancelQuest(lpPktCancelExecuteQuest->m_wQuestID, true))
{
CharInfoParseFinish(lpCharDoc);
}
else
{
Report(GetLocalString("MSG_0185"), FAILED);
}
}
return true;
}
bool CClientDispatch::PktDeleteHistoryQuest(PktBase* lpPktBase)
{
PktAdminMgr::PktDeleteHistoryQuest* lpPktDeleteHistoryQuest =
static_cast<PktAdminMgr::PktDeleteHistoryQuest*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDoc =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktDeleteHistoryQuest->m_dwRequestKey);
if (NULL != lpCharDoc)
{
CModifyCharacter* lpCharacter = lpCharDoc->m_ModifyCharacter;
if (true == lpCharacter->DeleteHistoryQuest(lpPktDeleteHistoryQuest->m_wQuestID))
{
CharInfoParseFinish(lpCharDoc);
}
else
{
Report(GetLocalString("MSG_0185"), FAILED);
}
}
return true;
}
bool CClientDispatch::PktUserNation(PktBase* lpPktBase)
{
PktAdminMgr::PktUserNation* lpPktUserNation =
static_cast<PktAdminMgr::PktUserNation*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDoc =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktUserNation->m_dwRequestKey);
if (NULL != lpCharDoc)
{
lpCharDoc->m_ModifyCharacter->SetUserNation(lpPktUserNation->m_cNation);
CharInfoParseFinish(lpCharDoc);
Report(GetLocalString("MSG_0074"), SUCCESS);
}
return true;
}
// 캐릭터 이름변경 ACK
bool CClientDispatch::PktChangeNameAck(PktBase* lpPktBase)
{
PktAdminMgr::PktChangeName* lpPktChangeName = static_cast<PktAdminMgr::PktChangeName*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDocument =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktChangeName->m_dwRequest);
if(NULL != lpCharDocument)
{
CCharacterDoc::In_CharacterIndex* lpCharIdx =
lpCharDocument->GetSrvChar(lpPktChangeName->m_dwServerGroup, lpPktChangeName->m_dwCID);
if(NULL != lpCharIdx)
{
CUserCharTreeView* lpTreeView;
POSITION Pos = lpCharDocument->m_ModifyDocument->GetFirstViewPosition();
lpTreeView = static_cast<CUserCharTreeView*>(lpCharDocument->m_ModifyDocument->GetNextView(Pos));
CTreeCtrl* lpTree = static_cast<CTreeCtrl*>(lpTreeView->GetDlgItem(IDC_CHARTREE));
HTREEITEM hItem = lpTree->GetSelectedItem();
if(NULL != hItem)
{
TCHAR szCharNode[255];
_sntprintf(szCharNode, sizeof(szCharNode), _T("%d %s"),
lpPktChangeName->m_dwCID, GetLocalString("MSG_0171"));
lpTree->SetItemText(hItem, szCharNode);
}
}
}
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_MODIFYCHARNAMEDLG));
if(NULL != lpDialog)
{
lpDialog->EndDialog(true);
}
CString strKey;
switch(lpPktChangeName->m_dwUID) // 원래 UID인데 그냥 에러 타입 받는걸로 사용;
{
case PktCharNameChange::ERR_ALREADY_USE_NAME: strKey = _T("MSG_0172"); break;
case PktCharNameChange::ERR_CANNOT_FIND_CHARACTER: strKey = _T("MSG_0173"); break;
case PktCharNameChange::ERR_CANNOT_USE_NAME: strKey = _T("MSG_0174"); break;
case PktCharNameChange::ERR_INVALID_NAME: strKey = _T("MSG_0175"); break;
case PktCharNameChange::ERR_NAMECHANGE_ITEM: strKey = _T("MSG_0176"); break;
case PktCharNameChange::ERR_SERVER: strKey = _T("MSG_0177"); break;
default: strKey = _T("MSG_0178"); break;
}
Report(GetLocalString(strKey), FAILED);
return true;
}
// 관리자 창고아이템 삭제 ACK
bool CClientDispatch::PktAdminStoreDeleteAck(PktBase* lpPktBase)
{
PktAdminMgr::PktAdminStoreDelete* lpPktAck = static_cast<PktAdminMgr::PktAdminStoreDelete*>(lpPktBase);
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_STATUS_DLGBAR));
CListCtrl* lpList = static_cast<CListCtrl*>(lpDialog->GetDlgItem(IDC_ADMINSTORELIST));
if(NULL != lpList)
{
int ItemCount = lpList->GetItemCount();
TCHAR szStoreUID[100];
_sntprintf(szStoreUID, sizeof(szStoreUID), _T("%d"), lpPktAck->m_dwStoreUID);
for(int cnt = 0;cnt < ItemCount; cnt++)
{
CString strStoreUID = lpList->GetItemText(cnt, 0);
if(!_tcsicmp(strStoreUID, szStoreUID))
{
lpList->DeleteItem(cnt);
break;
}
}
}
return true;
}
// 관리자창고 아이템정보 가져오기 ACK
bool CClientDispatch::PktGetAdminStoreItemAck(PktBase* lpPktBase)
{
PktAdminMgr::PktGetAdminStoreItemAck* lpPktAck =
static_cast<PktAdminMgr::PktGetAdminStoreItemAck*>(lpPktBase);
switch(lpPktAck->m_cType)
{
case PktAdminMgr::PktGetAdminStoreItem::EDIT:
{
AdminStoreItemModify(lpPktAck);
}
break;
case PktAdminMgr::PktGetAdminStoreItem::CREATE:
{
AdminStoreGrabMode(lpPktAck);
}
break;
default:
Report(GetLocalString("MSG_0083"), FAILED);
break;
}
return true;
}
// 운영창고의 아이템을 집기
void CClientDispatch::AdminStoreGrabMode(PktAdminMgr::PktGetAdminStoreItemAck* lpPktAck)
{
CItemManageDlg dlg(CItemManageDlg::CREATE_ADMINSTORE);
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_STATUS_DLGBAR));
CListCtrl* lpList = static_cast<CListCtrl*>(lpDialog->GetDlgItem(IDC_ADMINSTORELIST));
if(NULL != lpList)
{
int ItemSelect = lpList->GetNextItem(-1, LVIS_SELECTED);
if(-1 != ItemSelect)
{
dlg.m_strNewItemName = lpList->GetItemText(ItemSelect, 3);
}
else
{
Report(GetLocalString("MSG_0084"), FAILED);
return;
}
}
g_stMyItemInfo.m_stItemInfo.AdminStore_In(lpPktAck->m_binItemInfo);
g_stMyItemInfo.m_nModeIndex = MyItemInfo::NONE;
g_stMyItemInfo.m_dwStoreUID = lpPktAck->m_dwStoreUID;
dlg.DoModal();
}
// 관리자 아이템창고 정보 수정
void CClientDispatch::AdminStoreItemModify(PktAdminMgr::PktGetAdminStoreItemAck* lpPktAck)
{
CItemManageDlg dlg(CItemManageDlg::EDIT_ADMINSTORE);
CDialog* lpDialog = static_cast<CDialog*>(GET_WINDOW(IDD_STATUS_DLGBAR));
CListCtrl* lpList = static_cast<CListCtrl*>(lpDialog->GetDlgItem(IDC_ADMINSTORELIST));
if(NULL != lpList)
{
int ItemSelect = lpList->GetNextItem(-1, LVIS_SELECTED);
if(-1 < ItemSelect)
{
dlg.m_strNewItemName = lpList->GetItemText(ItemSelect, 3);
}
else
{
Report(GetLocalString("MSG_0084"), FAILED);
return;
}
}
g_stMyItemInfo.m_stItemInfo.AdminStore_In(lpPktAck->m_binItemInfo);
g_stMyItemInfo.m_nModeIndex = MyItemInfo::EDIT_ADMINSTORE;
g_stMyItemInfo.m_dwStoreUID = lpPktAck->m_dwStoreUID;
dlg.DoModal();
}
bool CClientDispatch::PktGuildSearchAck(PktBase* lpPktBase)
{
PktAdminMgr::PktGuildSearchAck* lpGuildSearchAck =
reinterpret_cast<PktAdminMgr::PktGuildSearchAck*>(lpPktBase);
CGuildSearchDlg* lpDialog = static_cast<CGuildSearchDlg*>(GET_WINDOW(IDD_GUILDSEARCH_DLG));
if(NULL != lpDialog)
{
CString strForFormating;
strForFormating.Format(_T("%u"), lpGuildSearchAck->m_dwGID);
lpDialog->m_ctrlGuildSearchList.InsertItem(0, strForFormating);
strForFormating.Format(_T("%d"), lpGuildSearchAck->m_nOldServerID);
lpDialog->m_ctrlGuildSearchList.SetItemText(0, 1, strForFormating);
CCharacterDoc::GetInstance().GetServerName(lpGuildSearchAck->m_dwServerGroup, strForFormating);
lpDialog->m_ctrlGuildSearchList.SetItemText(0, 2, strForFormating);
strForFormating.Format(_T("%s"), GetNationString((int)lpGuildSearchAck->m_dwNation));
lpDialog->m_ctrlGuildSearchList.SetItemText(0, 3, strForFormating);
lpDialog->m_ctrlGuildSearchList.SetItemText(0, 4, CONV_CLISTR(lpGuildSearchAck->m_szName));
strForFormating.Format(_T("%u"), lpGuildSearchAck->m_dwFame);
lpDialog->m_ctrlGuildSearchList.SetItemText(0, 5, strForFormating);
strForFormating.Format(_T("%u"), lpGuildSearchAck->m_dwLevel);
lpDialog->m_ctrlGuildSearchList.SetItemText(0, 6, strForFormating);
strForFormating.Format(_T("%u"), lpGuildSearchAck->m_dwMemberNum);
lpDialog->m_ctrlGuildSearchList.SetItemText(0, 7, strForFormating);
strForFormating.Format(_T("%u"), lpGuildSearchAck->m_dwGold);
lpDialog->m_ctrlGuildSearchList.SetItemText(0, 8, strForFormating);
lpDialog->m_dwSearchCount = lpDialog->m_ctrlGuildSearchList.GetItemCount();
lpDialog->UpdateData(false);
}
return true;
}
bool CClientDispatch::PktRequestGuildMemberListAck(PktBase* lpPktBase)
{
PktAdminMgr::PktRequestGuildMemberListAck* lpGuildMemberList =
reinterpret_cast<PktAdminMgr::PktRequestGuildMemberListAck*>(lpPktBase);
CGuildMainDlg* lpDialog = static_cast<CGuildMainDlg*>(GET_WINDOW(IDD_GUILDMAINDLG));
if(NULL != lpDialog)
{
CString strForFormating;
strForFormating.Format(_T("%u"), lpGuildMemberList->m_dwCID);
lpDialog->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.InsertItem(0, strForFormating);
strForFormating.Format(_T("%d"), lpGuildMemberList->m_nPosition);
lpDialog->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.SetItemText(0, 1, strForFormating);
strForFormating.Format(_T("%d"), lpGuildMemberList->m_nPositionInGuild);
lpDialog->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.SetItemText(0, 2, strForFormating);
strForFormating.Format(_T("%s"), lpGuildMemberList->m_szCharName);
lpDialog->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.SetItemText(0, 3, strForFormating);
strForFormating.Format(_T("%d"), lpGuildMemberList->m_nLevel);
lpDialog->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.SetItemText(0, 4, strForFormating);
strForFormating.Format(_T("%u"), lpGuildMemberList->m_dwFame);
lpDialog->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.SetItemText(0, 5, strForFormating);
strForFormating.Format(_T("%u"), lpGuildMemberList->m_dwGold);
lpDialog->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.SetItemText(0, 6, strForFormating);
strForFormating.Format(_T("%s"), GetClassString(lpGuildMemberList->m_nClass));
lpDialog->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.SetItemText(0, 7, strForFormating);
strForFormating.Format(_T("%s"), lpGuildMemberList->m_szLeaveGuildTime);
lpDialog->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.SetItemText(0, 8, strForFormating);
}
return true;
}
bool CClientDispatch::PktGuildRestoreDataListAck(PktBase* lpPktBase)
{
PktAdminMgr::PktGuildRestoreDataListAck* lpPktGuildRestoreDataListAck =
reinterpret_cast<PktAdminMgr::PktGuildRestoreDataListAck*>(lpPktBase);
CGuildRestoreDlg* lpDialog = static_cast<CGuildRestoreDlg*>(GET_WINDOW(IDD_GUILDRESTOREDLG));
if(NULL != lpDialog)
{
CString strForFormating;
CCharacterDoc::GetInstance().GetServerName(lpPktGuildRestoreDataListAck->m_dwServerGroup, strForFormating);
lpDialog->m_ctrlRestoreGuildList.InsertItem(0, strForFormating);
strForFormating.Format(_T("%u"), lpPktGuildRestoreDataListAck->m_dwGID);
lpDialog->m_ctrlRestoreGuildList.SetItemText(0, 1, strForFormating);
strForFormating.Format(_T("%s"), lpPktGuildRestoreDataListAck->m_szGuildName);
lpDialog->m_ctrlRestoreGuildList.SetItemText(0, 2, strForFormating);
strForFormating.Format(_T("%u"), lpPktGuildRestoreDataListAck->m_dwGold);
lpDialog->m_ctrlRestoreGuildList.SetItemText(0, 3, strForFormating);
strForFormating.Format(_T("%s"), lpPktGuildRestoreDataListAck->m_szDeleteDate);
lpDialog->m_ctrlRestoreGuildList.SetItemText(0, 4, strForFormating);
lpDialog->m_dwSearchCount = lpDialog->m_ctrlRestoreGuildList.GetItemCount();
lpDialog->UpdateData(false);
}
return true;
}
bool CClientDispatch::PktFortSearchAck(PktBase* lpPktBase)
{
PktAdminMgr::PktFortSearchAck* lpFortSearchAck =
reinterpret_cast<PktAdminMgr::PktFortSearchAck*>(lpPktBase);
CFortInfoDlg* lpDialog = static_cast<CFortInfoDlg*>(GET_WINDOW(IDD_FORTINFODLG));
if(NULL != lpDialog)
{
CString strForFormating;
CCharacterDoc::GetInstance().GetServerName(lpFortSearchAck->m_dwServerGroup, strForFormating);
lpDialog->m_ctrlSearchedList.InsertItem(0, strForFormating);
strForFormating.Format(_T("%u"), lpFortSearchAck->m_dwCampID);
lpDialog->m_ctrlSearchedList.SetItemText(0, 1, strForFormating);
strForFormating.Format(_T("%u"), lpFortSearchAck->m_dwGuildID);
lpDialog->m_ctrlSearchedList.SetItemText(0, 2, strForFormating);
lpDialog->m_ctrlSearchedList.SetItemText(0, 3, CONV_CLISTR(lpFortSearchAck->m_szGuildName));
strForFormating.Format(_T("%u"), lpFortSearchAck->m_dwHP);
lpDialog->m_ctrlSearchedList.SetItemText(0, 4, strForFormating);
strForFormating.Format(_T("%s"), GetZoneString(lpFortSearchAck->m_cZone));
lpDialog->m_ctrlSearchedList.SetItemText(0, 5, strForFormating);
strForFormating.Format(_T("%d"), lpFortSearchAck->m_cChannel);
lpDialog->m_ctrlSearchedList.SetItemText(0, 6, strForFormating);
strForFormating = GetSiegeObjectTypeString((int)lpFortSearchAck->m_usObjectType);
lpDialog->m_ctrlSearchedList.SetItemText(0, 7, strForFormating);
strForFormating = GetStateString((int)lpFortSearchAck->m_cState);
lpDialog->m_ctrlSearchedList.SetItemText(0, 8, strForFormating);
strForFormating = GetSubStateString((int)lpFortSearchAck->m_usObjectType, (int)lpFortSearchAck->m_cSubState);
lpDialog->m_ctrlSearchedList.SetItemText(0, 9, strForFormating);
strForFormating.Format(_T("%d"), lpFortSearchAck->m_cUpgradeStep);
lpDialog->m_ctrlSearchedList.SetItemText(0, 10, strForFormating);
lpDialog->m_ctrlSearchedList.SetItemText(0, 11, CONV_CLISTR(lpFortSearchAck->m_szRemainTime));
lpDialog->m_ctrlSearchedList.SetItemText(0, 12, CONV_CLISTR(lpFortSearchAck->m_szLastUseTime));
strForFormating.Format(_T("%s"), GetGuildTitleString(lpFortSearchAck->m_cRight));
lpDialog->m_ctrlSearchedList.SetItemText(0, 13, strForFormating);
strForFormating.Format(_T("%f"), lpFortSearchAck->m_fPosX);
lpDialog->m_ctrlSearchedList.SetItemText(0, 14, strForFormating);
strForFormating.Format(_T("%f"), lpFortSearchAck->m_fPosY);
lpDialog->m_ctrlSearchedList.SetItemText(0, 15, strForFormating);
strForFormating.Format(_T("%f"), lpFortSearchAck->m_fPosZ);
lpDialog->m_ctrlSearchedList.SetItemText(0, 16, strForFormating);
strForFormating.Format(_T("%d"), lpFortSearchAck->m_cMaterial);
lpDialog->m_ctrlSearchedList.SetItemText(0, 17, strForFormating);
strForFormating.Format(_T("%d"), lpFortSearchAck->m_cSiegeCount);
lpDialog->m_ctrlSearchedList.SetItemText(0, 18, strForFormating);
lpDialog->m_dwSearchCount = lpDialog->m_ctrlSearchedList.GetItemCount();
lpDialog->UpdateData(false);
}
return true;
}
bool CClientDispatch::PktMiningCampAck(PktBase* lpPktBase)
{
PktAdminMgr::PktMiningCampAck* lpMiningCampAck =
reinterpret_cast<PktAdminMgr::PktMiningCampAck*>(lpPktBase);
CString strForFormating;
CMiningCampDlg* lpDialog = static_cast<CMiningCampDlg*>(GET_WINDOW(IDD_MININGCAMPDLG));
if(NULL != lpDialog)
{
CString strForFormating;
strForFormating.Format(_T("%u"), lpMiningCampAck->m_dwCampID);
lpDialog->m_ctrlMiningCampList.InsertItem(0, strForFormating);
const Item::ItemInfo* ItemInfo = Item::CItemMgr::GetInstance().GetItemInfo(lpMiningCampAck->m_sMineralID);
strForFormating.Format(_T("%s"), CONV_CLISTR(ItemInfo->m_SpriteData.m_szName));
lpDialog->m_ctrlMiningCampList.SetItemText(0, 1, strForFormating);
strForFormating.Format(_T("%u"), lpMiningCampAck->m_sAmount);
lpDialog->m_ctrlMiningCampList.SetItemText(0, 2, strForFormating);
strForFormating.Format(_T("%d"), lpMiningCampAck->m_cFlag);
lpDialog->m_ctrlMiningCampList.SetItemText(0, 3, strForFormating);
lpDialog->UpdateData(false);
}
return true;
}
bool CClientDispatch::PktShopCampAck(PktBase* lpPktBase)
{
PktAdminMgr::PktShopCampAck* lpShopCampAck =
reinterpret_cast<PktAdminMgr::PktShopCampAck*>(lpPktBase);
CString strForFormating;
CShopCampPage* lpDialog = static_cast<CShopCampPage*>(GET_WINDOW(IDD_SHOPCAMPPAGE));
if(NULL != lpDialog)
{
lpDialog->SetShopCampItem(lpShopCampAck);
lpDialog->UpdateData(false);
}
return true;
}
bool CClientDispatch::PktCastleSearchAck(PktBase* lpPktBase)
{
PktAdminMgr::PktCastleSearchAck* lpCastleSearchAck =
reinterpret_cast<PktAdminMgr::PktCastleSearchAck*>(lpPktBase);
CCastleSearchDlg* lpDialog = static_cast<CCastleSearchDlg*>(GET_WINDOW(IDD_CASTLESEARCHDLG));
if(NULL != lpDialog)
{
CString strForFormating;
CCharacterDoc::GetInstance().GetServerName(lpCastleSearchAck->m_dwServerGroup, strForFormating);
lpDialog->m_ctrlSearchedList.InsertItem(0, strForFormating);
strForFormating.Format(_T("%u"), lpCastleSearchAck->m_dwCastleID);
lpDialog->m_ctrlSearchedList.SetItemText(0, 1, strForFormating);
strForFormating.Format(_T("%s"), GetNationString(lpCastleSearchAck->m_cNation));
lpDialog->m_ctrlSearchedList.SetItemText(0, 2, strForFormating);
strForFormating.Format(_T("%d : %s"), lpCastleSearchAck->m_cZone, GetZoneString(lpCastleSearchAck->m_cZone));
lpDialog->m_ctrlSearchedList.SetItemText(0, 3, strForFormating);
strForFormating.Format(_T("%u"), lpCastleSearchAck->m_cChannel);
lpDialog->m_ctrlSearchedList.SetItemText(0, 4, strForFormating);
strForFormating.Format(_T("%u"), lpCastleSearchAck->m_cName);
lpDialog->m_ctrlSearchedList.SetItemText(0, 5, strForFormating);
strForFormating.Format(_T("%u"), lpCastleSearchAck->m_cSiegeCount);
lpDialog->m_ctrlSearchedList.SetItemText(0, 6, strForFormating);
strForFormating.Format(_T("%u"), lpCastleSearchAck->m_cInvincibleCount);
lpDialog->m_ctrlSearchedList.SetItemText(0, 7, strForFormating);
strForFormating.Format(_T("%u"), lpCastleSearchAck->m_wTotalSiegeCount);
lpDialog->m_ctrlSearchedList.SetItemText(0, 8, strForFormating);
strForFormating.Format(_T("%u"), lpCastleSearchAck->m_dwTotalTaxMoney);
lpDialog->m_ctrlSearchedList.SetItemText(0, 9, strForFormating);
strForFormating.Format(_T("%s"), GetGuildTitleString(lpCastleSearchAck->m_cRight));
lpDialog->m_ctrlSearchedList.SetItemText(0, 10, strForFormating);
strForFormating.Format(_T("%f"), lpCastleSearchAck->m_fPosInX);
lpDialog->m_ctrlSearchedList.SetItemText(0, 11, strForFormating);
strForFormating.Format(_T("%f"), lpCastleSearchAck->m_fPosInY);
lpDialog->m_ctrlSearchedList.SetItemText(0, 12, strForFormating);
strForFormating.Format(_T("%f"), lpCastleSearchAck->m_fPosInZ);
lpDialog->m_ctrlSearchedList.SetItemText(0, 13, strForFormating);
strForFormating.Format(_T("%f"), lpCastleSearchAck->m_fPosOutX);
lpDialog->m_ctrlSearchedList.SetItemText(0, 14, strForFormating);
strForFormating.Format(_T("%f"), lpCastleSearchAck->m_fPosOutY);
lpDialog->m_ctrlSearchedList.SetItemText(0, 15, strForFormating);
strForFormating.Format(_T("%f"), lpCastleSearchAck->m_fPosOutZ);
lpDialog->m_ctrlSearchedList.SetItemText(0, 16, strForFormating);
strForFormating.Format(_T("%s"), GetJewelString(lpCastleSearchAck->m_wItemID));
lpDialog->m_ctrlSearchedList.SetItemText(0, 17, strForFormating);
strForFormating.Format(_T("%u"), lpCastleSearchAck->m_cItemNum);
lpDialog->m_ctrlSearchedList.SetItemText(0, 18, strForFormating);
lpDialog->m_dwSearchCount = lpDialog->m_ctrlSearchedList.GetItemCount();
lpDialog->UpdateData(false);
}
return true;
}
bool CClientDispatch::PktCastleCreatureAck(PktBase* lpPktBase)
{
PktAdminMgr::PktCastleCreatureAck* lpCastleCreatureAck =
reinterpret_cast<PktAdminMgr::PktCastleCreatureAck*>(lpPktBase);
CCastleCreatureDlg* lpDialog = static_cast<CCastleCreatureDlg*>(GET_WINDOW(IDD_CASTLECREATUREDLG));
if(NULL != lpDialog)
{
CString strForFormating;
strForFormating.Format(_T("%u"), lpCastleCreatureAck->m_dwCastleID);
lpDialog->m_ctrlCastleCreatureList.InsertItem(0, strForFormating);
strForFormating.Format(_T("%u"), lpCastleCreatureAck->m_dwCastleID);
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 1, strForFormating);
strForFormating.Format(_T("%u"), lpCastleCreatureAck->m_dwOwnerID);
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 2, strForFormating);
strForFormating.Format(_T("%u"), lpCastleCreatureAck->m_dwHP);
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 3, strForFormating);
strForFormating.Format(_T("%s"), GetSiegeObjectTypeString((int) lpCastleCreatureAck->m_wObjectType));
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 4, strForFormating);
strForFormating.Format(_T("%d"), (int) ( lpCastleCreatureAck->m_fDirection * RADIAN));
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 5, strForFormating);
strForFormating.Format(_T("%s"), GetStateString((int) lpCastleCreatureAck->m_cState));
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 6, strForFormating);
strForFormating.Format(_T("%s"), GetSubStateString((int) lpCastleCreatureAck->m_wObjectType , (int) lpCastleCreatureAck->m_cSubState));
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 7, strForFormating);
strForFormating.Format(_T("%u"), lpCastleCreatureAck->m_cUpgradeStep);
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 8, strForFormating);
strForFormating.Format(_T("%u"), lpCastleCreatureAck->m_cUpgradeType);
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 9, strForFormating);
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 10, CONV_CLISTR(lpCastleCreatureAck->m_szRemainTime));
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 11, CONV_CLISTR(lpCastleCreatureAck->m_szLastUseTime));
strForFormating.Format(_T("%f"), lpCastleCreatureAck->m_fPosX);
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 12, strForFormating);
strForFormating.Format(_T("%f"), lpCastleCreatureAck->m_fPosY);
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 13, strForFormating);
strForFormating.Format(_T("%f"), lpCastleCreatureAck->m_fPosZ);
lpDialog->m_ctrlCastleCreatureList.SetItemText(0, 14, strForFormating);
lpDialog->UpdateData(false);
}
return true;
}
bool CClientDispatch::PktItemQtyControlAck(PktBase* lpPktBase)
{
PktAdminMgr::PktItemQtyControl* lpPktItemQtyControl =
reinterpret_cast<PktAdminMgr::PktItemQtyControl*>(lpPktBase);
CItemQuantityControlDlg* lpDialog =
static_cast<CItemQuantityControlDlg*>(GET_WINDOW(IDD_ITEMQUANTITYCONTROLDLG));
if(NULL != lpDialog)
{
unsigned long dwServerGroup = 0;
CString strGroupName;
CString strForFormat;
lpDialog->m_ctrlServerGroupCb.GetLBText(lpDialog->m_ctrlServerGroupCb.GetCurSel(), strGroupName);
CCharacterDoc::GetInstance().GetServerIndex(strGroupName, dwServerGroup);
// 현재 열려있는 그룹의 상태 갱신
if(dwServerGroup == (unsigned long)lpPktItemQtyControl->m_cServerGroup)
{
const Item::ItemInfo* ItemInfo =
Item::CItemMgr::GetInstance().GetItemInfo((unsigned short)lpPktItemQtyControl->m_dwItemTypeID);
if(lpPktItemQtyControl->m_cType == PktAdminMgr::PktItemQtyControl::ADD)
{
strForFormat.Format(_T("%u"), lpPktItemQtyControl->m_dwItemTypeID);
if(-1 != SearchListCtrlCol(lpDialog->m_ctrlDropItemList, strForFormat, 0)) // 아이템 수정 Ack
{
lpDialog->m_strMessage.Format(_T("%s"), GetLocalString("MSG_0085"));
if(lpPktItemQtyControl->GetError() == 0)
{
int nIndex = lpDialog->m_ctrlDropItemList.GetNextItem(-1, LVIS_SELECTED);
PktAdminMgr::PktItemQtyControl* lpItemData =
reinterpret_cast<PktAdminMgr::PktItemQtyControl*>
(lpDialog->m_ctrlDropItemList.GetItemData(nIndex));
*lpItemData = *lpPktItemQtyControl;
lpDialog->m_strMessage.AppendFormat(_T(" %s"), GetLocalString("MSG_0086"));
}
else
lpDialog->m_strMessage.AppendFormat(_T(" %s"), GetLocalString("MSG_0087"));
}
else // 아이템 추가 Ack
{
lpDialog->m_strMessage.Format(_T("%s"), GetLocalString("MSG_0088"));
if(lpPktItemQtyControl->GetError() == 0)
{
int nIndex = lpDialog->m_ctrlDropItemList.GetItemCount();
strForFormat.Format(_T("%u"), lpPktItemQtyControl->m_dwItemTypeID);
lpDialog->m_ctrlDropItemList.InsertItem(nIndex, strForFormat);
lpDialog->m_ctrlDropItemList.SetItemText(nIndex, 1,
CONV_CLISTR(ItemInfo->m_SpriteData.m_szName));
PktAdminMgr::PktItemQtyControl* lpItemData = new PktAdminMgr::PktItemQtyControl;
*lpItemData = *lpPktItemQtyControl;
lpDialog->m_ctrlDropItemList.SetItemData(
nIndex, reinterpret_cast<DWORD_PTR>(lpItemData));
lpDialog->m_strMessage.AppendFormat(_T(" %s"), GetLocalString("MSG_0086"));
}
else
lpDialog->m_strMessage.AppendFormat(_T(" %s"), GetLocalString("MSG_0087"));
}
lpDialog->m_strCurrentDropItemCount.Format(_T("%d"), lpDialog->m_ctrlDropItemList.GetItemCount());
}
else if(lpPktItemQtyControl->m_cType == PktAdminMgr::PktItemQtyControl::DEL)
{
lpDialog->m_strMessage.Format(_T("%s"), GetLocalString("MSG_0089"));
if(lpPktItemQtyControl->GetError() == 0)
{
int nIndex = lpDialog->m_ctrlDropItemList.GetNextItem(-1, LVIS_SELECTED);
PktAdminMgr::PktItemQtyControl* lpItemData =
reinterpret_cast<PktAdminMgr::PktItemQtyControl*>
(lpDialog->m_ctrlDropItemList.GetItemData(nIndex));
delete lpItemData;
lpDialog->m_ctrlDropItemList.DeleteItem(nIndex);
lpDialog->m_strMessage.AppendFormat(_T(" %s"), GetLocalString("MSG_0086"));
}
else
lpDialog->m_strMessage.AppendFormat(_T(" %s"), GetLocalString("MSG_0087"));
lpDialog->m_strCurrentDropItemCount.Format(_T("%d"), lpDialog->m_ctrlDropItemList.GetItemCount());
}
else if(lpPktItemQtyControl->m_cType == PktAdminMgr::PktItemQtyControl::STATUS_ACK)
{
if(0 != lpDialog->m_ctrlDropItemList.GetItemCount())
{
strForFormat.Format(_T("%u"), lpPktItemQtyControl->m_dwItemTypeID);
int nSearchIndex = SearchListCtrlCol(lpDialog->m_ctrlDropItemList, strForFormat, 0);
if(-1 != nSearchIndex)
{
PktAdminMgr::PktItemQtyControl* lpItemData =
reinterpret_cast<PktAdminMgr::PktItemQtyControl*>
(lpDialog->m_ctrlDropItemList.GetItemData(nSearchIndex));
*lpItemData = *lpPktItemQtyControl;
}
else
{
int nIndex = lpDialog->m_ctrlDropItemList.GetItemCount();
CString strForFormat;
strForFormat.Format(_T("%u"), lpPktItemQtyControl->m_dwItemTypeID);
lpDialog->m_ctrlDropItemList.InsertItem(nIndex, strForFormat);
lpDialog->m_ctrlDropItemList.SetItemText(nIndex, 1,
CONV_CLISTR(ItemInfo->m_SpriteData.m_szName));
PktAdminMgr::PktItemQtyControl* lpItemData = new PktAdminMgr::PktItemQtyControl;
*lpItemData = *lpPktItemQtyControl;
lpDialog->m_ctrlDropItemList.SetItemData(
nIndex, reinterpret_cast<DWORD_PTR>(lpItemData));
}
}
else
{
int nIndex = lpDialog->m_ctrlDropItemList.GetItemCount();
CString strForFormat;
strForFormat.Format(_T("%u"), lpPktItemQtyControl->m_dwItemTypeID);
lpDialog->m_ctrlDropItemList.InsertItem(nIndex, strForFormat);
lpDialog->m_ctrlDropItemList.SetItemText(nIndex, 1,
CONV_CLISTR(ItemInfo->m_SpriteData.m_szName));
PktAdminMgr::PktItemQtyControl* lpItemData = new PktAdminMgr::PktItemQtyControl;
*lpItemData = *lpPktItemQtyControl;
lpDialog->m_ctrlDropItemList.SetItemData(
nIndex, reinterpret_cast<DWORD_PTR>(lpItemData));
}
lpDialog->m_strCurrentDropItemCount.Format(_T("%d"), lpDialog->m_ctrlDropItemList.GetItemCount());
}
else if(lpPktItemQtyControl->m_cType == PktAdminMgr::PktItemQtyControl::STATUS_ACK_END)
{
lpDialog->m_strCurrentDropItemCount.Format(_T("%d"), lpDialog->m_ctrlDropItemList.GetItemCount());
lpDialog->m_strMessage.Format(_T("%s"), GetLocalString("MSG_0090"));
}
else
lpDialog->m_strMessage.Format(_T("%s"), GetLocalString("MSG_0091"));
lpDialog->UpdateData(false);
}
}
return true;
}
bool CClientDispatch::PktUserBillingLogAck(PktBase* lpPktBase)
{
PktAdminMgr::PktUserBillingLogAck* lpPktUserBillingLogAck =
reinterpret_cast<PktAdminMgr::PktUserBillingLogAck*>(lpPktBase);
CUserBillingLogDlg* lpDialog = static_cast<CUserBillingLogDlg*>(GET_WINDOW(IDD_USERBILLINGLOGDLG));
if(NULL != lpDialog)
{
CString strForFormating;
strForFormating.Format(_T("%s"), lpPktUserBillingLogAck->m_szClientID);
lpDialog->m_ctrlUserBillingLogList.InsertItem(0, strForFormating);
strForFormating.Format(_T("%u"), lpPktUserBillingLogAck->m_dwUID);
lpDialog->m_ctrlUserBillingLogList.SetItemText(0, 1, strForFormating);
strForFormating.Format(_T("%s"), lpPktUserBillingLogAck->m_szIP);
lpDialog->m_ctrlUserBillingLogList.SetItemText(0, 2, strForFormating);
CCharacterDoc::GetInstance().GetServerName(lpPktUserBillingLogAck->m_sServerIndex, strForFormating);
lpDialog->m_ctrlUserBillingLogList.SetItemText(0, 3, strForFormating);
strForFormating.Format(_T("%s"), lpPktUserBillingLogAck->m_szFirstLoginTime);
lpDialog->m_ctrlUserBillingLogList.SetItemText(0, 4, strForFormating);
strForFormating.Format(_T("%s"), lpPktUserBillingLogAck->m_szLogoutTime);
lpDialog->m_ctrlUserBillingLogList.SetItemText(0, 5, strForFormating);
lpDialog->m_dwSearchCount = lpDialog->m_ctrlUserBillingLogList.GetItemCount();
lpDialog->UpdateData(false);
}
return true;
}
bool CClientDispatch::PktGameAdminAck(PktBase* lpPktBase)
{
PktAdminMgr::PktGameAdmin* lpPktGameAdmin =
reinterpret_cast<PktAdminMgr::PktGameAdmin*>(lpPktBase);
CGAdminManagementDlg* lpDialog = static_cast<CGAdminManagementDlg*>(GET_WINDOW(IDD_GADMINMANAGEMENTDLG));
if(NULL != lpDialog)
{
if(lpPktGameAdmin->m_cPktType == PktAdminMgr::PktGameAdmin::ACK)
{
CString strForFormat;
int nInsertIndex = lpDialog->m_ctrlGAdminList.GetItemCount();
strForFormat.Format(_T("%u"), lpPktGameAdmin->m_dwUID);
lpDialog->m_ctrlGAdminList.InsertItem(nInsertIndex, strForFormat);
strForFormat.Format(_T("%u"), lpPktGameAdmin->m_nAdminLV);
lpDialog->m_ctrlGAdminList.SetItemText(nInsertIndex, 1, strForFormat);
strForFormat.Format(_T("%s"), lpPktGameAdmin->m_szStartIP);
lpDialog->m_ctrlGAdminList.SetItemText(nInsertIndex, 2, strForFormat);
strForFormat.Format(_T("%s"), lpPktGameAdmin->m_szEndIP);
lpDialog->m_ctrlGAdminList.SetItemText(nInsertIndex, 3, strForFormat);
}
else if(lpPktGameAdmin->m_cPktType == PktAdminMgr::PktGameAdmin::REFRESH)
{
lpDialog->ReFreshGameAdminList();
}
}
return true;
}
bool CClientDispatch::PktConnectAllServerzAck(PktBase* lpPktBase)
{
PktAdminMgr::PktConnectAllServerz* lpPktConnectAllServerz =
reinterpret_cast<PktAdminMgr::PktConnectAllServerz*>(lpPktBase);
CQuickMenuDlgBar* lpDlgBar = static_cast<CQuickMenuDlgBar*>(GET_WINDOW(IDD_QUICKMENUDLGBAR));
if(NULL != lpDlgBar)
{
lpDlgBar->m_ctrlConnectedServerList.ResetContent();
lpDlgBar->m_ctrlCharSearchCombo2.ResetContent();
CString strServerGroupName;
for(int nIndex = 0; nIndex < PktAdminMgr::PktConnectAllServerz::SERVERZ_NUM; ++nIndex)
{
// 배열에 들어있는 값은 접속되어 있는 서버 인덱스 + 1 (주의!)
if(0 != lpPktConnectAllServerz->m_nConnectedServerIndex[nIndex])
{
CCharacterDoc::GetInstance().GetServerName(
lpPktConnectAllServerz->m_nConnectedServerIndex[nIndex] - 1, strServerGroupName);
// 중계서버 리스트 갱신
lpDlgBar->m_ctrlConnectedServerList.InsertString(0, strServerGroupName);
// 검색 콤보 갱신
lpDlgBar->m_ctrlCharSearchCombo2.InsertString(0, strServerGroupName);
}
}
}
return true;
}
bool CClientDispatch::PktInterestedUserList(PktBase* lpPktBase)
{
PktAdminMgr::PktInterestedUser* lpPktInterestedUser =
reinterpret_cast<PktAdminMgr::PktInterestedUser*>(lpPktBase);
CInterestedUserDlg* lpDlg = static_cast<CInterestedUserDlg*>(GET_WINDOW(IDD_INTERESTEDUSERDLG));
if (NULL != lpDlg)
{
CString strForFormat;
int nInsertIndex = lpDlg->m_ctrlInterestUserList.GetItemCount();
strForFormat.Format(_T("%s"), lpPktInterestedUser->m_szAccount);
lpDlg->m_ctrlInterestUserList.InsertItem(nInsertIndex, strForFormat);
strForFormat.Format(_T("%s"), lpPktInterestedUser->m_szReason);
lpDlg->m_ctrlInterestUserList.SetItemText(nInsertIndex, 1, strForFormat);
}
return true;
}
bool CClientDispatch::PktConnectionChk(PktBase* lpPktBase)
{
CConnectionInfoDlg dlg(reinterpret_cast<PktAdminMgr::PktConnectionChk*>(lpPktBase));
dlg.DoModal();
return true;
}
bool CClientDispatch::PktConnectedUserList(PktBase* lpPktBase)
{
CQuickMenuDlgBar* lpDlgBar = static_cast<CQuickMenuDlgBar*>(GET_WINDOW(IDD_QUICKMENUDLGBAR));
if (NULL != lpDlgBar)
{
lpDlgBar->InterestedUserListSet(lpPktBase);
}
return true;
}
bool CClientDispatch::PktDuplicatedItem(PktBase* lpPktBase)
{
CDuplicatedItemDlg* lpDlg = static_cast<CDuplicatedItemDlg*>(GET_WINDOW(IDD_DUPLICATEDITEMDLG));
PktAdminMgr::PktDuplicatedItem* lpData =
reinterpret_cast<PktAdminMgr::PktDuplicatedItem*>(lpPktBase);
if(NULL != lpDlg)
{
CString strForFormat;
CCharacterDoc::GetInstance().GetServerName(lpData->m_dwServerGroup, strForFormat);
lpDlg->SetDlgItemText(IDC_DUPLICATEDITEM_SELGROUP_EDIT, strForFormat);
int nInsertIndex = lpDlg->m_ctrlDItemList.GetItemCount();
strForFormat.Format(_T("%s"), lpData->m_szInsertTime);
lpDlg->m_ctrlDItemList.InsertItem(nInsertIndex, strForFormat);
strForFormat.Format(_T("%s"), lpData->m_szUpdateTime);
lpDlg->m_ctrlDItemList.SetItemText(nInsertIndex, 1, strForFormat);
strForFormat.Format(_T("%u"), lpData->m_dwUID);
lpDlg->m_ctrlDItemList.SetItemText(nInsertIndex, 2, strForFormat);
strForFormat.Format(_T("%u"), lpData->m_dwCID);
lpDlg->m_ctrlDItemList.SetItemText(nInsertIndex, 3, strForFormat);
strForFormat.Format(_T("%s"), lpData->m_szCharName);
lpDlg->m_ctrlDItemList.SetItemText(nInsertIndex, 4, strForFormat);
strForFormat.Format(_T("0x%016I64X"), lpData->m_dwItemUID);
lpDlg->m_ctrlDItemList.SetItemText(nInsertIndex, 5, strForFormat);
strForFormat.Format(_T("%d"), lpData->m_nQty);
lpDlg->m_ctrlDItemList.SetItemText(nInsertIndex, 6, strForFormat);
strForFormat.Format(_T("%s"), (lpData->m_bChk == true) ? _T("DO") : _T("DO NOT"));
lpDlg->m_ctrlDItemList.SetItemText(nInsertIndex, 7, strForFormat);
}
return true;
}
bool CClientDispatch::PktItemDistributeAck(PktBase* lpPktBase)
{
CItemDistributeDlg* lpDlg = static_cast<CItemDistributeDlg*>(GET_WINDOW(IDD_ITEMDISTRIBUTEDLG));
if(NULL != lpDlg)
{
lpDlg->ReportResult(reinterpret_cast<PktAdminMgr::PktItemDistributeAck*>(lpPktBase));
}
return true;
}
bool CClientDispatch::PktGuildRight(PktBase* lpPktBase)
{
PktAdminMgr::PktGuildRight* lpPktGuildRight =
reinterpret_cast<PktAdminMgr::PktGuildRight*>(lpPktBase);
CGuildMainDlg* lpDlg = static_cast<CGuildMainDlg*>(GET_WINDOW(IDD_GUILDMAINDLG));
if(NULL != lpDlg)
{
for(int nRightIndex = 0; nRightIndex < GuildRight::MAX_USING_RIGHT; ++nRightIndex)
{
CString strForFormat;
strForFormat.Format(_T("%s"), GetGuildRightString(nRightIndex));
lpDlg->m_ctrlGuildRightList.InsertItem(nRightIndex, strForFormat);
strForFormat.Format(_T("%s"), GetGuildTitleString(lpPktGuildRight->m_aryRight[nRightIndex]));
lpDlg->m_ctrlGuildRightList.SetItemText(nRightIndex, 1, strForFormat);
}
}
return true;
}
bool CClientDispatch::PktUnifiedCharInfo(PktBase* lpPktBase)
{
PktAdminMgr::PktUnifiedCharInfo* lpPktUnifiedCharInfo =
reinterpret_cast<PktAdminMgr::PktUnifiedCharInfo*>(lpPktBase);
CUnifiedCharInfoDlg* lpDialog = static_cast<CUnifiedCharInfoDlg*>(GET_WINDOW(IDD_UNIFIEDCHARINFODLG));
if (NULL == lpDialog)
{
ERRLOG1(g_Log, "통합 캐릭터 정보 창 얻기 실패. 리소스ID-%d", IDD_UNIFIEDCHARINFODLG);
return true;
}
CString strForFormat;
int nInsertIndex = lpDialog->m_ctrlUnifiedCharList.GetItemCount();
strForFormat.Format(_T("%u"), lpPktUnifiedCharInfo->m_dwUID);
lpDialog->m_ctrlUnifiedCharList.InsertItem(nInsertIndex, strForFormat);
strForFormat.Format(_T("%d"), lpPktUnifiedCharInfo->m_nOldServerGroup);
lpDialog->m_ctrlUnifiedCharList.SetItemText(nInsertIndex, 1, strForFormat);
strForFormat.Format(_T("%u"), lpPktUnifiedCharInfo->m_dwBeforeCID);
lpDialog->m_ctrlUnifiedCharList.SetItemText(nInsertIndex, 2, strForFormat);
strForFormat.Format(_T("%u"), lpPktUnifiedCharInfo->m_dwNewCID);
lpDialog->m_ctrlUnifiedCharList.SetItemText(nInsertIndex, 3, strForFormat);
strForFormat.Format(_T("%s"), lpPktUnifiedCharInfo->m_szBeforeCharName);
lpDialog->m_ctrlUnifiedCharList.SetItemText(nInsertIndex, 4, strForFormat);
return true;
}
bool CClientDispatch::PktUnifiedGuildInfo(PktBase* lpPktBase)
{
PktAdminMgr::PktUnifiedGuildInfo* lpPktUnifiedGuildInfo =
reinterpret_cast<PktAdminMgr::PktUnifiedGuildInfo*>(lpPktBase);
CUnifiedGuildInfoDlg* lpDialog = static_cast<CUnifiedGuildInfoDlg*>(GET_WINDOW(IDD_UNIFIEDGUILDINFODLG));
if (NULL == lpDialog)
{
ERRLOG1(g_Log, "통합 길드 정보 창 얻기 실패. 리소스ID-%d", IDD_UNIFIEDGUILDINFODLG);
return true;
}
CString strForFormat;
int nInsertIndex = lpDialog->m_ctrlUnifiedGuildList.GetItemCount();
strForFormat.Format(_T("%u"), lpPktUnifiedGuildInfo->m_dwBeforeGID);
lpDialog->m_ctrlUnifiedGuildList.InsertItem(nInsertIndex, strForFormat);
strForFormat.Format(_T("%d"), lpPktUnifiedGuildInfo->m_nOldServerGroupID);
lpDialog->m_ctrlUnifiedGuildList.SetItemText(nInsertIndex, 1, strForFormat);
strForFormat.Format(_T("%u"), lpPktUnifiedGuildInfo->m_dwNewGID);
lpDialog->m_ctrlUnifiedGuildList.SetItemText(nInsertIndex, 2, strForFormat);
strForFormat.Format(_T("%s"), lpPktUnifiedGuildInfo->m_szBeforeGName);
lpDialog->m_ctrlUnifiedGuildList.SetItemText(nInsertIndex, 3, strForFormat);
strForFormat.Format(_T("%s"), lpPktUnifiedGuildInfo->m_szNewGName);
lpDialog->m_ctrlUnifiedGuildList.SetItemText(nInsertIndex, 4, strForFormat);
return true;
}
bool CClientDispatch::PktDetailCharInfo(PktBase* lpPktBase)
{
PktAdminMgr::PktDetailCharInfo* lpPktDetailCharInfo =
reinterpret_cast<PktAdminMgr::PktDetailCharInfo*>(lpPktBase);
CDetailCharInfo* lpDlg = static_cast<CDetailCharInfo*>(GET_WINDOW(IDD_DETAILCHARINFO));
if (NULL == lpDlg)
{
ERRLOG1(g_Log, "통합 캐릭터 상세 정보 창 얻기 실패. 리소스ID-%d", IDD_DETAILCHARINFO);
return true;
}
CString strForFormat;
strForFormat.Format(_T("%s"), lpPktDetailCharInfo->m_szCharName);
lpDlg->m_ctrlDetailCharInfoList.SetItemText(0, 1, strForFormat);
strForFormat.Format(_T("%s"), GetClassString((int)lpPktDetailCharInfo->m_sClass));
lpDlg->m_ctrlDetailCharInfoList.SetItemText(1, 1, strForFormat);
strForFormat.Format(_T("%u"), lpPktDetailCharInfo->m_dwFame);
lpDlg->m_ctrlDetailCharInfoList.SetItemText(2, 1, strForFormat);
strForFormat.Format(_T("%u"), lpPktDetailCharInfo->m_dwMileage);
lpDlg->m_ctrlDetailCharInfoList.SetItemText(3, 1, strForFormat);
strForFormat.Format(_T("%d"), (unsigned int)lpPktDetailCharInfo->m_cLevel);
lpDlg->m_ctrlDetailCharInfoList.SetItemText(4, 1, strForFormat);
strForFormat.Format(_T("%u"), lpPktDetailCharInfo->m_dwGold);
lpDlg->m_ctrlDetailCharInfoList.SetItemText(5, 1, strForFormat);
strForFormat.Format(_T("%I64u"), lpPktDetailCharInfo->m_i64Exp);
lpDlg->m_ctrlDetailCharInfoList.SetItemText(6, 1, strForFormat);
return true;
}
bool CClientDispatch::PktShiftToUID(PktBase* lpPktBase)
{
PktAdminMgr::PktShiftToUID* lpPktShiftToUID =
reinterpret_cast<PktAdminMgr::PktShiftToUID*>(lpPktBase);
CQuickMenuDlgBar* lpDlgBar = static_cast<CQuickMenuDlgBar*>(GET_WINDOW(IDD_QUICKMENUDLGBAR));
if(NULL != lpDlgBar)
{
if (PktAdminMgr::PktShiftToUID::ACCOUNT_TO_UID == lpPktShiftToUID->m_cPktType)
{
lpDlgBar->SetDlgItemInt(IDC_Q_UID_EDIT, lpPktShiftToUID->m_dwUID, FALSE);
}
else if (PktAdminMgr::PktShiftToUID::UID_TO_ACCOUNT == lpPktShiftToUID->m_cPktType)
{
lpDlgBar->SetDlgItemText(IDC_Q_ACCOUNT_EDIT, lpPktShiftToUID->m_szAccount);
}
}
return true;
}
bool CClientDispatch::PktStoreTabEdit(PktBase* lpPktBase)
{
PktAdminMgr::PktStoreTabEdit* lpPktStoreTabEdit =
reinterpret_cast<PktAdminMgr::PktStoreTabEdit*>(lpPktBase);
CCharacterDoc::CharDocInfo* lpCharDoc =
CCharacterDoc::GetInstance().GetCharDocInfo(lpPktStoreTabEdit->m_dwRequestKey);
if (NULL != lpCharDoc)
{
// Ack받을때는 m_dwServerGroup에다 셋팅했던 탭 플래그를 받아옴.
lpCharDoc->m_ModifyCharacter->GetDeposit().SetTabFlag(lpPktStoreTabEdit->m_dwServerGroup);
CharInfoParseFinish(lpCharDoc);
}
return true;
}
bool CClientDispatch::PktAmountOfGold(PktBase* lpPktBase)
{
PktAdminMgr::PktAmountOfGold* lpPktAmountOfGold =
reinterpret_cast<PktAdminMgr::PktAmountOfGold*>(lpPktBase);
CAdminStoreDlgBar* lpDlg = static_cast<CAdminStoreDlgBar*>(GET_WINDOW(IDD_BOTTOM_DLGBAR));
lpDlg->SetGoldEditBox(lpPktAmountOfGold->m_i64Gold);
return true;
}
bool CClientDispatch::PktGMLogMsg(PktBase* lpPktBase)
{
PktAdminMgr::PktGMLogMsg* lpPktGMLogMsg =
reinterpret_cast<PktAdminMgr::PktGMLogMsg*>(lpPktBase);
if (PktAdminMgr::PktGMLogMsg::LOG_CONFIRM == lpPktGMLogMsg->m_cPktType)
{
CString strMsg;
if (0 == lpPktGMLogMsg->m_dwCID)
{
strMsg.Format("%s (UID: %u)", GetLocalString("ADDED_STRING_043"), lpPktGMLogMsg->m_dwUID);
Report(strMsg, NOTIFY);
}
else
{
strMsg.Format("%s (CID: %u)", GetLocalString("ADDED_STRING_044"), lpPktGMLogMsg->m_dwCID);
Report(strMsg, NOTIFY);
}
}
else
{
CGMLogMsgDlg* lpDlg = static_cast<CGMLogMsgDlg*>(GET_WINDOW(IDD_GMLOGMSGDLG));
if (NULL == lpDlg)
{
ERRLOG0(g_Log, "GM 로그 창 얻기 실패. ID - IDD_GMLOGMSGDLG");
return true;
}
switch(lpPktGMLogMsg->m_cPktType)
{
case PktAdminMgr::PktGMLogMsg::LOG_SELECT:
{
lpDlg->InsertGMLogMsgList(lpPktGMLogMsg);
}
break;
case PktAdminMgr::PktGMLogMsg::LOG_REFRESH:
{
lpDlg->SetDlgItemText(IDC_GMLOG_ADDLOG_EDIT, "");
lpDlg->m_ctrlGMLogMsgList.DeleteAllItems();
CPacketMgr::GetInstance()->SendPktGMLogMsg(PktAdminMgr::PktGMLogMsg::LOG_SELECT,
lpPktGMLogMsg->m_dwServerGroup, lpPktGMLogMsg->m_dwUID, lpPktGMLogMsg->m_dwCID);
}
break;
default:
break;
}
}
return true;
}
bool CClientDispatch::PktGuildMemberEdit(PktBase* lpPktBase)
{
PktAdminMgr::PktGuildMemberEdit* lpPktGuildMemberEdit =
reinterpret_cast<PktAdminMgr::PktGuildMemberEdit*>(lpPktBase);
CGuildMainDlg* lpDlg = static_cast<CGuildMainDlg*>(GET_WINDOW(IDD_GUILDMAINDLG));
if (NULL != lpDlg)
{
switch(lpPktGuildMemberEdit->GetError())
{
case PktBase::NO_SERVER_ERR:
{
CString strCID;
strCID.Format("%u", lpPktGuildMemberEdit->m_dwCID);
int nIndex = SearchListCtrlCol(lpDlg->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList, strCID, 0);
if (PktGuildPosition::TYPE_POSITION == lpPktGuildMemberEdit->m_cType)
{
CString strPosition;
strPosition.Format("%d", lpPktGuildMemberEdit->m_cPosition);
lpDlg->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.SetItemText(nIndex, 1, strPosition);
Report(GetLocalString("ADDED_STRING_095"), SUCCESS);
}
else if(PktGuildPosition::TYPE_MEMBERDELETE == lpPktGuildMemberEdit->m_cType)
{
lpDlg->m_pGuildInfoSheet->m_wndMemberPage.m_ctrlMemberList.DeleteItem(nIndex);
Report(GetLocalString("ADDED_STRING_094"), SUCCESS);
}
}
break;
case PktGuildPosition::FAIL_CONNECT_CHAR:
Report(GetLocalString("ADDED_STRING_087"), FAILED); break;
case PktGuildPosition::FAIL_DB_UPDATE:
Report(GetLocalString("ADDED_STRING_088"), FAILED); break;
case PktGuildPosition::FAIL_GUILD:
Report(GetLocalString("ADDED_STRING_089"), FAILED); break;
case PktGuildPosition::FAIL_MEMBER_DELETE:
Report(GetLocalString("ADDED_STRING_090"), FAILED); break;
}
}
return true;
}
CString CClientDispatch::GetBlockString(unsigned int nIndex)
{
switch(nIndex)
{
case 1: return _T("Account Block");
case 2: return _T("Character Block");
case 3: return _T("Character Detain");
case 4: return _T("Ban Chating");
case 5: return _T("Info Modify");
}
return _T("UNKNOWN");
}
CString CClientDispatch::GetGuildTitleString(unsigned int nIndex)
{
switch(nIndex)
{
case Guild::NONE: return _T("NONE");
case Guild::MASTER: return GetLocalString("GUILD_TITLE_01");
case Guild::MIDDLE_ADMIN: return GetLocalString("GUILD_TITLE_02");
case Guild::COMMON: return GetLocalString("GUILD_TITLE_03");
case Guild::LEAVE_WAIT: return GetLocalString("GUILD_TITLE_04");
case Guild::JOIN_WAIT: return GetLocalString("GUILD_TITLE_05");
}
return _T("UNKNOWN");
}
CString CClientDispatch::GetGuildRightString(unsigned int nIndex)
{
switch(nIndex)
{
case GuildRight::PUT_STOREHOUSE: return GetLocalString("GUILD_RIGHT_01");
case GuildRight::GET_STOREHOUSE: return GetLocalString("GUILD_RIGHT_02");
case GuildRight::USE_SAFE: return GetLocalString("GUILD_RIGHT_03");
case GuildRight::INVITE_MEMBER: return GetLocalString("GUILD_RIGHT_04");
case GuildRight::PERMIT_JOIN: return GetLocalString("GUILD_RIGHT_05");
case GuildRight::CHANGE_PASSWORD: return GetLocalString("GUILD_RIGHT_06");
//case GuildRight::SETUP_RELATION: return GetLocalString("GUILD_RIGHT_07");
case GuildRight::REGULATE_TEX: return GetLocalString("GUILD_RIGHT_08");
case GuildRight::KICK_MEMBER: return GetLocalString("GUILD_RIGHT_09");
case GuildRight::BOARD_ADMIN: return GetLocalString("GUILD_RIGHT_10");
case GuildRight::SETUP_MARK_N_LEVEL: return GetLocalString("GUILD_RIGHT_11");
case GuildRight::SETUP_MIDDLE: return GetLocalString("GUILD_RIGHT_12");
case GuildRight::DIVIDE_GOLD: return GetLocalString("GUILD_RIGHT_13");
case GuildRight::SETUP_POLICY: return GetLocalString("GUILD_RIGHT_14");
}
return _T("UNKNOWN");
}
bool CClientDispatch::PktResultCharInfoTime(PktBase* lpPktAck)
{
typedef PktAdminMgr::PktCharInfoTimeResultAck PktCharInfoTimeResultAck;
PktCharInfoTimeResultAck* lpPktResultAck =
reinterpret_cast<PktCharInfoTimeResultAck*>(lpPktAck);
CCharInfoTime* lpDlg = static_cast<CCharInfoTime*>(GET_WINDOW(IDD_CHARINFOTIMEDLG));
if (NULL != lpDlg)
{
switch(lpPktResultAck->GetError())
{
case PktBase::NO_SERVER_ERR:
lpDlg->m_szCreateTime.Format("%s", lpPktResultAck->m_CreateTime);
lpDlg->m_szUpdateTime.Format("%s", lpPktResultAck->m_UpdateTime);
lpDlg->UpdateData(FALSE);
Report(GetLocalString("ADDED_STRING_107"), SUCCESS);
break;
case PktBase::SERVER_ERROR:
Report(GetLocalString("ADDED_STRING_109"), CAUTION);
break;
}
}
return true;
}