4524 lines
122 KiB
C++
4524 lines
122 KiB
C++
#include "SunClientPrecompiledHeader.h"
|
|
|
|
#include "uiCommunityMan.h"
|
|
#include "uiCommunityDlg/uiCommunityDlg.h"
|
|
#include "uiCommunityInfo/uiCommunityInfo.h"
|
|
#include "uiCommunityReadMail/uiCommunityReadMail.h"
|
|
#include "uiCommunityWriteMail/uiCommunityWriteMail.h"
|
|
#include "uiCommunityChat/uiCommunityChat.h"
|
|
#include "uiGuildMan/uiGuildMan.h"
|
|
#include "interfaceManager.h"
|
|
#include "GameFramework.h"
|
|
#include "GlobalFunc.h"
|
|
#include "uiLoginMan/uiLoginMan.h"
|
|
|
|
#include "uiToolTipMan/uiToolTipMan.h"
|
|
#include "uiHeroGaugeMan/uiHeroGaugeMan.h"
|
|
#include "uiToolTipMan/uiToolTipMan.h"
|
|
#include "SoundEffect.h"
|
|
#include "uiSystemMan/uiSystemMan.h"
|
|
#include "ResultCode.h"
|
|
#include "itemmanager.h"
|
|
|
|
#include "Hero.h"
|
|
#include "BattleScene.h"
|
|
#include "SolarDateTime.h"
|
|
#include "time.h"
|
|
|
|
#include "uiEventMan/uiEventMan.h"
|
|
#include "uiEventFriendWindow.h"
|
|
#include "uiConvenienceStore/uiConvenienceStore_FriendList.h"
|
|
#ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
|
|
#include "GuildSystem/GuildSystemData.h"
|
|
#endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
|
|
|
|
using namespace RC;
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
uiCommunityMan::uiCommunityMan(InterfaceManager *pUIMan) :
|
|
uiBaseMan(pUIMan)
|
|
,m_iCommunityMode(0)
|
|
{
|
|
|
|
#ifdef _YMS_UI_STATE_REMEMBER
|
|
ZeroMemory(last_scrollbar_position_, sizeof(last_scrollbar_position_));
|
|
last_community_mode_ = eCM_FRIEND;
|
|
last_community_friend_subject_mode_ = eCM_FRIEND;
|
|
#endif
|
|
|
|
m_pUICommunityDlg = NULL;
|
|
m_pUICommunityInfo = NULL;
|
|
m_pUICommunityReadMail = NULL;
|
|
m_pUICommunityWriteMail = NULL;
|
|
|
|
m_bNotDisplayOffLine = false;
|
|
m_bDisplayNewMail = false;
|
|
|
|
|
|
for(int i = eCM_FRIEND; i < eCM_MODEMAX; ++i)
|
|
{
|
|
m_iSortBy[i] = eCOMSORT_NAME;
|
|
m_bOrderBy[i] = false;
|
|
}
|
|
m_iSortReady = eCOMSORT_BNONE;
|
|
m_bIsOpenGroupJoinWinodw = FALSE;
|
|
m_bRecvGroupMemberInfo = false;
|
|
ZeroMemory(m_GroupName, sizeof(m_GroupName));
|
|
|
|
onlined_friend_count_ = 0;
|
|
onlined_group_count_ = 0;
|
|
ZeroMemory(m_szRecvNameForMail, sizeof(m_szRecvNameForMail));
|
|
|
|
SetRqstJoinGame(false);
|
|
Clear();
|
|
}
|
|
|
|
void uiCommunityMan::OnInitialize()
|
|
{
|
|
_LoadUI();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::OnRelease()
|
|
{
|
|
ClearFriendData();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::InitPKBooleans()
|
|
{
|
|
this->m_vPKBool.clear();
|
|
|
|
for (int i= ePKBOOL_COMMUNITY_BASE; i < ePKBOOL_COMMUNITY_CW_MEMO_VIEW_REQ; ++i)
|
|
{
|
|
uicPacketControl packetControl;
|
|
this->m_vPKBool.push_back(packetControl);
|
|
}
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::Process(DWORD dwTick)
|
|
{
|
|
if(IsWaitJoinGame() && m_PacketTimer.IsExpired())
|
|
{
|
|
SetWaitJoinGame(false);
|
|
}
|
|
|
|
CheckGroupLevel(); // 그룹 레벨 차이가 난다면 메시지를 출력
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::Clear()
|
|
{
|
|
m_bRejectGroup = false;
|
|
ZeroMemory(m_GroupName, sizeof(m_GroupName));
|
|
|
|
m_bRejectChat = false;
|
|
ZeroMemory(&m_FriendInfo, sizeof(m_FriendInfo));
|
|
|
|
SetMode(eCM_FRIEND);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::Reset()
|
|
{
|
|
if(m_pUICommunityDlg)
|
|
{
|
|
m_pUICommunityDlg->ShowInterface(TRUE, TRUE);
|
|
m_pUICommunityDlg->Reset();
|
|
}
|
|
|
|
ZeroMemory(last_scrollbar_position_, sizeof(last_scrollbar_position_));
|
|
set_last_community_mode(eCM_FRIEND);
|
|
set_last_community_friend_subject_mode(eCM_FRIEND);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetMode(int iMode)
|
|
{
|
|
if ((iMode >= eCM_FRIEND) && (iMode < eCM_MODEMAX))
|
|
{
|
|
m_iCommunityMode = iMode;
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ShowCommunityDlg()
|
|
{
|
|
if(m_pUICommunityDlg)
|
|
{
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->ShowInterface(FALSE);
|
|
else
|
|
m_pUICommunityDlg->ShowInterface(TRUE);
|
|
}
|
|
|
|
}
|
|
|
|
void uiCommunityMan::OnCallBackMailDeleteInReadDialog( bool bYes )
|
|
{
|
|
if (bYes)
|
|
{
|
|
if( GetPendingDelMemoGuid())
|
|
{
|
|
SEND_CW_MEMO_DELETE_SYN( GetPendingDelMemoGuid() );
|
|
}
|
|
|
|
m_pUICommunityReadMail->CloseDlg();
|
|
}
|
|
|
|
SetPendingDelMemoGuid(0);
|
|
SetSystemDialog(false);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
LEVELTYPE uiCommunityMan::GetLevel()
|
|
{
|
|
FRIEND_DATA* friend_data= GetFriendData(m_FriendInfo.m_ptszCharName);
|
|
if (friend_data != NULL)
|
|
{
|
|
return friend_data->lv;
|
|
}
|
|
|
|
return 0;
|
|
//
|
|
// if(GetMode() == eCM_FRIEND)
|
|
// {
|
|
// for(int i=0;i<m_FriendArray.Size();++i)
|
|
// {
|
|
// if(!Strcmp(m_FriendArray[i].name.Get(),m_FriendInfo.m_ptszCharName))
|
|
// {
|
|
// return m_FriendArray[i].lv;
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// else if(GetMode() == eCM_REVENGE)
|
|
// {
|
|
// for(int i=0;i<m_RevengeArray.Size();++i)
|
|
// {
|
|
// if(!Strcmp(m_RevengeArray[i].name.Get(),m_FriendInfo.m_ptszCharName))
|
|
// {
|
|
// return m_RevengeArray[i].lv;
|
|
// }
|
|
// }
|
|
// }
|
|
// else if(GetMode() == eCM_GROUP)
|
|
// {
|
|
// for(int i=0;i<m_GroupArray.Size();++i)
|
|
// {
|
|
// if(!Strcmp(m_GroupArray[i].name.Get(),m_FriendInfo.m_ptszCharName))
|
|
// {
|
|
// return m_GroupArray[i].lv;
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// return 0;
|
|
}
|
|
|
|
#ifdef _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
|
|
GenderType::Value uiCommunityMan::GetGender()
|
|
{
|
|
FRIEND_DATA* friend_data= GetFriendData(m_FriendInfo.m_ptszCharName);
|
|
if (friend_data != NULL)
|
|
{
|
|
return (GenderType::Value)friend_data->gender;
|
|
}
|
|
|
|
return GenderType::kFemale;
|
|
}
|
|
#endif // _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
BYTE uiCommunityMan::GetClass()
|
|
{
|
|
FRIEND_DATA* friend_data= GetFriendData(m_FriendInfo.m_ptszCharName);
|
|
if (friend_data != NULL)
|
|
{
|
|
return friend_data->bClassCode;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
CHARGUID uiCommunityMan::GetGUID(TCHAR* character_name)
|
|
{
|
|
if ((m_pUICommunityInfo != NULL) && (m_pUICommunityInfo->request_uimanager_id() == UIMAN_GUILD))
|
|
{
|
|
#ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
|
|
GUILD_MEMBER_INFO* guild_member_info =
|
|
GuildSystem::GetGuildSystemData().GetGuildMemberInfo(character_name);
|
|
if (guild_member_info != NULL)
|
|
{
|
|
return guild_member_info->m_CharGuid;
|
|
}
|
|
#else
|
|
uiGuildMan* guild_manager = static_cast<uiGuildMan*>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_GUILD));
|
|
if (guild_manager != NULL)
|
|
{
|
|
stGUILD_MEMBER_INFO* member_info = guild_manager->GetGuildMemberInfo(character_name);
|
|
if (member_info != NULL)
|
|
{
|
|
return member_info->m_CharGuid;
|
|
}
|
|
}
|
|
#endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
|
|
return 0;
|
|
}
|
|
|
|
FRIEND_DATA* friend_data= GetFriendData(character_name);
|
|
if (friend_data != NULL)
|
|
{
|
|
return friend_data->dwFriendGuid;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
FRIEND_DATA* uiCommunityMan::GetFriendData(TCHAR* character_name)
|
|
{
|
|
if (character_name == NULL)
|
|
{
|
|
return NULL;
|
|
}
|
|
if(GetMode() == eCM_FRIEND)
|
|
{
|
|
for(int i=0;i<m_FriendArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_FriendArray[i].name.Get(), character_name))
|
|
{
|
|
return &(m_FriendArray[i]);
|
|
}
|
|
}
|
|
}
|
|
else if(GetMode() == eCM_REVENGE)
|
|
{
|
|
for(int i=0;i<m_RevengeArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_RevengeArray[i].name.Get(), character_name))
|
|
{
|
|
return &(m_RevengeArray[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
else if(GetMode() == eCM_GROUP)
|
|
{
|
|
for(int i=0;i<m_GroupArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_GroupArray[i].name.Get(), character_name))
|
|
{
|
|
return &(m_GroupArray[i]);
|
|
}
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
FRIEND_DATA* uiCommunityMan::GetFriendData(CHARGUID character_guid)
|
|
{
|
|
if (character_guid <= 0)
|
|
{
|
|
return NULL;
|
|
}
|
|
if (GetMode() == eCM_FRIEND)
|
|
{
|
|
for (int i = 0; i < m_FriendArray.Size(); ++i)
|
|
{
|
|
if (m_FriendArray[i].dwFriendGuid == character_guid)
|
|
{
|
|
return &(m_FriendArray[i]);
|
|
}
|
|
}
|
|
}
|
|
else if (GetMode() == eCM_REVENGE)
|
|
{
|
|
for (int i = 0; i < m_RevengeArray.Size(); ++i)
|
|
{
|
|
if (m_RevengeArray[i].dwFriendGuid == character_guid)
|
|
{
|
|
return &(m_RevengeArray[i]);
|
|
}
|
|
}
|
|
}
|
|
else if(GetMode() == eCM_GROUP)
|
|
{
|
|
for (int i = 0; i < m_GroupArray.Size(); ++i)
|
|
{
|
|
if (m_GroupArray[i].dwFriendGuid == character_guid)
|
|
{
|
|
return &(m_GroupArray[i]);
|
|
}
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::Send_CW_GROUP_STATUS_REQ(CHAR *ptszCharName)
|
|
{
|
|
this->SetPendingInfoMode(GetMode());
|
|
|
|
MSG_CW_GROUP_STATUS_REQ sync;
|
|
|
|
ZeroMemory(&sync.m_ptszCharName, sizeof(sync.m_ptszCharName));
|
|
StrnCopy(sync.m_ptszCharName, ptszCharName, MAX_CHARNAME_LENGTH);
|
|
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetGroupInfo(FRIEND_INFO_DATA info)
|
|
{
|
|
CopyMemory(&m_GroupInfo, &info, sizeof(FRIEND_INFO_DATA));
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/** 쪽지내용을 파싱해서 어떤메모타입인지 체크한다.
|
|
*/
|
|
INT64 uiCommunityMan::ParseMemoInfo(char *pStr,int nIndex,int nBufSize, unsigned int uBufSize, char *pDest)
|
|
{
|
|
if(!pStr) return -1;
|
|
|
|
char szTemp[INTERFACE_STRING_LENGTH+1]={0,};
|
|
|
|
int nNeedIndex= 0;
|
|
int nStep=0;
|
|
|
|
for(int i=0;i<nBufSize;++i)
|
|
{
|
|
//마지막문자열이면 무조건 끝낸다
|
|
if(pStr[i]=='\0')
|
|
{
|
|
szTemp[nStep] = pStr[i];
|
|
if(pDest && uBufSize > 0)
|
|
{
|
|
StrnCopy(pDest, szTemp, uBufSize);
|
|
}
|
|
INT64 nNum = _atoi64(szTemp);
|
|
return nNum;
|
|
}
|
|
|
|
//구분자 체크
|
|
if(pStr[i]=='|')
|
|
{
|
|
//원하던인덱스를찾았다면 변환후 리턴해준다.
|
|
if(nNeedIndex==nIndex)
|
|
{
|
|
szTemp[i] = '\0';
|
|
if(pDest && uBufSize > 0)
|
|
{
|
|
StrnCopy(pDest, szTemp, uBufSize);
|
|
}
|
|
INT64 nNum = _atoi64(szTemp);
|
|
_asm nop;
|
|
return nNum;
|
|
}
|
|
else
|
|
{
|
|
++nNeedIndex;
|
|
nStep = 0;
|
|
memset(szTemp,0,sizeof(szTemp));
|
|
continue;
|
|
}
|
|
}
|
|
szTemp[nStep] = pStr[i];
|
|
++nStep;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::Send_CW_FRIEND_STATUS_REQ(CHAR *ptszCharName, CHARGUID char_guid)
|
|
{
|
|
this->SetPendingInfoMode(GetMode());
|
|
|
|
MSG_CW_FRIEND_STATUS_REQ sync;
|
|
|
|
#ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
if (char_guid <= 0)
|
|
{
|
|
return;
|
|
}
|
|
sync.m_dwToCharGuid = char_guid;
|
|
#else
|
|
ZeroMemory(&sync.m_ptszCharName, sizeof(sync.m_ptszCharName));
|
|
StrnCopy(sync.m_ptszCharName, ptszCharName, MAX_CHARNAME_LENGTH);
|
|
#endif //_NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
|
|
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::Send_CW_FRIEND_STATUS_JOIN_SYN()
|
|
{
|
|
if(m_FriendInfo.m_byZoneType == eZONETYPE_LOBBY)
|
|
{
|
|
MSG_CW_FRIEND_STATUS_JOIN_SYN sync;
|
|
|
|
ZeroMemory(&sync.m_ptszCharName, sizeof(sync.m_ptszCharName));
|
|
StrnCopy(sync.m_ptszCharName, m_FriendInfo.m_ptszCharName, MAX_CHARNAME_LENGTH);
|
|
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
}
|
|
else
|
|
{
|
|
// 5450 로비에 있는 친구에게만 사용할 수 있습니다.
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
g_InterfaceManager.GetInterfaceString(5450, szMessage, INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetFriendInfo(FRIEND_INFO_DATA info)
|
|
{
|
|
CopyMemory(&m_FriendInfo, &info, sizeof(FRIEND_INFO_DATA));
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool uiCommunityMan::IsMyChannel()
|
|
{
|
|
uiLoginMan *pLoginMan = static_cast<uiLoginMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_LOGIN));
|
|
if (pLoginMan)
|
|
{
|
|
AuthSetverData* pServerData = pLoginMan->GetCurrentServerData();
|
|
if (pServerData->m_ChannelID == m_FriendInfo.m_byChannel)
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
BYTE uiCommunityMan::GetMyChannel()
|
|
{
|
|
uiLoginMan *pLoginMan = static_cast<uiLoginMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_LOGIN));
|
|
if (pLoginMan)
|
|
{
|
|
AuthSetverData* pServerData = pLoginMan->GetCurrentServerData();
|
|
if (pServerData)
|
|
return pServerData->m_ChannelID;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
LPCTSTR uiCommunityMan::GetMyServer()
|
|
{
|
|
uiLoginMan *pLoginMan = static_cast<uiLoginMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_LOGIN));
|
|
if (pLoginMan)
|
|
{
|
|
AuthSetverData* pServerData = pLoginMan->GetCurrentServerData();
|
|
if (pServerData)
|
|
return pServerData->m_GroupName.c_str();
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetWaitJoinGame(bool bWait)
|
|
{
|
|
m_bWaitJoinGame = bWait;
|
|
|
|
if(bWait)
|
|
{
|
|
m_PacketTimer.SetTimer(60000); // 60초 대기
|
|
}
|
|
else
|
|
{
|
|
m_PacketTimer.Clear();
|
|
}
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ClearFriendData()
|
|
{
|
|
m_bRecvMemberInfo = false;
|
|
m_iNewFriendChat = 0;
|
|
|
|
m_bRecvMailInfo = false;
|
|
|
|
m_vecMailData.clear();
|
|
|
|
m_chatDlgArray.Clear();
|
|
m_FriendArray.Clear();
|
|
m_BlockFriendArray.Clear();
|
|
m_RevengeArray.Clear();
|
|
|
|
m_bRecvGroupMemberInfo = false;
|
|
m_GroupArray.Clear();
|
|
|
|
m_byRevengePoint = 0;
|
|
|
|
SetWaitJoinGame(false);
|
|
|
|
ClearPendingData();
|
|
onlined_friend_count_ = 0;
|
|
onlined_group_count_ = 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ClearSelection()
|
|
{
|
|
m_iCurFriendSelect = -1;
|
|
m_iCurBlockSelect = -1;
|
|
m_iCurRevengeSelect = -1;
|
|
m_iCurMailSelect = -1;
|
|
m_iCurGroupSelect = -1;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ClearPendingData()
|
|
{
|
|
ZeroMemory(m_szPendingDelFriend, sizeof(m_szPendingDelFriend));
|
|
ZeroMemory(m_szPendingDelBlock, sizeof(m_szPendingDelBlock));
|
|
ZeroMemory(m_szPendingDelRevenge, sizeof(m_szPendingDelRevenge));
|
|
|
|
m_iPendingInfoMode = eCM_FRIEND;
|
|
|
|
m_PendingDelMemoGuid = 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetPendingDelFriend(TCHAR* pName)
|
|
{
|
|
if(pName == NULL)
|
|
ZeroMemory(m_szPendingDelFriend, sizeof(m_szPendingDelFriend));
|
|
else
|
|
StrnCopy(m_szPendingDelFriend, pName, MAX_CHARNAME_LENGTH);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetPendingDelBlock(TCHAR* pName)
|
|
{
|
|
if(pName == NULL)
|
|
ZeroMemory(m_szPendingDelBlock, sizeof(m_szPendingDelBlock));
|
|
else
|
|
StrnCopy(m_szPendingDelBlock, pName, MAX_CHARNAME_LENGTH);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetPendingDelRevenge(TCHAR* pName)
|
|
{
|
|
if(pName == NULL)
|
|
ZeroMemory(m_szPendingDelRevenge, sizeof(m_szPendingDelRevenge));
|
|
else
|
|
StrnCopy(m_szPendingDelRevenge, pName, MAX_CHARNAME_LENGTH);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetPendingDelGroup(TCHAR* pName)
|
|
{
|
|
if(pName == NULL)
|
|
ZeroMemory(m_szPendingDelGroup, sizeof(m_szPendingDelGroup));
|
|
else
|
|
StrnCopy(m_szPendingDelGroup, pName, MAX_CHARNAME_LENGTH);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::AddFriend( const STRUCT_FRIEND_PACKET_INFO& friend_info, DWORD guild_id )
|
|
{
|
|
FRIEND_DATA data;
|
|
data.name = friend_info.ptszFriendName;
|
|
data.bOnline = friend_info.bOnline;
|
|
data.lv = friend_info.Level;
|
|
data.bClassCode = friend_info.byClass;
|
|
data.byChannel = friend_info.byChannel;
|
|
data.dwFriendGuid = guild_id;
|
|
data.byFriendSts = STRUCT_FRIEND_DB_INFO::INFO_FRIEND; // INFO_FRIEND: 일반 친구
|
|
|
|
#ifdef _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
|
|
data.gender = friend_info.gender;
|
|
#endif //_NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
|
|
|
|
m_FriendArray.PushBack(data);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
BOOL uiCommunityMan::DeleteFriend(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_FriendArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_FriendArray[i].name.Get(),pName))
|
|
{
|
|
int index = FindChatDialog(pName);
|
|
if(index != -1)
|
|
{
|
|
DeleteChatDlgId(m_chatDlgArray[index].dwDlgId);
|
|
}
|
|
|
|
m_FriendArray.Erase(i);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
int uiCommunityMan::FindFriend(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_FriendArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_FriendArray[i].name.Get(),pName))
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
int uiCommunityMan::FindBlockFriend(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_BlockFriendArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_BlockFriendArray[i].name.Get(),pName))
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetFriendOnline(TCHAR *pName, BOOL bOn, BYTE byChannel)
|
|
{
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH] = {0,};
|
|
StrnCopy(szWideString, pName, MAX_CHARNAME_LENGTH);
|
|
|
|
int index = FindFriend(szWideString);
|
|
|
|
if(index != -1)
|
|
{
|
|
m_FriendArray[index].bOnline = bOn;
|
|
m_FriendArray[index].byChannel = byChannel;
|
|
if (bOn != 0)
|
|
{
|
|
++onlined_friend_count_;
|
|
}
|
|
else
|
|
{
|
|
--onlined_friend_count_;
|
|
}
|
|
|
|
if (GetMode() == eCM_FRIEND)
|
|
{
|
|
if (m_pUICommunityDlg)
|
|
{
|
|
m_pUICommunityDlg->RefreshOnlineMember(eCM_FRIEND);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetFriendLevel(TCHAR *pName, LEVELTYPE lv)
|
|
{
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH] = {0,};
|
|
StrnCopy(szWideString, pName, MAX_CHARNAME_LENGTH);
|
|
|
|
int index = FindFriend(szWideString);
|
|
|
|
if(index != -1)
|
|
{
|
|
m_FriendArray[index].lv = lv;
|
|
}
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::AddBlockFriend(TCHAR *pName)
|
|
{
|
|
FRIEND_DATA data;
|
|
|
|
data.name = pName;
|
|
|
|
int index = FindChatDialog(pName);
|
|
if(index != -1)
|
|
{
|
|
DeleteChatDlgId(m_chatDlgArray[index].dwDlgId);
|
|
}
|
|
|
|
m_BlockFriendArray.PushBack(data);
|
|
|
|
//차단된 캐릭터가 친구라면 친구관계 설정 변경
|
|
for (int i=0;i<m_FriendArray.Size();++i)
|
|
{
|
|
if (!Strcmp(m_FriendArray[i].name.Get(), pName))
|
|
{
|
|
if (m_FriendArray[i].byFriendSts == STRUCT_FRIEND_DB_INFO::INFO_INVIAT) // 친구관계 친구라면
|
|
{
|
|
m_FriendArray[i].byFriendSts = STRUCT_FRIEND_DB_INFO::INFO_BLOCKED_INVIAT; // 차단된 친구관계
|
|
}
|
|
else if (m_FriendArray[i].byFriendSts == STRUCT_FRIEND_DB_INFO::INFO_BEINVIATED) // 친구관계 친구라면
|
|
{
|
|
m_FriendArray[i].byFriendSts = STRUCT_FRIEND_DB_INFO::INFO_BLOCKED_BEINVIATED; // 차단된 친구관계
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
BOOL uiCommunityMan::DeleteBlockFriend(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_BlockFriendArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_BlockFriendArray[i].name.Get(),pName))
|
|
{
|
|
m_BlockFriendArray.Erase(i);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
//차단된 캐릭터가 친구라면 친구관계 설정 변경
|
|
for(int i=0;i<m_FriendArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_FriendArray[i].name.Get(),pName))
|
|
{
|
|
if(m_FriendArray[i].byFriendSts == STRUCT_FRIEND_DB_INFO::INFO_BLOCKED_INVIAT) // 친구관계 친구라면
|
|
{
|
|
m_FriendArray[i].byFriendSts = STRUCT_FRIEND_DB_INFO::INFO_INVIAT; // 차단된 친구관계
|
|
}
|
|
else if(m_FriendArray[i].byFriendSts == STRUCT_FRIEND_DB_INFO::INFO_BLOCKED_BEINVIATED) // 친구관계 친구라면
|
|
{
|
|
m_FriendArray[i].byFriendSts = STRUCT_FRIEND_DB_INFO::INFO_BEINVIATED; // 차단된 친구관계
|
|
}
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
BOOL uiCommunityMan::IsOnline(TCHAR *pName)
|
|
{
|
|
if (m_pUICommunityInfo->request_uimanager_id() == UIMAN_GUILD)
|
|
{
|
|
#ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
|
|
GUILD_MEMBER_INFO* guild_member_info =
|
|
GuildSystem::GetGuildSystemData().GetGuildMemberInfo(pName);
|
|
if (guild_member_info != NULL)
|
|
{
|
|
return guild_member_info->m_bLogin;
|
|
}
|
|
#else
|
|
uiGuildMan* guild_manager = static_cast<uiGuildMan*>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_GUILD));
|
|
if (guild_manager)
|
|
{
|
|
stGUILD_MEMBER_INFO* member_info = guild_manager->GetGuildMemberInfo(pName);
|
|
if (member_info)
|
|
{
|
|
return member_info->m_bLogin;
|
|
}
|
|
}
|
|
#endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
|
|
return false;
|
|
}
|
|
|
|
if(GetMode() == eCM_FRIEND)
|
|
{
|
|
for(int i=0;i<m_FriendArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_FriendArray[i].name.Get(),pName))
|
|
{
|
|
return m_FriendArray[i].bOnline;
|
|
}
|
|
}
|
|
}
|
|
else if(GetMode() == eCM_REVENGE)
|
|
{
|
|
for(int i=0;i<m_RevengeArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_RevengeArray[i].name.Get(),pName))
|
|
{
|
|
return m_RevengeArray[i].bOnline;
|
|
}
|
|
}
|
|
}
|
|
else if(GetMode() == eCM_GROUP)
|
|
{
|
|
for(int i=0;i<m_GroupArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_GroupArray[i].name.Get(),pName))
|
|
{
|
|
return m_GroupArray[i].bOnline;
|
|
}
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
BYTE uiCommunityMan::IsFriendSts(TCHAR *pName)
|
|
{
|
|
if(GetMode() == eCM_FRIEND)
|
|
{
|
|
for(int i=0;i<m_FriendArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_FriendArray[i].name.Get(),pName))
|
|
{
|
|
return m_FriendArray[i].byFriendSts;
|
|
}
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
TCHAR* uiCommunityMan::GetSelectString()
|
|
{
|
|
if(GetMode() == eCM_FRIEND) // 친구
|
|
{
|
|
return GetFriendSelectString();
|
|
}
|
|
else if(GetMode() == eCM_BLOCK) // 차단
|
|
{
|
|
return GetBlockFriendSelectString();
|
|
}
|
|
else if(GetMode() == eCM_GROUP) // 그룹
|
|
{
|
|
return GetGroupSelectString();
|
|
}
|
|
else // 리벤지
|
|
{
|
|
return GetRevengeSelectString();
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
TCHAR* uiCommunityMan::GetFriendSelectString()
|
|
{
|
|
if(m_pUICommunityDlg)
|
|
{
|
|
m_iCurFriendSelect = m_pUICommunityDlg->GetCurListSel();
|
|
|
|
if((m_iCurFriendSelect >= 0) && (m_iCurFriendSelect < m_FriendArray.Size()))
|
|
{
|
|
FRIEND_DATA *pData = m_pUICommunityDlg->GetCurData(m_iCurFriendSelect);
|
|
if(pData)
|
|
{
|
|
return (TCHAR *)pData->name.Get();
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
TCHAR* uiCommunityMan::GetBlockFriendSelectString()
|
|
{
|
|
if(m_pUICommunityDlg)
|
|
{
|
|
m_iCurBlockSelect = m_pUICommunityDlg->GetCurListSel() + m_pUICommunityDlg->GetCurScrollCount();
|
|
|
|
if((m_iCurBlockSelect >= 0) && (m_iCurBlockSelect < m_BlockFriendArray.Size()))
|
|
{
|
|
if (m_BlockFriendArray.Size())
|
|
{
|
|
assert(m_iCurBlockSelect<m_BlockFriendArray.Size());
|
|
return (TCHAR *)m_BlockFriendArray[m_iCurBlockSelect].name.Get();
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
BOOL uiCommunityMan::DeleteChatDlgId(DWORD dwId)
|
|
{
|
|
for(int i=0;i<m_chatDlgArray.Size();++i)
|
|
{
|
|
if(m_chatDlgArray[i].dwDlgId==dwId)
|
|
{
|
|
m_chatDlgArray.Erase(i);
|
|
|
|
SolarDialog *pDlg=g_InterfaceManager.GetDialog((WzID)dwId);
|
|
if(pDlg)
|
|
{
|
|
pDlg->ShowDialog(FALSE);
|
|
pDlg->SetDestroyWindow(TRUE);
|
|
}
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::AddFriendChatData(FRIEND_CHAT_DATA & data)
|
|
{
|
|
m_chatDlgArray.Append(data);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
int uiCommunityMan::FindChatDialog(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_chatDlgArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_chatDlgArray[i].name.Get(),pName))
|
|
{
|
|
if(m_chatDlgArray[i].dwDlgId == -1)
|
|
{
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::RemoveAllChatDialog()
|
|
{
|
|
for(int i=0;i<m_chatDlgArray.Size();++i)
|
|
{
|
|
SolarDialog *pDlg = g_InterfaceManager.GetDialog((WzID)m_chatDlgArray[i].dwDlgId);
|
|
if(pDlg)
|
|
{
|
|
pDlg->ShowDialog(FALSE);
|
|
pDlg->SetDestroyWindow(TRUE);
|
|
}
|
|
}
|
|
|
|
m_iNewFriendChat = 0;
|
|
m_chatDlgArray.Clear();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetMessageRejection(BOOL bRejection)
|
|
{
|
|
m_bRejectChat = (bRejection != FALSE);
|
|
|
|
if(bRejection)
|
|
{
|
|
RemoveAllChatDialog();
|
|
}
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SEND_CW_FRIEND_NEWLIST_SYN()
|
|
{
|
|
if(!m_bRecvMemberInfo)
|
|
{
|
|
//친구 리스트요청
|
|
MSG_CW_FRIEND_NEWLIST_SYN sync;
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
|
|
//메시지 거부상태 세팅
|
|
MSG_CW_FRIEND_CHATBLOCK_SYN sync2;
|
|
|
|
sync2.m_bBlock = m_bRejectChat;
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync2, sizeof (sync2));
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ShowRevengeResultCode(BYTE bError)
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
|
|
if(bError==RC_REVENGE_FAILED)
|
|
{
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, _T("알수 없는 에러") );
|
|
|
|
}
|
|
else if(bError==RC_REVENGE_NO_POINT)
|
|
{
|
|
// 리벤지 포인트가 부족합니다 5276
|
|
g_InterfaceManager.GetInterfaceString(eST_INSUFFICIENT_REVENGE_POINT ,szMessage ,INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
else if(bError==RC_REVENGE_INVALID_CHAR)
|
|
{
|
|
// 리벤지 대상이 아닙니다. 5277
|
|
g_InterfaceManager.GetInterfaceString(eST_INVALID_REVENGE_PERSON ,szMessage ,INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
}
|
|
else if(bError==RC_REVENGE_INVALID_SITUATION)
|
|
{
|
|
//리벤지 가능한 상황이 아닙니다. 5278
|
|
g_InterfaceManager.GetInterfaceString(eST_INVALID_REVENGE_STATUS ,szMessage ,INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
|
|
}
|
|
else if(bError==RC_REVENGE_NO_CHAR)
|
|
{
|
|
// 대상이 존재하지 않습니다. 5279
|
|
g_InterfaceManager.GetInterfaceString(eST_NO_EXIST_REVENGE_PERSON ,szMessage ,INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::AddRevenge(TCHAR *pName, LEVELTYPE lv, BYTE bClassCode, BOOL bOnline,
|
|
BYTE byChannel, CHARGUID character_guid)
|
|
{
|
|
FRIEND_DATA data;
|
|
|
|
data.name = pName;
|
|
data.bOnline = bOnline;
|
|
data.lv = lv;
|
|
data.bClassCode = bClassCode;
|
|
data.byChannel = byChannel;
|
|
data.byFriendSts = 1;//일반친구
|
|
data.dwFriendGuid = character_guid;
|
|
|
|
m_RevengeArray.PushBack(data);
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
BOOL uiCommunityMan::DeleteRevenge(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_RevengeArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_RevengeArray[i].name.Get(),pName))
|
|
{
|
|
int index = FindChatDialog(pName);
|
|
if(index != -1)
|
|
{
|
|
DeleteChatDlgId(m_chatDlgArray[index].dwDlgId);
|
|
}
|
|
|
|
m_RevengeArray.Erase(i);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
int uiCommunityMan::FindRevenge(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_RevengeArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_RevengeArray[i].name.Get(),pName))
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
void uiCommunityMan::SetRevengeOnline(TCHAR *pName, BOOL bOn, BYTE byChannel)
|
|
{
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH] = {0,};
|
|
StrnCopy(szWideString, pName, MAX_CHARNAME_LENGTH);
|
|
|
|
int index = FindRevenge(szWideString);
|
|
|
|
if(index != -1)
|
|
{
|
|
m_RevengeArray[index].bOnline = bOn;
|
|
m_RevengeArray[index].byChannel = byChannel;
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetRevengeLevel(TCHAR *pName, LEVELTYPE lv)
|
|
{
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH] = {0,};
|
|
StrnCopy(szWideString, pName, MAX_CHARNAME_LENGTH);
|
|
|
|
int index = FindRevenge(szWideString);
|
|
|
|
if(index != -1)
|
|
{
|
|
m_RevengeArray[index].lv = lv;
|
|
}
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
TCHAR * uiCommunityMan::GetRevengeSelectString()
|
|
{
|
|
if(m_pUICommunityDlg)
|
|
{
|
|
m_iCurRevengeSelect = m_pUICommunityDlg->GetCurListSel();
|
|
|
|
if((m_iCurRevengeSelect >= 0) && (m_iCurRevengeSelect < m_RevengeArray.Size()))
|
|
{
|
|
FRIEND_DATA *pData = m_pUICommunityDlg->GetCurData(m_iCurRevengeSelect);
|
|
if(pData)
|
|
{
|
|
return (TCHAR *)pData->name.Get();
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::AddGroup(TCHAR *pName, LEVELTYPE lv, BYTE bClassCode, BOOL bOnline,
|
|
BYTE byChannel, BYTE byMaster, INT64 i64LastDate,
|
|
CHARGUID character_guid)
|
|
{
|
|
FRIEND_DATA data;
|
|
|
|
data.name = pName;
|
|
data.bOnline = bOnline;
|
|
data.lv = lv;
|
|
data.bClassCode = bClassCode;
|
|
data.byChannel = byChannel;
|
|
data.byMaster = byMaster;
|
|
data.lastDate = i64LastDate;
|
|
data.dwFriendGuid = character_guid; // 그룹은 guid를 쓰지 않는다
|
|
data.byFriendSts = STRUCT_FRIEND_DB_INFO::INFO_FRIEND; // INFO_FRIEND: 일반 친구
|
|
m_GroupArray.PushBack(data);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
BOOL uiCommunityMan::DeleteGroup(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_GroupArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_GroupArray[i].name.Get(),pName))
|
|
{
|
|
int index = FindChatDialog(pName);
|
|
if(index != -1)
|
|
{
|
|
DeleteChatDlgId(m_chatDlgArray[index].dwDlgId);
|
|
}
|
|
m_GroupArray.Erase(i);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetGroupOnline(TCHAR *pName, BOOL bOn, BYTE byChannel)
|
|
{
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH] = {0,};
|
|
StrnCopy(szWideString, pName, MAX_CHARNAME_LENGTH);
|
|
|
|
int index = FindGroup(szWideString);
|
|
|
|
if(index != -1)
|
|
{
|
|
m_GroupArray[index].bOnline = bOn;
|
|
m_GroupArray[index].byChannel = byChannel;
|
|
m_GroupArray[index].lastDate = GetNowTimeINT64();// 로그아웃시간 설정(현재시간으로)
|
|
if (bOn != 0)
|
|
{
|
|
++onlined_group_count_;
|
|
}
|
|
else
|
|
{
|
|
--onlined_group_count_;
|
|
}
|
|
|
|
if (GetMode() == eCM_GROUP)
|
|
{
|
|
if (m_pUICommunityDlg)
|
|
{
|
|
m_pUICommunityDlg->RefreshOnlineMember(eCM_GROUP);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
INT64 uiCommunityMan::GetNowTimeINT64()
|
|
{
|
|
DWORD64 time = 0;
|
|
return (INT64)GetDateTime_YYYYMMDDHHMM(time);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool uiCommunityMan::CheckGroupLevel()
|
|
{
|
|
bool bRes = false;
|
|
if(m_GroupMessageTimer.GetRemainedTime() <= 0) // 시간이 끝났다면
|
|
{
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH] = {0,};
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
TCHAR szVal[INTERFACE_STRING_LENGTH + 1] = {0,};
|
|
|
|
for(int i = 0; i < m_GroupArray.Size(); ++i)
|
|
{
|
|
if(g_pHero && (m_GroupArray[i].lv >= g_pHero->GetLevel()) && m_GroupArray[i].byMaster == GROUP_LEVEL_LOW)
|
|
{
|
|
// 메시지를 출력하고
|
|
// %s님의 레벨이 동일하거나 더 높아 그룹 효과를 받을 수 없습니다.
|
|
StrnCopy(szWideString, m_GroupArray[i].name.Get(), MAX_CHARNAME_LENGTH);
|
|
g_InterfaceManager.GetInterfaceString(7044, szMessage, INTERFACE_STRING_LENGTH);
|
|
//
|
|
Sprintf(szVal, szMessage, szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
|
|
bRes = true;
|
|
}
|
|
}
|
|
m_GroupMessageTimer.SetTimer(GROUP_MESSAGE_TIMER); // 설정 10분
|
|
}
|
|
return bRes;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::CheckGroupLevelfromHero()
|
|
{
|
|
bool bRes = true;
|
|
for(int i = 0; i < m_GroupArray.Size(); ++i)
|
|
{
|
|
if(g_pHero && m_GroupArray[i].lv >= g_pHero->GetLevel() && m_GroupArray[i].byMaster == GROUP_LEVEL_LOW)
|
|
{
|
|
bRes = false; // 한명이라도 나보다 레벨이 높거나 같으면 Timer를 지우지 않는다.
|
|
break;
|
|
}
|
|
}
|
|
if(bRes)
|
|
{
|
|
ClearGroupTimer();
|
|
}
|
|
else
|
|
{
|
|
if(m_GroupMessageTimer.GetRemainedTime() <= 0) // 타이머가 없는 경우
|
|
{
|
|
SetGroupTimer(1000); // 타이머를 켠다. 1초
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetGroupTimer(DWORD dwTime)
|
|
{
|
|
m_GroupMessageTimer.SetTimer(dwTime);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ClearGroupTimer()
|
|
{
|
|
m_GroupMessageTimer.Clear();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetGroupLevel(TCHAR *pName, LEVELTYPE lv)
|
|
{
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH] = {0,};
|
|
StrnCopy(szWideString, pName, MAX_CHARNAME_LENGTH);
|
|
|
|
int index = FindGroup(szWideString);
|
|
|
|
if(index != -1)
|
|
{
|
|
m_GroupArray[index].lv = lv;
|
|
}
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
int uiCommunityMan::FindGroup(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_GroupArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_GroupArray[i].name.Get(),pName))
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
TCHAR* uiCommunityMan::GetGroupSelectString()
|
|
{
|
|
if(m_pUICommunityDlg)
|
|
{
|
|
m_iCurGroupSelect = m_pUICommunityDlg->GetCurListSel();
|
|
|
|
if((m_iCurGroupSelect >= 0) && (m_iCurFriendSelect < m_GroupArray.Size()))
|
|
{
|
|
FRIEND_DATA *pData = m_pUICommunityDlg->GetCurData(m_iCurGroupSelect);
|
|
if(pData)
|
|
{
|
|
return (TCHAR *)pData->name.Get();
|
|
}
|
|
else
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SEND_CW_GROUP_RESTORELIST_SYN()
|
|
{
|
|
//그룹 정보 복구요청
|
|
if(m_bRecvGroupMemberInfo) // true일땐 존 이동시만
|
|
{
|
|
MSG_CW_GROUP_RESTOR_CMD sync;
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SEND_CW_GROUP_NEWLIST_SYN()
|
|
{
|
|
if(!m_bRecvGroupMemberInfo) // false일땐 최초시만
|
|
{
|
|
//그룹 리스트요청
|
|
MSG_CW_GROUP_GROUPLIST_REQ sync;
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
|
|
//그룹 신청 거부상태 세팅
|
|
MSG_CW_GROUP_ADDBLOCK_SYN sync2;
|
|
sync2.m_bBlock = m_bRejectGroup;
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync2, sizeof (sync2));
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetGroupName(char *pName)
|
|
{
|
|
StrnCopy(m_GroupName, pName, MAX_CHARNAME_LENGTH);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
const char *uiCommunityMan::GetGroupName()
|
|
{
|
|
return (const char*) m_GroupName;
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void _Confirm_ReponseJoinGroup(bool bYes)
|
|
{
|
|
uiCommunityMan * pMan = (uiCommunityMan * ) g_InterfaceManager.GetUserInterfaceManager(UIMAN_COMMUNITY);
|
|
assert(pMan);
|
|
|
|
if (bYes)
|
|
{
|
|
pMan->SetOpenGroupJoinWindow(FALSE);
|
|
MSG_CW_GROUP_ADD_RESPONSE_ACK sync;
|
|
ZeroMemory(sync.ptszMemeberName, sizeof(sync.ptszMemeberName));
|
|
StrnCopy(sync.ptszMemeberName, pMan->GetGroupName(), MAX_CHARNAME_LENGTH);
|
|
|
|
GlobalFunc::SendPacketToWorldServer(&sync, sizeof (sync));
|
|
}
|
|
else
|
|
{
|
|
pMan->SetOpenGroupJoinWindow(FALSE);
|
|
MSG_CW_GROUP_ADD_RESPONSE_NAK sync;
|
|
ZeroMemory(sync.ptszMemeberName, sizeof(sync.ptszMemeberName));
|
|
StrnCopy(sync.ptszMemeberName, pMan->GetGroupName(), MAX_CHARNAME_LENGTH);
|
|
sync.m_byResult = MSG_CW_GROUP_ADD_RESPONSE_NAK::IGNOR_ADD_MEMBER;
|
|
|
|
GlobalFunc::SendPacketToWorldServer(&sync, sizeof (sync));
|
|
}
|
|
|
|
if( g_pHero )
|
|
{
|
|
g_pHero->SetWaitingInviateGroup(false);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ResponseJoinGroup(char *pszMasterName)
|
|
{
|
|
// 이미 그룹창이 열려 있으면 리턴
|
|
if( m_bIsOpenGroupJoinWinodw )
|
|
return;
|
|
|
|
m_bIsOpenGroupJoinWinodw = TRUE;
|
|
DWORD dwUIiD = 0;
|
|
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
TCHAR szResult[INTERFACE_STRING_LENGTH] = {0,};
|
|
|
|
// 7032 : %s님으로부터 그룹 멤버 등록 권유 메시지가 도착했습니다.
|
|
g_InterfaceManager.GetInterfaceString(7032,szMessage,INTERFACE_STRING_LENGTH);
|
|
Snprintf (szResult,INTERFACE_STRING_LENGTH-1, szMessage, pszMasterName);
|
|
|
|
SetGroupName(pszMasterName);
|
|
|
|
uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM);
|
|
if(pSystemMan)
|
|
{
|
|
pSystemMan->Sys_Confirm(szResult, _Confirm_ReponseJoinGroup, NULL, NULL, 100, 101, false, 15000);
|
|
}
|
|
|
|
if( g_pHero )
|
|
{
|
|
g_pHero->SetWaitingInviateGroup(true);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetGroupRejection(BOOL bRejection)
|
|
{
|
|
m_bRejectGroup = (bRejection != FALSE);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/** 기본 소트
|
|
*/
|
|
bool _BaseSort_Name(const FRIEND_DATA &a, const FRIEND_DATA &b, bool bOrderBy)
|
|
{
|
|
if(bOrderBy)
|
|
{
|
|
return (a.name < b.name);
|
|
}
|
|
else
|
|
{
|
|
return (a.name >= b.name);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool _BaseSort_Lv(const FRIEND_DATA &a, const FRIEND_DATA &b, bool bOrderBy)
|
|
{
|
|
if(a.lv == b.lv) // 같은 경우 다시 이름순으로 정렬
|
|
{
|
|
return (a.name < b.name);
|
|
}
|
|
|
|
if(bOrderBy)
|
|
{
|
|
return (a.lv < b.lv);
|
|
}
|
|
else
|
|
{
|
|
return (a.lv >= b.lv);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool _BaseSort_Class(const FRIEND_DATA &a, const FRIEND_DATA &b, bool bOrderBy)
|
|
{
|
|
int j;
|
|
TCHAR szTemp[2][INTERFACE_STRING_LENGTH] = {0,};
|
|
|
|
for(int i = 0; i < 2; ++i)
|
|
{
|
|
if(i == 0)
|
|
j = a.bClassCode;
|
|
else if(i == 1)
|
|
j = b.bClassCode;
|
|
else
|
|
j = -1;
|
|
|
|
Snprintf(szTemp[i],
|
|
INTERFACE_STRING_LENGTH,
|
|
_T("%s"),
|
|
GlobalFunc::GetClassString(static_cast<eCHAR_TYPE>(j)));
|
|
}
|
|
|
|
if(strcmp(szTemp[0], szTemp[1])==0) // 같은 경우 다시 이름순으로 정렬
|
|
{
|
|
return (a.name < b.name);
|
|
}
|
|
|
|
if(bOrderBy)
|
|
{
|
|
return (strcmp(szTemp[0], szTemp[1])<0);
|
|
}
|
|
else
|
|
{
|
|
return (strcmp(szTemp[0], szTemp[1])>=0);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool _BaseSort_byChannel(const FRIEND_DATA &a, const FRIEND_DATA &b, bool bOrderBy)
|
|
{
|
|
if(a.byChannel == b.byChannel) // 같은 경우 다시 이름순으로 정렬
|
|
{
|
|
return (a.name < b.name);
|
|
}
|
|
|
|
if(bOrderBy)
|
|
{
|
|
return (a.byChannel < b.byChannel);
|
|
}
|
|
else
|
|
{
|
|
return (a.byChannel >= b.byChannel);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool _BaseSort_bOnline(const FRIEND_DATA &a, const FRIEND_DATA &b, bool bOrderBy)
|
|
{
|
|
if(a.byChannel == b.byChannel) // 같은 경우 다시 이름순으로 정렬
|
|
{
|
|
return (a.name < b.name);
|
|
}
|
|
|
|
if(bOrderBy)
|
|
{
|
|
return (a.bOnline < b.bOnline);
|
|
}
|
|
else
|
|
{
|
|
return (a.bOnline >= b.bOnline);
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool _BaseSort_NameMail(const MAIL_DATA &a, const MAIL_DATA &b, bool bOrderBy)
|
|
{
|
|
if(!strcmp(a.m_subject.m_SendName, b.m_subject.m_SendName)) // 같은 경우 다시 날짜순으로 정렬
|
|
{
|
|
return (0 < strcmp(a.m_subject.m_tszCreateDate, b.m_subject.m_tszCreateDate));
|
|
}
|
|
|
|
if(bOrderBy)
|
|
{
|
|
return (0 < strcmp(a.m_subject.m_SendName, b.m_subject.m_SendName));
|
|
}
|
|
else
|
|
{
|
|
return (0 > strcmp(a.m_subject.m_SendName, b.m_subject.m_SendName));
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool _BaseSort_DateMail(const MAIL_DATA &a, const MAIL_DATA &b, bool bOrderBy)
|
|
{
|
|
if(!strcmp(a.m_subject.m_tszCreateDate, b.m_subject.m_tszCreateDate)) // 같은 경우 다시 이름순으로 정렬
|
|
{
|
|
return (0 < strcmp(a.m_subject.m_SendName, b.m_subject.m_SendName));
|
|
}
|
|
|
|
if(bOrderBy)
|
|
{
|
|
return (0 < strcmp(a.m_subject.m_tszCreateDate, b.m_subject.m_tszCreateDate));
|
|
}
|
|
else
|
|
{
|
|
return (0 > strcmp(a.m_subject.m_tszCreateDate, b.m_subject.m_tszCreateDate));
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool _BaseSort_MemoMail(const MAIL_DATA &a, const MAIL_DATA &b, bool bOrderBy)
|
|
{
|
|
if(!strcmp(a.m_subject.m_ptszSubject, b.m_subject.m_ptszSubject)) // 같은 경우 다시 날짜순으로 정렬
|
|
{
|
|
return (0 < strcmp(a.m_subject.m_tszCreateDate, b.m_subject.m_tszCreateDate));
|
|
}
|
|
|
|
if(bOrderBy)
|
|
{
|
|
return (0 < strcmp(a.m_subject.m_ptszSubject, b.m_subject.m_ptszSubject));
|
|
}
|
|
else
|
|
{
|
|
return (0 > strcmp(a.m_subject.m_ptszSubject, b.m_subject.m_ptszSubject));
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/** 오름차순 GetOrderBy()==true / 내림차순 GetOrderBy()==false
|
|
*/
|
|
uiCommunityMan* GetCommunityMan()
|
|
{
|
|
static uiCommunityMan* pCommMan = static_cast<uiCommunityMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_COMMUNITY));
|
|
return pCommMan;
|
|
}
|
|
|
|
bool _Sort_Name(const FRIEND_DATA &a, const FRIEND_DATA &b)
|
|
{
|
|
return _BaseSort_Name(a, b, GetCommunityMan()->GetOrderBy(GetCommunityMan()->GetMode()));
|
|
}
|
|
bool _Sort_Lv(const FRIEND_DATA &a, const FRIEND_DATA &b)
|
|
{
|
|
return _BaseSort_Lv(a, b, GetCommunityMan()->GetOrderBy(GetCommunityMan()->GetMode()));
|
|
}
|
|
bool _Sort_Class(const FRIEND_DATA &a, const FRIEND_DATA &b)
|
|
{
|
|
return _BaseSort_Class(a, b, GetCommunityMan()->GetOrderBy(GetCommunityMan()->GetMode()));
|
|
}
|
|
bool _Sort_byChannel(const FRIEND_DATA &a, const FRIEND_DATA &b)
|
|
{
|
|
return _BaseSort_byChannel(a, b, GetCommunityMan()->GetOrderBy(GetCommunityMan()->GetMode()));
|
|
}
|
|
bool _Sort_bOnline(const FRIEND_DATA &a, const FRIEND_DATA &b)
|
|
{
|
|
return _BaseSort_bOnline(a, b, GetCommunityMan()->GetOrderBy(GetCommunityMan()->GetMode()));
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SortbyList(nArray<FRIEND_DATA> &Array, int iSortBy, bool OrderBy)
|
|
{
|
|
bool (*fpSortBy)(const FRIEND_DATA &a, const FRIEND_DATA &b);
|
|
|
|
// (OrderBy) true 오름차순, false 내림차순
|
|
|
|
SetOrderBy(GetMode(), OrderBy);
|
|
|
|
switch(iSortBy)
|
|
{
|
|
case eCOMSORT_NAME:
|
|
fpSortBy = _Sort_Name;
|
|
break;
|
|
case eCOMSORT_LV:
|
|
fpSortBy = _Sort_Lv;
|
|
break;
|
|
case eCOMSORT_CLASS:
|
|
fpSortBy = _Sort_Class;
|
|
break;
|
|
case eCOMSORT_CHANNEL:
|
|
fpSortBy = _Sort_byChannel;
|
|
break;
|
|
case eCOMSORT_ONLINE:
|
|
fpSortBy = _Sort_bOnline;
|
|
break;
|
|
default:
|
|
fpSortBy = NULL;
|
|
break;
|
|
}
|
|
|
|
if(Array.Size()>=2 && fpSortBy != NULL)// 리스트가 2개 이상일때만 정렬한다.
|
|
{
|
|
std::sort(Array.Begin(), Array.End(), fpSortBy);
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/** 오름차순 GetOrderBy()==true / 내림차순 GetOrderBy()==false
|
|
*/
|
|
bool _Sort_NameMail(const MAIL_DATA &a, const MAIL_DATA &b)
|
|
{
|
|
return _BaseSort_NameMail(a, b, GetCommunityMan()->GetOrderBy(GetCommunityMan()->GetMode()));
|
|
}
|
|
bool _Sort_DateMail(const MAIL_DATA &a, const MAIL_DATA &b)
|
|
{
|
|
return _BaseSort_DateMail(a, b, GetCommunityMan()->GetOrderBy(GetCommunityMan()->GetMode()));
|
|
}
|
|
bool _BaseSort_MemoMail(const MAIL_DATA &a, const MAIL_DATA &b)
|
|
{
|
|
return _BaseSort_MemoMail(a, b, GetCommunityMan()->GetOrderBy(GetCommunityMan()->GetMode()));
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SortbyListMail(std::vector<MAIL_DATA> &Array, int iSortBy, bool OrderBy)
|
|
{
|
|
bool (*fpSortBy)(const MAIL_DATA &a, const MAIL_DATA &b);
|
|
|
|
// (OrderBy) true 오름차순, false 내림차순
|
|
|
|
SetOrderBy(GetMode(), OrderBy);
|
|
|
|
switch(iSortBy)
|
|
{
|
|
case eCOMSORT_SENDER:
|
|
fpSortBy = _Sort_NameMail;
|
|
break;
|
|
case eCOMSORT_DATE:
|
|
fpSortBy = _Sort_DateMail;
|
|
break;
|
|
case eCOMSORT_MEMO:
|
|
fpSortBy = _BaseSort_MemoMail;
|
|
break;
|
|
default:
|
|
fpSortBy = NULL;
|
|
break;
|
|
}
|
|
|
|
if(Array.size()>=2 && fpSortBy != NULL)// 리스트가 2개 이상일때만 정렬한다.
|
|
{
|
|
std::sort(Array.begin(), Array.end(), fpSortBy);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
int uiCommunityMan::FindChatData(TCHAR *pName)
|
|
{
|
|
for(int i=0;i<m_chatDlgArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_chatDlgArray[i].name.Get(),pName))
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ShowFriendChatDlg(TCHAR *pName)
|
|
{
|
|
if(m_iNewFriendChat > 0)
|
|
{
|
|
for(int i=0;i<m_chatDlgArray.Size();++i)
|
|
{
|
|
if(pName)
|
|
{
|
|
if(!Strcmp(m_chatDlgArray[i].name.Get(),pName))
|
|
{
|
|
NewFriendChatDlg(i);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(NewFriendChatDlg(i) == true)
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool uiCommunityMan::NewFriendChatDlg(int iIndex)
|
|
{
|
|
if(m_chatDlgArray[iIndex].dwDlgId == -1)
|
|
{
|
|
--m_iNewFriendChat;
|
|
|
|
// 1:1 대화창 연결
|
|
uiCommunityChat *pFriendChatDialog = new uiCommunityChat(this->GetUIMan());
|
|
pFriendChatDialog->SetFriendName((TCHAR*)m_chatDlgArray[iIndex].name.Get());
|
|
m_chatDlgArray[iIndex].dwDlgId = g_InterfaceManager.NewInterface( pFriendChatDialog, "Data\\Interface\\66_1_Message.iwz", TRUE);
|
|
|
|
if(pFriendChatDialog)
|
|
{
|
|
for(size_t s = 0; s < m_chatDlgArray[iIndex].vstrChatMsg.size(); ++s)
|
|
{
|
|
pFriendChatDialog->AddString((TCHAR*)m_chatDlgArray[iIndex].vstrChatMsg[s].c_str(), RGBA(131,190,126,255));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::AddChatMsg(TCHAR * ptszFriendNameFrom ,TCHAR *ptszChatMsg ,COLORREF TextColor)
|
|
{
|
|
TCHAR szResult[INTERFACE_STRING_LENGTH] = {0,};
|
|
Snprintf(szResult, INTERFACE_STRING_LENGTH-1, _T("%s:%s"), ptszFriendNameFrom, ptszChatMsg);
|
|
|
|
for(int i=0;i<m_chatDlgArray.Size();++i)
|
|
{
|
|
if(!Strcmp(m_chatDlgArray[i].name.Get(),ptszFriendNameFrom))
|
|
{
|
|
m_chatDlgArray[i].vstrChatMsg.push_back(szResult);
|
|
return;
|
|
}
|
|
}
|
|
|
|
}
|
|
//
|
|
////----------------------------------------------------------------------------
|
|
///**
|
|
//*/
|
|
//void uiCommunityMan::ShowTooltipForNewChatMsg()
|
|
//{
|
|
// if(m_iNewFriendChat > 0)
|
|
// {
|
|
// for(int i=0;i<m_chatDlgArray.Size();++i)
|
|
// {
|
|
// if(m_chatDlgArray[i].dwDlgId == -1)
|
|
// {
|
|
// //5921 %s님께서 대화신청을 하셨습니다.
|
|
// TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
// TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,};
|
|
//
|
|
// g_InterfaceManager.GetInterfaceString(5921, szTemp, INTERFACE_STRING_LENGTH);
|
|
// Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szTemp, m_chatDlgArray[i].name.Get());
|
|
//
|
|
// uiToolTipMan* pTooltipMan = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP);
|
|
// if(pTooltipMan)
|
|
// {
|
|
// pTooltipMan->RegisterTooltipSimpleText(szMessage);
|
|
// pTooltipMan->SetTooltipDialogID(GetDialogKey());
|
|
// }
|
|
//
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
TCHAR* uiCommunityMan::GetFriendNameForTooltip()
|
|
{
|
|
if(m_iNewFriendChat > 0)
|
|
{
|
|
for(int i=0;i<m_chatDlgArray.Size();++i)
|
|
{
|
|
if(m_chatDlgArray[i].dwDlgId == -1)
|
|
{
|
|
return (TCHAR*) m_chatDlgArray[i].name.Get();
|
|
}
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::RequestFriendChat(bool bInfoDlg) // 1:1 대화
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
TCHAR szName[MAX_CHARNAME_LENGTH+1] = {0,};
|
|
|
|
if(bInfoDlg)
|
|
{
|
|
StrnCopy(szName, m_FriendInfo.m_ptszCharName, MAX_CHARNAME_LENGTH);
|
|
}
|
|
else
|
|
{
|
|
if(GetSelectString() != NULL)
|
|
{
|
|
StrnCopy(szName, GetSelectString(), MAX_CHARNAME_LENGTH);
|
|
}
|
|
}
|
|
|
|
if(GetRejectChat())
|
|
{
|
|
// 대화 거부 상태입니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_REJECT_CHAT_STATE, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
else
|
|
{
|
|
g_InterfaceManager.GetInterfaceString( 1306, szMessage, INTERFACE_STRING_LENGTH );
|
|
|
|
if(IsOnline(szName))
|
|
{
|
|
if(FindChatData(szName) >= 0)
|
|
{
|
|
// 이미 해당친구로부터 받아놓은 메시지가 있을 경우엔 그걸 같이 보여준다.
|
|
ShowFriendChatDlg(szName);
|
|
|
|
}
|
|
else if(FindChatDialog(szName) < 0) // 아니면 새로 창을 만든다
|
|
{
|
|
//1:1 대화창 연결
|
|
uiCommunityChat *pFriendChatDialog = new uiCommunityChat(this->GetUIMan());
|
|
if(pFriendChatDialog)
|
|
{
|
|
pFriendChatDialog->SetFriendName((TCHAR*)szName);
|
|
FRIEND_CHAT_DATA temp;
|
|
ZeroMemory(&temp, sizeof(temp));
|
|
temp.dwDlgId = g_InterfaceManager.NewInterface( pFriendChatDialog, "Data\\Interface\\66_1_Message.iwz", TRUE);
|
|
temp.name = szName;
|
|
|
|
AddFriendChatData(temp);
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
// 현재 오프라인 상태 입니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_OFFLINE_STATE, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::_processResultCode(BYTE byErrorCode)
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,};
|
|
|
|
switch(byErrorCode)
|
|
{
|
|
case RC_FRIEND_NOTCONNECTED: // 접속 안 돼 있음
|
|
g_InterfaceManager.GetInterfaceString( eST_OFFLINE_STATE, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
break;
|
|
|
|
case RC_FRIEND_NOTFRIEND: // 친구 아님
|
|
// 5451 친구로 등록되어 있지 않습니다.
|
|
g_InterfaceManager.GetInterfaceString( 5451, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
break;
|
|
|
|
case RC_FRIEND_DIFFCHANNEL: // 채널이 다름
|
|
g_InterfaceManager.GetInterfaceString( 5251, szMessage, INTERFACE_STRING_LENGTH ); //다른 채널에 있는 친구에게는 사용할 수 없습니다.
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
break;
|
|
|
|
case RC_FRIEND_INVALIDZONE: // 조인 가능한 방 타입(로비, 헌팅방)이 아님
|
|
{
|
|
// 5452 해당 캐릭터가 참여 가능한 방에 있지 않습니다.
|
|
g_InterfaceManager.GetInterfaceString( 5452, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
{
|
|
Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, _T("Friend ErrMsg [%d]"), byErrorCode);
|
|
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, szMessage);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ShowFriendInfoDlg(BOOL bShow)
|
|
{
|
|
if(m_pUICommunityInfo)
|
|
{
|
|
if (bShow == TRUE)
|
|
{
|
|
m_pUICommunityInfo->ShowInterface(bShow);
|
|
}
|
|
else
|
|
{
|
|
#ifdef _NA_0_20110613_GAME_SHOP_RENEWAL
|
|
if ((m_pUICommunityInfo->request_uimanager_id() != UIMAN_GUILD) &&
|
|
(m_pUICommunityInfo->request_uimanager_id() != UIMAN_CONVENIENCESTORE))
|
|
{
|
|
m_pUICommunityInfo->ShowInterface(bShow);
|
|
}
|
|
#else
|
|
if (m_pUICommunityInfo->request_uimanager_id() != UIMAN_GUILD)
|
|
{
|
|
m_pUICommunityInfo->ShowInterface(bShow);
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ShowWriteMailDlg(TCHAR* pszName /*= NULL*/)
|
|
{
|
|
if(m_pUICommunityWriteMail && !m_pUICommunityWriteMail->IsVisibleWindow())
|
|
{
|
|
ZeroMemory(m_szRecvNameForMail, sizeof(m_szRecvNameForMail));
|
|
|
|
if(pszName == NULL)
|
|
{
|
|
if(GetSelectString() != NULL)
|
|
{
|
|
StrnCopy(m_szRecvNameForMail, GetSelectString(), MAX_CHARNAME_LENGTH);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
StrnCopy(m_szRecvNameForMail, pszName, MAX_CHARNAME_LENGTH);
|
|
}
|
|
|
|
m_pUICommunityWriteMail->ShowInterface(TRUE);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SetWindowFocus()
|
|
{
|
|
// 친구창
|
|
if(m_pUICommunityDlg && m_pUICommunityDlg->IsVisibleWindow())
|
|
{
|
|
m_pUICommunityDlg->GetDialogWZ()->ShowWindowWZ(WZ_SHOW);
|
|
}
|
|
|
|
// 친구정보창
|
|
if(m_pUICommunityInfo && m_pUICommunityInfo->IsVisibleWindow())
|
|
{
|
|
m_pUICommunityInfo->GetDialogWZ()->ShowWindowWZ(WZ_SHOW);
|
|
}
|
|
|
|
// 친구채팅창
|
|
for(int i=0; i<m_chatDlgArray.Size(); ++i)
|
|
{
|
|
//1:1 대화창 연결
|
|
uiCommunityChat * pDlg =
|
|
(uiCommunityChat *)g_InterfaceManager.GetDialog( (WzID)m_chatDlgArray[i].dwDlgId );
|
|
|
|
if(pDlg && pDlg->IsVisibleWindow())
|
|
{
|
|
pDlg->GetDialogWZ()->ShowWindowWZ(WZ_SHOW);
|
|
}
|
|
}
|
|
|
|
if(m_pUICommunityReadMail && m_pUICommunityReadMail->IsVisibleWindow())
|
|
{
|
|
m_pUICommunityReadMail->GetDialogWZ()->ShowWindowWZ(WZ_SHOW);
|
|
}
|
|
|
|
if(m_pUICommunityWriteMail && m_pUICommunityWriteMail->IsVisibleWindow())
|
|
{
|
|
m_pUICommunityWriteMail->GetDialogWZ()->ShowWindowWZ(WZ_SHOW);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ShowReadMailDlg(MAIL_DATA *pData)
|
|
{
|
|
if(m_pUICommunityReadMail)
|
|
{
|
|
BOOL bSystem = m_pUICommunityReadMail->SetMailData(pData);
|
|
m_pUICommunityReadMail->ShowInterface(TRUE);
|
|
m_pUICommunityReadMail->CloseAnswerBtn(bSystem);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ShowReadMailDlg(MEMOGUID guid)
|
|
{
|
|
if(m_pUICommunityReadMail)
|
|
{
|
|
for(unsigned int i=0; i<m_vecMailData.size(); ++i)
|
|
{
|
|
if(guid == m_vecMailData[i].m_subject.m_MemoGuid)
|
|
{
|
|
BOOL bSystem = m_pUICommunityReadMail->SetMailData(&m_vecMailData[i]);
|
|
m_pUICommunityReadMail->ShowInterface(TRUE);
|
|
m_pUICommunityReadMail->CloseAnswerBtn(bSystem);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void uiCommunityMan::SEND_CW_FRIEND_MEMO_UPDATE_SYN(CHARGUID game_user_id, TCHAR* memo)
|
|
{
|
|
#ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
|
|
MSG_CW_FRIEND_MEMO_UPDATE_SYN sync;
|
|
ZeroMemory(sync.m_ptszMemo, sizeof(sync.m_ptszMemo));
|
|
|
|
sync.m_dwToCharGuid = game_user_id;
|
|
StrnCopy(sync.m_ptszMemo, memo, MAX_FRIEND_MEMO_LENGHT);
|
|
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
|
|
#endif //_NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SEND_CW_MEMO_SEND_SYN(TCHAR *pszName, TCHAR *pszMemo) // 쪽지 전송
|
|
{
|
|
MSG_CW_MEMO_SEND_SYN sync;
|
|
ZeroMemory(sync.m_ptszRecvName, sizeof(sync.m_ptszRecvName));
|
|
ZeroMemory(sync.m_ptszMemo, sizeof(sync.m_ptszMemo));
|
|
StrnCopy(sync.m_ptszRecvName, pszName, MAX_CHARNAME_LENGTH);
|
|
StrnCopy(sync.m_ptszMemo, pszMemo, MAX_MEMO_STRLENGTH-1);
|
|
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SEND_CW_MEMO_LIST_REQ() // 쪽지 목록 요청
|
|
{
|
|
if (g_pNetwork && (g_pNetwork->IsCommunicatable(CI_CHATSERVERIDX) == TRUE))
|
|
{
|
|
if(!m_bRecvMailInfo)
|
|
{
|
|
MSG_CW_MEMO_LIST_REQ sync;
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
// 5026 서버 상태가 원활하지 않습니다. 잠시 후에 다시 시도해 주시기 바랍니다.
|
|
g_InterfaceManager.GetInterfaceString(eST_SERVER_STATE_BAD, szMessage, INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_TOP_SHOW, szMessage );
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool uiCommunityMan::SEND_CW_MEMO_VIEW_REQ(MEMOGUID guid) // 쪽지 내용 확인
|
|
{
|
|
if (SafePKBool(ePKBOOL_COMMUNITY_CW_MEMO_VIEW_REQ-1))
|
|
{
|
|
if (g_pNetwork && (g_pNetwork->IsCommunicatable(CI_CHATSERVERIDX) == TRUE))
|
|
{
|
|
MSG_CW_MEMO_VIEW_REQ sync;
|
|
sync.m_MemoGuid = guid;
|
|
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
}
|
|
else
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
// 5026 서버 상태가 원활하지 않습니다. 잠시 후에 다시 시도해 주시기 바랍니다.
|
|
g_InterfaceManager.GetInterfaceString(eST_SERVER_STATE_BAD, szMessage, INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_TOP_SHOW, szMessage );
|
|
}
|
|
|
|
// 패킷 팬딩 셋
|
|
SetPKBool(ePKBOOL_COMMUNITY_CW_MEMO_VIEW_REQ-1, TIMEOUT_PACKET_PENDING); // 서버로직의 문제로 해당 패킷 송수신에 대해서는 펜딩하지 않는다.
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::SEND_CW_MEMO_DELETE_SYN(MEMOGUID guid) // 쪽지 삭제 요청
|
|
{
|
|
if (g_pNetwork && (g_pNetwork->IsCommunicatable(CI_CHATSERVERIDX) == TRUE))
|
|
{
|
|
MSG_CW_MEMO_DELETE_SYN sync;
|
|
sync.m_MemoGuid = guid;
|
|
sync.m_MemoType = GetMemoType(guid);
|
|
|
|
// 쪽지 전체 삭제일때는 sync.m_MemoGuid 에 0을 넣어 보내자
|
|
|
|
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof (sync));
|
|
}
|
|
else
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
// 5026 서버 상태가 원활하지 않습니다. 잠시 후에 다시 시도해 주시기 바랍니다.
|
|
g_InterfaceManager.GetInterfaceString(eST_SERVER_STATE_BAD, szMessage, INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_TOP_SHOW, szMessage );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void uiCommunityMan::OnRecvCG_Group(MSG_BASE *pMsg)
|
|
{
|
|
TCHAR message_text[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
TCHAR notice_text[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
|
|
if (m_pUICommunityDlg == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch(pMsg->m_byProtocol)
|
|
{
|
|
case CG_STATUS_GROUPMONEY_BRD: // 하임 획득
|
|
{
|
|
MSG_CG_STATUS_GROUPMONEY_BRD * pRecvPacket = (MSG_CG_STATUS_GROUPMONEY_BRD *)pMsg;
|
|
|
|
if (m_pUICommunityDlg->IsVisibleWindow())
|
|
{
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
}
|
|
|
|
if (g_pHero == NULL)
|
|
{
|
|
// 히어로가 없습니다.
|
|
return;
|
|
}
|
|
|
|
MONEY result_money = g_pHero->GetMoney() + pRecvPacket->bonusMoney;
|
|
g_pHero->SetMoney(result_money);
|
|
// 7052: 그룹 멤버로부터 %d 하임을 보상 받았습니다.
|
|
g_InterfaceManager.GetInterfaceString(7052, message_text, INTERFACE_STRING_LENGTH);
|
|
Sprintf(notice_text, message_text, pRecvPacket->bonusMoney);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, notice_text);
|
|
|
|
if (GameFramework::GetCurrentScene() &&
|
|
pRecvPacket->bonusMoney)
|
|
{
|
|
if (GAMEOPTION->GetPickUpItemNotify())
|
|
{
|
|
GameFramework::GetCurrentScene()->InserCenterTextMessage(notice_text, PICK );
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
//assert(!"'uiCommunityMan::OnRecvCG_Friend()' receive unknown protocol from Game Server"); //게임 서버에서 정의되지 않은 프로토콜이 왔다.!!
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::OnRecvCG_Event(MSG_BASE *pMsg)
|
|
{
|
|
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
TCHAR szVal[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
|
|
if(!m_pUICommunityDlg)
|
|
return;
|
|
|
|
switch(pMsg->m_byProtocol)
|
|
{
|
|
case CG_EVENT_INVITATEFRIEND_REWARD_LIST_ACK: // 친구 초대 이벤트 보상 목록 받기 성공
|
|
{
|
|
MSG_CG_EVENT_INVITATEFRIEND_REWARD_LIST_ACK * pRecvPacket = (MSG_CG_EVENT_INVITATEFRIEND_REWARD_LIST_ACK *)pMsg;
|
|
if(pRecvPacket)
|
|
{
|
|
uiEventMan* eventMan = static_cast<uiEventMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_EVENT));
|
|
uiEventFriend * eventDlg = GET_CAST_DIALOG( uiEventFriend, IM_EVENT_MANAGER::EVENT_FRIEND );
|
|
|
|
if(eventMan && eventDlg)
|
|
{
|
|
eventMan->InitInvitateFriendList();
|
|
for(int i = 0; i < pRecvPacket->m_Count; ++i)
|
|
{
|
|
if(pRecvPacket->RewardInfo[i].RewardSts == 0) // 보상을 안받은 경우만
|
|
{
|
|
eventMan->InsertList(&pRecvPacket->RewardInfo[i]);
|
|
}
|
|
}
|
|
eventMan->ShowEventFriendWin(TRUE);// 보상목록 창 열기
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case CG_EVENT_INVITATEFRIEND_REWARD_LIST_NAK: // 친구 초대 이벤트 보상 목록 받기 실패
|
|
{
|
|
MSG_CG_EVENT_INVITATEFRIEND_REWARD_LIST_NAK * pRecvPacket = (MSG_CG_EVENT_INVITATEFRIEND_REWARD_LIST_NAK *)pMsg;
|
|
if(pRecvPacket)
|
|
{
|
|
int iStrNum = 0;
|
|
switch(pRecvPacket->byErrorCode)
|
|
{
|
|
case MSG_CG_EVENT_INVITATEFRIEND_REWARD_LIST_NAK::DB_FAIL: // DB 시스템 오류
|
|
iStrNum = 6081; // DB 시스템 오류
|
|
break;
|
|
case MSG_CG_EVENT_INVITATEFRIEND_REWARD_LIST_NAK::DBPROXY_FAIL: // DB PROXY 서버 연결 불량
|
|
iStrNum = 6081; // DB PROXY 서버 연결 불량
|
|
break;
|
|
default:
|
|
iStrNum = 6081; // 알 수 없는 ErrorCode
|
|
break;
|
|
}
|
|
if(iStrNum != 0)
|
|
{
|
|
g_InterfaceManager.GetInterfaceString(iStrNum, szMessage, INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case CG_EVENT_INVITATEFRIEND_REWARD_ACK: // 친구 초대 이벤트에 대한 보상 받기 성공
|
|
{
|
|
MSG_CG_EVENT_INVITATEFRIEND_REWARD_ACK * pRecvPacket = (MSG_CG_EVENT_INVITATEFRIEND_REWARD_ACK *)pMsg;
|
|
if(pRecvPacket)
|
|
{
|
|
ItemManager::Instance()->InsertInventoryTotalInfo( REWARD, pRecvPacket->m_TotalInfo );
|
|
|
|
uiEventMan* eventMan = static_cast<uiEventMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_EVENT));
|
|
uiEventFriend * eventDlg = GET_CAST_DIALOG( uiEventFriend, IM_EVENT_MANAGER::EVENT_FRIEND );
|
|
|
|
if(eventMan && eventDlg) // 목록 갱신
|
|
{
|
|
eventMan->SendEventFriend();
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case CG_EVENT_INVITATEFRIEND_REWARD_NAK: // 친구 초대 이벤트에 대한 보상 받기 실패
|
|
{
|
|
MSG_CG_EVENT_INVITATEFRIEND_REWARD_NAK * pRecvPacket = (MSG_CG_EVENT_INVITATEFRIEND_REWARD_NAK *)pMsg;
|
|
if(pRecvPacket)
|
|
{
|
|
int iStrNum = 0;
|
|
switch(pRecvPacket->m_byErrorCode)
|
|
{
|
|
case MSG_CG_EVENT_INVITATEFRIEND_REWARD_NAK::DB_FAIL:
|
|
iStrNum = 6081; // DB 시스템 오류
|
|
break;
|
|
case MSG_CG_EVENT_INVITATEFRIEND_REWARD_NAK::DBPROXY_FAIL:
|
|
iStrNum = 6081; // DB PROXY 서버 연결 불량
|
|
break;
|
|
case MSG_CG_EVENT_INVITATEFRIEND_REWARD_NAK::RECEV_REWARDED:
|
|
iStrNum = 6081; // 이미 보상 받았음
|
|
break;
|
|
case MSG_CG_EVENT_INVITATEFRIEND_REWARD_NAK::NOTOBTAIN_INVEN:
|
|
iStrNum = 6081; // 인벤에 넣을수 없음
|
|
break;
|
|
default:
|
|
iStrNum = 6081; // 알 수 없는 ErrorCode
|
|
break;
|
|
}
|
|
if(iStrNum != 0)
|
|
{
|
|
g_InterfaceManager.GetInterfaceString(iStrNum, szMessage, INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
/*case CG_EVENT_INVITATEFRIEND_RECALLTIME_ACK:
|
|
{
|
|
MSG_CG_EVENT_INVITATEFRIEND_RECALLTIME_ACK * pRecvPacket = (MSG_CG_EVENT_INVITATEFRIEND_RECALLTIME_ACK *)pMsg;
|
|
if(pRecvPacket)
|
|
{
|
|
|
|
}
|
|
}
|
|
break;
|
|
case CG_EVENT_INVITATEFRIEND_RECALLTIME_NAK:
|
|
{
|
|
MSG_CG_EVENT_INVITATEFRIEND_RECALLTIME_NAK * pRecvPacket = (MSG_CG_EVENT_INVITATEFRIEND_RECALLTIME_NAK *)pMsg;
|
|
if(pRecvPacket)
|
|
{
|
|
int iStrNum = 0;
|
|
switch(pRecvPacket->m_byErrorCode)
|
|
{
|
|
case 1: // DB 시스템 오류
|
|
iStrNum = 6081; // DB 시스템 오류
|
|
break;
|
|
case 2: // DB PROXY 서버 연결 불량
|
|
iStrNum = 6081; // DB PROXY 서버 연결 불량
|
|
break;
|
|
default:
|
|
iStrNum = 6081; // 알 수 없는 ErrorCode
|
|
break;
|
|
}
|
|
if(iStrNum != 0)
|
|
{
|
|
g_InterfaceManager.GetInterfaceString(iStrNum, szMessage, INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
}
|
|
}
|
|
}
|
|
break;*/
|
|
|
|
case CG_STATUS_GROUPMONEY_BRD: // 하임 획득
|
|
{
|
|
MSG_CG_STATUS_GROUPMONEY_BRD * pRecvPacket = (MSG_CG_STATUS_GROUPMONEY_BRD *)pMsg;
|
|
|
|
if (m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
if (g_pHero)
|
|
{
|
|
MONEY orgMoney = g_pHero->GetMoney() + pRecvPacket->bonusMoney;
|
|
g_pHero->SetMoney(orgMoney);
|
|
// 7052: 그룹 멤버로부터 %d 하임을 보상 받았습니다.
|
|
g_InterfaceManager.GetInterfaceString(7052, szMessage, INTERFACE_STRING_LENGTH);
|
|
Sprintf(szVal, szMessage, pRecvPacket->bonusMoney);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
|
|
if (GameFramework::GetCurrentScene() && pRecvPacket->bonusMoney)
|
|
{
|
|
if (GAMEOPTION->GetPickUpItemNotify())
|
|
{
|
|
GameFramework::GetCurrentScene()->InserCenterTextMessage( szVal, PICK );
|
|
}
|
|
}
|
|
}
|
|
else // 히어로가 없습니다.
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case CG_EVENT_ITEM_REWARD_RESULT_CMD:
|
|
#ifdef _NA_20100420_CHANGE_SYSTEM_MEMO_LOGIC
|
|
{
|
|
MSG_CG_EVENT_ITEM_REWARD_RESULT_CMD* reward_cmd_packet = static_cast<MSG_CG_EVENT_ITEM_REWARD_RESULT_CMD*>(pMsg);
|
|
if (reward_cmd_packet->result_value_ == TRUE)
|
|
{
|
|
// 쪽지를 통한 아이템/하임 습득이 이루어진 것으로 MemoGUID 를 통해 쪽지 내용 요청을 한다.
|
|
SEND_CW_MEMO_VIEW_REQ(reward_cmd_packet->memo_guid_);
|
|
}
|
|
}
|
|
#endif //_NA_20100420_CHANGE_SYSTEM_MEMO_LOGIC
|
|
break;
|
|
case CG_EVENT_SYSTEMMEMO_ITEM_REWARD_ANS:
|
|
{
|
|
MSG_CG_EVENT_SYSTEMMEMO_ITEM_REWARD_ANS* reward_ans_packet = static_cast<MSG_CG_EVENT_SYSTEMMEMO_ITEM_REWARD_ANS*>(pMsg);
|
|
MAIL_DATA* mail_data = NULL;
|
|
size_t mail_data_index = m_vecMailData.size();
|
|
for(size_t index = 0; index < mail_data_index; ++index)
|
|
{
|
|
if(reward_ans_packet->memo_guid_ == m_vecMailData[index].m_subject.m_MemoGuid)
|
|
{
|
|
mail_data = &(m_vecMailData[index]);
|
|
break;
|
|
}
|
|
}
|
|
// 성공이면 패스
|
|
if (mail_data != NULL)
|
|
{
|
|
if (reward_ans_packet->result_value_ == RC::RC_ITEM_SUCCESS)
|
|
{
|
|
mail_data->m_recvItemCode = 0;
|
|
mail_data->m_amountCost = 0;
|
|
}
|
|
else
|
|
{
|
|
// 실패면 읽음상태 변경
|
|
mail_data->m_subject.m_byRead = 0;
|
|
mail_data->m_bRecvMemo = false;
|
|
// 에러코드처리 추가
|
|
ItemManager::Instance()->NoticeReasonItemErrorCode(reward_ans_packet->result_value_);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::NetworkProcWorld( MSG_BASE * pMsg )
|
|
{
|
|
if(!g_pHero)
|
|
return;
|
|
|
|
switch (pMsg->m_byCategory)
|
|
{
|
|
case CW_FRIEND:
|
|
{
|
|
OnRecvCW_Friend(pMsg);
|
|
}
|
|
break;
|
|
|
|
case CW_REVENGE:
|
|
{
|
|
OnRecvCW_Revenge(pMsg);
|
|
}
|
|
break;
|
|
|
|
case CW_MEMO:
|
|
{
|
|
OnRecvCW_Memo(pMsg);
|
|
}
|
|
break;
|
|
case CW_GROUP:
|
|
{
|
|
OnRecvCW_Group(pMsg);
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::OnRecvCW_Group(MSG_BASE *pMsg)
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
TCHAR szVal[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
|
|
if(!m_pUICommunityDlg)
|
|
return;
|
|
|
|
switch(pMsg->m_byProtocol)
|
|
{
|
|
case CW_GROUP_GROUPLIST_ANS:// 멤버 목록
|
|
{
|
|
m_bRecvGroupMemberInfo = true;
|
|
|
|
MSG_CW_GROUP_GROUPLIST_ANS * pRecvPacket = (MSG_CW_GROUP_GROUPLIST_ANS *)pMsg;
|
|
|
|
for(int i=0;i<pRecvPacket->byGroupMemberNum;++i)
|
|
{
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->sGroupMemberInfo[i].GroupMemberInfo.ptszMemberName, MAX_CHARNAME_LENGTH);
|
|
AddGroup(szWideString, pRecvPacket->sGroupMemberInfo[i].GroupMemberInfo.Level,
|
|
pRecvPacket->sGroupMemberInfo[i].GroupMemberInfo.byClass,
|
|
pRecvPacket->sGroupMemberInfo[i].GroupMemberInfo.bOnline,
|
|
pRecvPacket->sGroupMemberInfo[i].GroupMemberInfo.byChannel,
|
|
pRecvPacket->sGroupMemberInfo[i].groupSTAT,
|
|
pRecvPacket->sGroupMemberInfo[i].GroupMemberInfo.lastDate,
|
|
pRecvPacket->sGroupMemberInfo[i].charGUID);
|
|
if (pRecvPacket->sGroupMemberInfo[i].GroupMemberInfo.bOnline != 0)
|
|
{
|
|
++onlined_group_count_;
|
|
}
|
|
}
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
SetGroupTimer(0);
|
|
CheckGroupLevelfromHero(); // 목록 요청후 레벨 비교후 타이머 동작 결정.
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_GROUPLIST_NAK:// 멤버 목록 요청 실패
|
|
{
|
|
MSG_CW_GROUP_GROUPLIST_NAK * pRecvPacket = (MSG_CW_GROUP_GROUPLIST_NAK *)pMsg;
|
|
|
|
// 7049: 그룹 멤버 요청에 실패하였습니다.
|
|
g_InterfaceManager.GetInterfaceString( 7049, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_ADD_RESPONSE_SYN:
|
|
{
|
|
MSG_CW_GROUP_ADD_RESPONSE_SYN *pRecvPacket = (MSG_CW_GROUP_ADD_RESPONSE_SYN *)pMsg;
|
|
ResponseJoinGroup(pRecvPacket->ptszMemeberName);
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_ADD_ACK:
|
|
{
|
|
MSG_CW_GROUP_ADD_ACK * pRecvPacket = (MSG_CW_GROUP_ADD_ACK *)pMsg;
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString ,pRecvPacket->m_MemberInfo.ptszMemberName, MAX_CHARNAME_LENGTH);
|
|
|
|
#ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
AddGroup(szWideString,
|
|
pRecvPacket->m_MemberInfo.Level,
|
|
pRecvPacket->m_MemberInfo.byClass,
|
|
pRecvPacket->m_MemberInfo.bOnline,
|
|
pRecvPacket->m_MemberInfo.byChannel,
|
|
pRecvPacket->m_GroupInfo,
|
|
pRecvPacket->m_MemberInfo.lastDate,
|
|
pRecvPacket->charGUID);
|
|
#else
|
|
AddGroup(szWideString,
|
|
pRecvPacket->m_MemberInfo.Level,
|
|
pRecvPacket->m_MemberInfo.byClass,
|
|
pRecvPacket->m_MemberInfo.bOnline,
|
|
pRecvPacket->m_MemberInfo.byChannel,
|
|
pRecvPacket->m_GroupInfo,
|
|
pRecvPacket->m_MemberInfo.lastDate,
|
|
0);
|
|
#endif
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
if (GetMode() == eCM_GROUP)
|
|
{
|
|
if (m_pUICommunityDlg)
|
|
{
|
|
m_pUICommunityDlg->RefreshOnlineMember(eCM_GROUP);
|
|
}
|
|
}
|
|
if(pRecvPacket->m_GroupInfo == GROUP_LEVEL_HIGH)
|
|
{
|
|
}
|
|
else //GROUP_LEVEL_LOW, 상위인 경우 하위 멤버를 받는다.
|
|
{
|
|
// 7037: %s님이 멤버 등록에 수락하였습니다.
|
|
g_InterfaceManager.GetInterfaceString(7037, szMessage, INTERFACE_STRING_LENGTH);
|
|
Sprintf(szVal, szMessage, szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
}
|
|
}
|
|
break;
|
|
case CW_GROUP_ADD_NAK:
|
|
{
|
|
MSG_CW_GROUP_ADD_NAK * pRecvPacket = (MSG_CW_GROUP_ADD_NAK *)pMsg;
|
|
|
|
switch(pRecvPacket->m_byResult)
|
|
{
|
|
case MSG_CW_GROUP_ADD_NAK::NO_USER:
|
|
{
|
|
// 70029: 사용자를 찾을 수가 없습니다.
|
|
g_InterfaceManager.GetInterfaceString( 70029, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
case MSG_CW_GROUP_ADD_NAK::ALREADY_GROUP:
|
|
{
|
|
// 7050: 이미 등록된 멤버 입니다.
|
|
g_InterfaceManager.GetInterfaceString( 7050, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
case MSG_CW_GROUP_ADD_NAK::NOT_ADD_ME:
|
|
{
|
|
// 7051: 자신은 등록 할수 없습니다.
|
|
g_InterfaceManager.GetInterfaceString( 7051, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
case MSG_CW_GROUP_ADD_NAK::GROUP_OVERFLOW:
|
|
{
|
|
// 7039: 그룹 멤버 허용 인원을 초과하였습니다. (하위 멤버 최대 5명 가능)
|
|
g_InterfaceManager.GetInterfaceString( 7039, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
case MSG_CW_GROUP_ADD_NAK::NOT_MATCHING_LEVEL:
|
|
{
|
|
// 7040: 등록할 멤버의 레벨은 자신보다 낮아야 합니다.
|
|
g_InterfaceManager.GetInterfaceString( 7040, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
case MSG_CW_GROUP_ADD_NAK::IGNOR_ADD_MEMBER:
|
|
{
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->ptszMemeberName, MAX_CHARNAME_LENGTH);
|
|
|
|
// 7038: %s님이 멤버 등록을 거절하였습니다.
|
|
g_InterfaceManager.GetInterfaceString( 7038, szMessage, INTERFACE_STRING_LENGTH );
|
|
Snprintf(szVal, INTERFACE_STRING_LENGTH-1 , szMessage, szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal );
|
|
}
|
|
break;
|
|
case MSG_CW_GROUP_ADD_NAK::RES_TIME_OUT:
|
|
{
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->ptszMemeberName, MAX_CHARNAME_LENGTH);
|
|
|
|
// %s님이 일정 시간 동안 권유 요청에 대한 응답이 없어 알림 창이 종료되었습니다.
|
|
g_InterfaceManager.GetInterfaceString( 7045, szMessage, INTERFACE_STRING_LENGTH );
|
|
Snprintf(szVal, INTERFACE_STRING_LENGTH-1 , szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
case MSG_CW_GROUP_ADD_NAK::ON_TOGGLE_ADDBLOCK:
|
|
{
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
// 해당 유저는 그룹 멤버 권유 거부 상태입니다.
|
|
g_InterfaceManager.GetInterfaceString( 7056, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
case MSG_CW_GROUP_ADD_NAK::BEHAVE_VENDOR_ESTABLISHER:
|
|
{
|
|
// 5815 상대방이 개인상점을 개설 중입니다.
|
|
g_InterfaceManager.GetInterfaceString(5815 , szMessage ,INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
default: //ERR_DEFAULT
|
|
{
|
|
// 7049: 그룹 멤버 요청에 실패하였습니다.
|
|
g_InterfaceManager.GetInterfaceString( 7049, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
}
|
|
|
|
}
|
|
break;
|
|
case CW_GROUP_DEL_ACK:// 멤버 삭제 성공(등록 해제한 캐릭터)
|
|
{
|
|
MSG_CW_GROUP_DEL_ACK * pRecvPacket = (MSG_CW_GROUP_DEL_ACK *)pMsg;
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->ptszMemeberName, MAX_CHARNAME_LENGTH);
|
|
|
|
DeleteGroup(szWideString);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
if (GetMode() == eCM_GROUP)
|
|
{
|
|
if (m_pUICommunityDlg)
|
|
{
|
|
m_pUICommunityDlg->RefreshOnlineMember(eCM_GROUP);
|
|
}
|
|
}
|
|
// 7034: %s님이 그룹의 멤버에서 해제되었습니다.
|
|
g_InterfaceManager.GetInterfaceString(7034, szMessage, INTERFACE_STRING_LENGTH);
|
|
Sprintf(szVal, szMessage, szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_DEL_BRD:// 멤버 삭제 통보(등록 해제 당한 캐릭터)
|
|
|
|
{
|
|
MSG_CW_GROUP_DEL_BRD * pRecvPacket = (MSG_CW_GROUP_DEL_BRD *)pMsg;
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->ptszMemeberName, MAX_CHARNAME_LENGTH);
|
|
|
|
DeleteGroup(szWideString);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
// %s님이 그룹의 멤버에서 해제하였습니다.
|
|
g_InterfaceManager.GetInterfaceString(7035, szMessage, INTERFACE_STRING_LENGTH);
|
|
Sprintf(szVal, szMessage, szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_DEL_NAK:// 멤버 삭제 실패
|
|
{
|
|
MSG_CW_GROUP_DEL_NAK * pRecvPacket = (MSG_CW_GROUP_DEL_NAK *)pMsg;
|
|
|
|
g_InterfaceManager.GetInterfaceString(7049, szMessage, INTERFACE_STRING_LENGTH);
|
|
Sprintf(szVal, szMessage, szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_LOGIN_BRD:
|
|
{
|
|
MSG_CW_GROUP_LOGIN_BRD * pRecvPacket = (MSG_CW_GROUP_LOGIN_BRD *)pMsg;
|
|
|
|
TCHAR szConvertCharName[MAX_CHARNAME_LENGTH +1 ]= {0,};
|
|
StrnCopy( szConvertCharName , pRecvPacket->ptszMemeberName, MAX_CHARNAME_LENGTH );
|
|
|
|
SetGroupOnline(szConvertCharName, TRUE, pRecvPacket->byChannel);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
// 그룹멤버 %s님이 로그인 하였습니다.
|
|
g_InterfaceManager.GetInterfaceString(7047, szMessage, INTERFACE_STRING_LENGTH);
|
|
Sprintf(szVal, szMessage, szConvertCharName);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_LOGOUT_BRD:
|
|
{
|
|
MSG_CW_GROUP_LOGOUT_BRD * pRecvPacket = (MSG_CW_GROUP_LOGOUT_BRD *)pMsg;
|
|
|
|
TCHAR szConvertCharName[MAX_CHARNAME_LENGTH +1] = {0,};
|
|
StrnCopy( szConvertCharName , pRecvPacket->ptszMemeberName, MAX_CHARNAME_LENGTH );
|
|
|
|
SetGroupOnline(szConvertCharName, FALSE, 0);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
|
|
// 그룹멤버 %s님이 로그아웃 하였습니다.
|
|
g_InterfaceManager.GetInterfaceString(7048, szMessage, INTERFACE_STRING_LENGTH);
|
|
Sprintf(szVal, szMessage, szConvertCharName);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_LEVELUP_BRD: //멤버 레벨업 알림, 레벨 오버되면 10분마다 출력
|
|
{
|
|
MSG_CW_GROUP_LEVELUP_BRD *pRecvPacket = (MSG_CW_GROUP_LEVELUP_BRD *)pMsg;
|
|
|
|
TCHAR szConvertCharName[MAX_CHARNAME_LENGTH +1];
|
|
StrnCopy( szConvertCharName , pRecvPacket->ptszMemeberName, MAX_CHARNAME_LENGTH );
|
|
SetGroupLevel(szConvertCharName, pRecvPacket->charLevel);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
if(pRecvPacket->charLevel >= g_pHero->GetLevel())
|
|
{
|
|
//레벨업 처리, timer설정 및 갱신
|
|
SetGroupTimer(1000); // 1초후 바로 메시지 출력
|
|
}
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_ACCUMEXP_BRD: // 누적 경험치
|
|
{
|
|
MSG_CW_GROUP_ACCUMEXP_BRD * pRecvPacket = (MSG_CW_GROUP_ACCUMEXP_BRD *)pMsg;
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
|
|
// 경험치 추가 설정
|
|
if (g_pHero)
|
|
{
|
|
//g_pHero->SetMoney(pRecvPacket->m_Money);
|
|
EXPTYPE addexp = pRecvPacket->accumEXP; // 추가될
|
|
EXPTYPE exp = g_pHero->GetCharInfo()->m_i64Exp + addexp;
|
|
|
|
g_pHero->SetExp(exp);
|
|
}
|
|
else // 히어로가 없습니다.
|
|
{
|
|
return;
|
|
}
|
|
|
|
/* // TODO: 서버측 요청으로 메시지 띄우지 않음, 추후 다른 곳에서 출력
|
|
if(pRecvPacket->checkDATE == GROUP_LEVEL_HIGH_OVERDATE)
|
|
{
|
|
// 그룹 멤버로부터 %d 경험치를 보상 받았으며, 오프라인 상태 7일 이후의 경험치는 보상 받을 수 없습니다.
|
|
g_InterfaceManager.GetInterfaceString(7043, szMessage, INTERFACE_STRING_LENGTH);
|
|
Sprintf(szVal, szMessage, pRecvPacket->accumEXP);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
}
|
|
else if(pRecvPacket->accumEXP >= MAX_GROUP_EXP)
|
|
{
|
|
// 그룹 멤버로부터 최대 보너스 경험치 5,000,000을 보상 받았습니다.
|
|
g_InterfaceManager.GetInterfaceString(7042, szMessage, INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
|
|
}
|
|
else
|
|
{
|
|
// 그룹 멤버로부터 %d 경험치를 보상 받았습니다.
|
|
g_InterfaceManager.GetInterfaceString(7041, szMessage, INTERFACE_STRING_LENGTH);
|
|
Sprintf(szVal, szMessage, pRecvPacket->accumEXP);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
}
|
|
if( GAMEOPTION->GetPickUpItemNotify() ) // 가운데 메시지
|
|
{
|
|
GameFramework::GetCurrentScene()->InserCenterTextMessage( szVal, PICK );
|
|
}
|
|
*/
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_STATUS_ANS:
|
|
{
|
|
MSG_CW_GROUP_STATUS_ANS *pRecvPacket = (MSG_CW_GROUP_STATUS_ANS *)pMsg;
|
|
FRIEND_INFO_DATA info;
|
|
ZeroMemory(&info, sizeof(info));
|
|
StrnCopy(info.m_ptszCharName, pRecvPacket->m_ptszCharName, MAX_CHARNAME_LENGTH);
|
|
StrnCopy(info.m_tszGuildName, pRecvPacket->m_tszGuildName, MAX_GUILDNAME_LENGTH);
|
|
info.m_byChannel = pRecvPacket->m_byChannel;
|
|
info.m_byZoneType = pRecvPacket->m_byZoneType;
|
|
info.m_dwZoneKey = pRecvPacket->m_dwZoneKey;
|
|
info.m_MapCode = pRecvPacket->m_MapCode;
|
|
info.m_byDuty = pRecvPacket->m_byDuty;
|
|
SetFriendInfo(info);
|
|
ShowFriendInfoDlg();
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_STATUS_NAK:
|
|
{
|
|
MSG_CW_GROUP_STATUS_NAK *pRecvPacket = (MSG_CW_GROUP_STATUS_NAK *)pMsg;
|
|
switch(pRecvPacket->dwResult)
|
|
{
|
|
case MSG_CW_GROUP_STATUS_NAK::NO_MEMBER_DATA://데이터 없다
|
|
{
|
|
// 데이터가 없다. : 7049: 그룹 멤버 요청에 실패하였습니다.
|
|
g_InterfaceManager.GetInterfaceString( 7049, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
case MSG_CW_GROUP_STATUS_NAK::NOT_MEMBER:
|
|
{
|
|
// 그룹멤버가 아닙니다. : 7049: 그룹 멤버 요청에 실패하였습니다.
|
|
g_InterfaceManager.GetInterfaceString( 7049, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
//case MSG_CW_GROUP_STATUS_NAK::ERR_DEFAULT: //알수없는 에러
|
|
default:
|
|
{
|
|
// 그룹 정보 요청 실패 에러 : 7049: 그룹 멤버 요청에 실패하였습니다.
|
|
g_InterfaceManager.GetInterfaceString( 7049, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_BONUSEXP_BRD: // 경험치
|
|
{
|
|
MSG_CW_GROUP_BONUSEXP_BRD * pRecvPacket = (MSG_CW_GROUP_BONUSEXP_BRD *)pMsg;
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
// 경험치 추가 설정
|
|
if (g_pHero)
|
|
{
|
|
//g_pHero->SetMoney(pRecvPacket->m_Money);
|
|
EXPTYPE addexp = pRecvPacket->bonusEXP; // 추가될
|
|
EXPTYPE exp = g_pHero->GetCharInfo()->m_i64Exp + addexp;
|
|
|
|
g_pHero->SetExp(exp);
|
|
|
|
/* // TODO: 서버측 요청으로 메시지 띄우지 않음, 추후 다른 곳에서 출력
|
|
// 그룹 멤버로부터 %d 경험치를 보상 받았습니다.
|
|
g_InterfaceManager.GetInterfaceString(7036, szMessage, INTERFACE_STRING_LENGTH);
|
|
TCHAR szVal[INTERFACE_STRING_LENGTH + 1] = {0,};
|
|
Sprintf(szVal, szMessage, pRecvPacket->bonusEXP);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
|
|
if( GAMEOPTION->GetPickUpItemNotify() )
|
|
{
|
|
GameFramework::GetCurrentScene()->InserCenterTextMessage( szVal, PICK );
|
|
}
|
|
*/
|
|
}
|
|
else // 히어로가 없습니다.
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_ADDBLOCK_ACK:
|
|
{
|
|
MSG_CW_GROUP_ADDBLOCK_ACK * pRecvPacket = (MSG_CW_GROUP_ADDBLOCK_ACK *)pMsg;
|
|
SetGroupRejection(pRecvPacket->m_bNowBlock);
|
|
}
|
|
break;
|
|
|
|
case CW_GROUP_ADDBLOCK_NAK:
|
|
{
|
|
BOOL rt = IsRecvGroup();
|
|
SetGroupRejection(!rt);
|
|
}
|
|
break;
|
|
#ifdef _DH_GROUPSYSTEM_ALL3
|
|
case CW_GROUP_REWARD_FAIL_CMD:
|
|
{
|
|
// 그룹 정보 요청 실패 에러 : 7049: 그룹 멤버 요청에 실패하였습니다.
|
|
g_InterfaceManager.GetInterfaceString( 7049, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
#endif//_DH_GROUPSYSTEM_ALL3
|
|
|
|
default:
|
|
{
|
|
// 들어올 수 없는 곳 로그 남기기 TODO
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::NetworkProc( MSG_BASE * pMsg )
|
|
{
|
|
switch (pMsg->m_byCategory)
|
|
{
|
|
case CG_EVENT:
|
|
{
|
|
OnRecvCG_Event(pMsg);
|
|
}
|
|
break;
|
|
case CG_STATUS:
|
|
{
|
|
OnRecvCG_Group(pMsg);
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
bool _Find_GUID(const FRIEND_DATA &a, const FRIEND_DATA &b)
|
|
{
|
|
return (a.dwFriendGuid == b.dwFriendGuid);
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::OnRecvCW_Friend(MSG_BASE *pMsg)
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH+1] = {0,};
|
|
|
|
if(!m_pUICommunityDlg)
|
|
return;
|
|
|
|
switch(pMsg->m_byProtocol)
|
|
{
|
|
case CW_FRIEND_FRIENDLIST_ACK:// 친구 목록
|
|
{
|
|
m_bRecvMemberInfo = true;
|
|
|
|
MSG_CW_FRIEND_FRIENDLIST_ACK * pRecvPacket = (MSG_CW_FRIEND_FRIENDLIST_ACK *)pMsg;
|
|
|
|
for(int i=0;i<pRecvPacket->byFriendStatNum;++i)
|
|
{
|
|
AddFriend( pRecvPacket->sFriendStat[i].sPacketInfo, pRecvPacket->sFriendStat[i].dwFriendGuid );
|
|
|
|
if (pRecvPacket->sFriendStat[i].sPacketInfo.bOnline != 0)
|
|
{
|
|
++onlined_friend_count_;
|
|
}
|
|
}
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
#ifdef _NA_0_20110613_GAME_SHOP_RENEWAL
|
|
//! 2011.7.22 / i4u4me / 캐시샵 작업
|
|
uiConvenienceStore_FriendList* friend_list_dlg = GET_CAST_DIALOG(uiConvenienceStore_FriendList, uiConvenienceStore_FriendList::kDialog_ID);
|
|
if ((friend_list_dlg != NULL) && (friend_list_dlg->IsVisible() == TRUE))
|
|
{
|
|
friend_list_dlg->RefreshFriendList();
|
|
}
|
|
#endif //_NA_0_20110613_GAME_SHOP_RENEWAL
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_BLOCKLIST_ACK://차단 목록
|
|
{
|
|
MSG_CW_FRIEND_BLOCKLIST_ACK * pRecvPacket = (MSG_CW_FRIEND_BLOCKLIST_ACK *)pMsg;
|
|
|
|
for(int i=0;i<pRecvPacket->byBlockStatNum;++i)
|
|
{
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->sBlockStat[i].ptszBlockName, MAX_CHARNAME_LENGTH);
|
|
|
|
AddBlockFriend(szWideString);
|
|
}
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_NEWLIST_NAK:// 친구 목록 요청 실패
|
|
{
|
|
MSG_CW_FRIEND_NEWLIST_NAK * pRecvPacket = (MSG_CW_FRIEND_NEWLIST_NAK *)pMsg;
|
|
|
|
// 친구/차단 목록 요청 실패
|
|
g_InterfaceManager.GetInterfaceString( eST_CW_FRIEND_NEWLIST_NAK, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_LOGIN_BRD:// 접속 중에 친구 로그온
|
|
{
|
|
MSG_CW_FRIEND_LOGIN_BRD * pRecvPacket = (MSG_CW_FRIEND_LOGIN_BRD *)pMsg;
|
|
|
|
TCHAR szFriendName[MAX_CHARNAME_LENGTH +1] ={0,};
|
|
StrnCopy( szFriendName , pRecvPacket->ptszFriendName , MAX_CHARNAME_LENGTH );
|
|
|
|
SetFriendOnline(szFriendName, TRUE, pRecvPacket->byChannelID);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_LOGOUT_BRD:// 접속 중에 친구 로그아웃
|
|
{
|
|
MSG_CW_FRIEND_LOGOUT_BRD * pRecvPacket = (MSG_CW_FRIEND_LOGOUT_BRD *)pMsg;
|
|
|
|
TCHAR szFriendName[MAX_CHARNAME_LENGTH +1] ={0,};
|
|
StrnCopy( szFriendName , pRecvPacket->ptszFriendName , MAX_CHARNAME_LENGTH );
|
|
SetFriendOnline(szFriendName, FALSE, 0);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_ADD_ACK:// 친구 추가
|
|
{
|
|
|
|
MSG_CW_FRIEND_ADD_ACK * pRecvPacket = (MSG_CW_FRIEND_ADD_ACK *)pMsg;
|
|
AddFriend( pRecvPacket->sFriendStat.sPacketInfo, pRecvPacket->sFriendStat.dwFriendGuid );
|
|
if (GetMode() == eCM_FRIEND)
|
|
{
|
|
if (m_pUICommunityDlg)
|
|
{
|
|
m_pUICommunityDlg->RefreshOnlineMember(eCM_FRIEND);
|
|
}
|
|
}
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString ,pRecvPacket->sFriendStat.sPacketInfo.ptszFriendName, MAX_CHARNAME_LENGTH);
|
|
|
|
// %s님이 친구목록에 추가 되었습니다.
|
|
g_InterfaceManager.GetInterfaceString(5454, szMessage, INTERFACE_STRING_LENGTH);
|
|
TCHAR szVal[INTERFACE_STRING_LENGTH + 1] = {0,};
|
|
Sprintf(szVal, szMessage, szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szVal);
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_ADD_NAK:
|
|
{
|
|
MSG_CW_FRIEND_ADD_NAK * pRecvPacket = (MSG_CW_FRIEND_ADD_NAK *)pMsg;
|
|
|
|
if(pRecvPacket->m_byResult==MSG_CW_FRIEND_ADD_NAK::NO_USER)
|
|
{
|
|
// 해당 유저가 없습니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_NOT_EXIST_USER, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
else if(pRecvPacket->m_byResult==MSG_CW_FRIEND_ADD_NAK::ALREADY_FRIEND)
|
|
{
|
|
// 등록된 유저 입니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_ALREADY_ADDED_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
else if(pRecvPacket->m_byResult==MSG_CW_FRIEND_ADD_NAK::FRIEND_IS_ME)
|
|
{
|
|
// 자신은 등록 할수 없습니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_NOT_ADD_YOURSELF, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
else
|
|
{
|
|
// 친구 등록 실패
|
|
g_InterfaceManager.GetInterfaceString( eST_FAILED_ADD_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
|
|
}
|
|
break;
|
|
|
|
|
|
case CW_FRIEND_DEL_ACK:// 친구 삭제 성공
|
|
{
|
|
MSG_CW_FRIEND_DEL_ACK * pRecvPacket = (MSG_CW_FRIEND_DEL_ACK *)pMsg;
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->ptszDeletedName, MAX_CHARNAME_LENGTH);
|
|
|
|
DeleteFriend(szWideString);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
if (GetMode() == eCM_FRIEND)
|
|
{
|
|
if (m_pUICommunityDlg)
|
|
{
|
|
m_pUICommunityDlg->RefreshOnlineMember(eCM_FRIEND);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_DEL_NAK:// 친구 삭제 실패
|
|
{
|
|
MSG_CW_FRIEND_DEL_NAK * pRecvPacket = (MSG_CW_FRIEND_DEL_NAK *)pMsg;
|
|
|
|
if(pRecvPacket->m_byResult == MSG_CW_FRIEND_DEL_NAK::NOT_FRIEND_USER)
|
|
{
|
|
// 해당 유저가 없습니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_NOT_EXIST_USER, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
else
|
|
{
|
|
// 친구 삭제 실패
|
|
g_InterfaceManager.GetInterfaceString( eST_FAILED_DELETE_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_BLOCK_ACK:// 차단 허용
|
|
{
|
|
MSG_CW_FRIEND_BLOCK_ACK * pRecvPacket = (MSG_CW_FRIEND_BLOCK_ACK *)pMsg;
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString ,pRecvPacket->ptszBlockedName, MAX_CHARNAME_LENGTH);
|
|
|
|
AddBlockFriend(szWideString);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_BLOCK_NAK:// 차단 실패
|
|
{
|
|
MSG_CW_FRIEND_BLOCK_NAK * pRecvPacket = (MSG_CW_FRIEND_BLOCK_NAK *)pMsg;
|
|
if(pRecvPacket->m_byResult == MSG_CW_FRIEND_BLOCK_NAK::NO_USER)
|
|
{
|
|
// 해당 유저가 없습니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_NOT_EXIST_USER, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
else
|
|
{
|
|
// 차단 실패
|
|
g_InterfaceManager.GetInterfaceString( eST_FAILED_REJECTION, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_BLOCK_FREE_ACK:
|
|
{
|
|
MSG_CW_FRIEND_BLOCK_FREE_ACK * pRecvPacket = (MSG_CW_FRIEND_BLOCK_FREE_ACK *)pMsg;
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->ptszBlockedName, MAX_CHARNAME_LENGTH);
|
|
|
|
DeleteBlockFriend(szWideString);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_BLOCK_FREE_NAK:
|
|
{
|
|
MSG_CW_FRIEND_BLOCK_FREE_NAK * pRecvPacket = (MSG_CW_FRIEND_BLOCK_FREE_NAK *)pMsg;
|
|
if(pRecvPacket->m_byResult==MSG_CW_FRIEND_BLOCK_FREE_NAK::NO_USER)
|
|
{
|
|
// 해당 유저가 없습니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_NOT_EXIST_USER, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
else if(pRecvPacket->m_byResult==MSG_CW_FRIEND_BLOCK_FREE_NAK::NOT_BLOCKED)
|
|
{
|
|
// 차단된 유저가 아닙니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_NOT_BLOCKED_USER, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
else
|
|
{
|
|
// 차단 해제 실패
|
|
g_InterfaceManager.GetInterfaceString( eST_FAILED_BLOCK_FREE, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case CW_FRIEND_CHAT_BRD:// 친구가 나에게 채팅을 시도해옴
|
|
{
|
|
MSG_CW_FRIEND_CHAT_BRD * pRecvPacket = (MSG_CW_FRIEND_CHAT_BRD *)pMsg;
|
|
|
|
if(IsRecvMessage())
|
|
{
|
|
break;
|
|
}
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->ptszFriendNameFrom, MAX_CHARNAME_LENGTH);
|
|
|
|
int index = FindChatDialog(szWideString);
|
|
|
|
TCHAR buffer[MSG_CW_FRIEND_CHAT_BRD::_MAX_CHATMSG_SIZE + 1] = {0,};
|
|
StrnCopy(buffer, pRecvPacket->ptszChatMsg ,pRecvPacket->byMsgLength);
|
|
|
|
if(index == -1)//없으면 창 생성
|
|
{
|
|
int i = FindChatData(szWideString);
|
|
if(i>=0)
|
|
{
|
|
AddChatMsg(szWideString,buffer,RGBA(131,190,126,255));
|
|
}
|
|
else
|
|
{
|
|
FRIEND_CHAT_DATA temp;
|
|
temp.dwDlgId = -1;
|
|
temp.vstrChatMsg.clear();
|
|
++m_iNewFriendChat;
|
|
temp.name = szWideString;
|
|
|
|
AddFriendChatData(temp);
|
|
AddChatMsg(szWideString,buffer,RGBA(131,190,126,255));
|
|
|
|
g_SoundEffect.PlayUI( UI_SOUND_QUEST_ACCEPT );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(m_chatDlgArray[index].dwDlgId >= 0)
|
|
{
|
|
//1:1 대화창 연결
|
|
uiCommunityChat *pFriendChatDialog = (uiCommunityChat *)g_InterfaceManager.GetDialog((WzID)m_chatDlgArray[index].dwDlgId);
|
|
|
|
if(pFriendChatDialog)
|
|
{
|
|
pFriendChatDialog->AddString(szWideString,buffer,RGBA(131,190,126,255));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case CW_FRIEND_CHAT_NAK:// 친구 채팅 실패
|
|
{
|
|
MSG_CW_FRIEND_CHAT_NAK * pRecvPacket = (MSG_CW_FRIEND_CHAT_NAK *)pMsg;
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->ptszFriendNameTo , MAX_CHARNAME_LENGTH);
|
|
|
|
int index = FindChatDialog(szWideString);
|
|
|
|
if(index != -1)
|
|
{
|
|
//1:1 대화창 연결
|
|
uiCommunityChat *pFriendChatDialog = (uiCommunityChat *)g_InterfaceManager.GetDialog((WzID)m_chatDlgArray[index].dwDlgId);
|
|
|
|
if(pFriendChatDialog)
|
|
{
|
|
if(pRecvPacket->m_byResult == MSG_CW_FRIEND_CHAT_NAK::NOT_FRIEND)
|
|
{
|
|
// 친구가 아닙니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_NOT_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
pFriendChatDialog->AddString(szMessage,WzColor_RGBA(240,201,121, 255));
|
|
}
|
|
else if(pRecvPacket->m_byResult == MSG_CW_FRIEND_CHAT_NAK::OFFLINE_FRIEND)
|
|
{
|
|
// 대화 상대가 오프라인 입니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_OFFLINE_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
pFriendChatDialog->AddString(szMessage,WzColor_RGBA(240,201,121, 255));
|
|
}
|
|
else if(pRecvPacket->m_byResult == MSG_CW_FRIEND_CHAT_NAK::BLOCKED_FRIEND)
|
|
{
|
|
// 차단 상태 입니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_REJECTION_STATE, szMessage, INTERFACE_STRING_LENGTH );
|
|
pFriendChatDialog->AddString(szMessage,WzColor_RGBA(240,201,121, 255));
|
|
}
|
|
else
|
|
{
|
|
// 친구 채팅 실패
|
|
g_InterfaceManager.GetInterfaceString( eST_FAILED_CHAT_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
pFriendChatDialog->AddString(szMessage,WzColor_RGBA(240,201,121, 255));
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if(pRecvPacket->m_byResult == MSG_CW_FRIEND_CHAT_NAK::NOT_FRIEND)
|
|
{
|
|
// 친구가 아닙니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_NOT_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
else if(pRecvPacket->m_byResult == MSG_CW_FRIEND_CHAT_NAK::OFFLINE_FRIEND)
|
|
{
|
|
// 대화 상대가 오프라인 입니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_OFFLINE_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
else if(pRecvPacket->m_byResult == MSG_CW_FRIEND_CHAT_NAK::BLOCKED_FRIEND)
|
|
{
|
|
// 차단 상태 입니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_REJECTION_STATE, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
else
|
|
{
|
|
// 친구 채팅 실패
|
|
g_InterfaceManager.GetInterfaceString( eST_FAILED_CHAT_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(pRecvPacket->m_byResult == MSG_CW_FRIEND_CHAT_NAK::NOT_FRIEND)
|
|
{
|
|
// 친구가 아닙니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_NOT_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
else if(pRecvPacket->m_byResult == MSG_CW_FRIEND_CHAT_NAK::OFFLINE_FRIEND)
|
|
{
|
|
// 대화 상대가 오프라인 입니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_OFFLINE_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
else if(pRecvPacket->m_byResult == MSG_CW_FRIEND_CHAT_NAK::BLOCKED_FRIEND)
|
|
{
|
|
// 차단 상태 입니다.
|
|
g_InterfaceManager.GetInterfaceString( eST_REJECTION_STATE, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
else
|
|
{
|
|
// 친구 채팅 실패
|
|
g_InterfaceManager.GetInterfaceString( eST_FAILED_CHAT_FRIEND, szMessage, INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage);
|
|
}
|
|
|
|
}
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_CHATBLOCK_ACK:
|
|
{
|
|
MSG_CW_FRIEND_CHATBLOCK_ACK * pRecvPacket = (MSG_CW_FRIEND_CHATBLOCK_ACK *)pMsg;
|
|
|
|
SetMessageRejection(pRecvPacket->m_bNowBlock);
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_CHATBLOCK_NAK:
|
|
{
|
|
BOOL rt = IsRecvMessage();
|
|
SetMessageRejection(!rt);
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_LEVELUP_BRD: // 친구 레벨업 알림
|
|
{
|
|
MSG_CW_FRIEND_LEVELUP_BRD *pRecvPacket = (MSG_CW_FRIEND_LEVELUP_BRD *)pMsg;
|
|
|
|
TCHAR szConvertCharName[MAX_CHARNAME_LENGTH +1];
|
|
StrnCopy( szConvertCharName , pRecvPacket->m_ptszCharName , MAX_CHARNAME_LENGTH );
|
|
SetFriendLevel(szConvertCharName, pRecvPacket->m_Level);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_STATUS_ANS:
|
|
{
|
|
OnRecvCW_Friend_STATUS_ANS(pMsg);
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_STATUS_NAK:
|
|
{
|
|
MSG_CW_FRIEND_STATUS_NAK *pRecvPacket = (MSG_CW_FRIEND_STATUS_NAK *)pMsg;
|
|
|
|
this->_processResultCode(pRecvPacket->m_byErrorCode);
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_STATUS_JOIN_ACK:
|
|
{
|
|
MSG_CW_FRIEND_STATUS_JOIN_ACK *pRecvPacket = (MSG_CW_FRIEND_STATUS_JOIN_ACK *)pMsg;
|
|
|
|
if(!IsWaitJoinGame())
|
|
{
|
|
SetWaitJoinGame(true);
|
|
|
|
SetRqstJoinGame(true);
|
|
MSG_CG_ZONE_LIST_REFRESH_SYN sync;
|
|
ZeroMemory(&sync, sizeof(sync));
|
|
sync.m_byCategory = CG_ZONE;
|
|
sync.m_byProtocol = CG_ZONE_LIST_REFRESH_SYN;
|
|
sync.m_RoomKey = (KEYTYPE)pRecvPacket->m_dwZoneKey;
|
|
sync.m_byRoomType = eZONETYPE_LOBBY;
|
|
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &sync, sizeof(sync));
|
|
|
|
}
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_STATUS_JOIN_NAK:
|
|
{
|
|
SetWaitJoinGame(false);
|
|
|
|
MSG_CW_FRIEND_STATUS_JOIN_NAK *pRecvPacket = (MSG_CW_FRIEND_STATUS_JOIN_NAK *)pMsg;
|
|
|
|
this->_processResultCode(pRecvPacket->m_byErrorCode);
|
|
}
|
|
break;
|
|
|
|
|
|
case CW_FRIENDINVITATE_INVITATELIST_CMD: //친구 목록이 전송된 다음 전송되는 패킷, m_GuidList에 친구의 캐릭터 Guid가 들어갑니다.
|
|
{ //만일 m_GuidList에 있는 캐릭터 GUID가 나의 친구목록에 없다면 무시됩니다.
|
|
MSG_CW_FRIENDINVITATE_INVITATELIST_CMD * pRecvPacket = (MSG_CW_FRIENDINVITATE_INVITATELIST_CMD *)pMsg;
|
|
if(pRecvPacket)
|
|
{
|
|
int iCnt = pRecvPacket->m_InvitateFriendInfo.m_byListCount;
|
|
iCnt = min(iCnt, MAX_FRIEND_STAT_NUM);
|
|
|
|
BYTE byFriendSts = pRecvPacket->m_InvitateFriendInfo.m_FriendSts;
|
|
|
|
for(int i = 0; i < iCnt ; ++i)
|
|
{
|
|
for(int j = 0; j < m_FriendArray.Size(); ++j)
|
|
{
|
|
if(m_FriendArray[j].dwFriendGuid == pRecvPacket->m_InvitateFriendInfo.m_GuidList[i])
|
|
{
|
|
m_FriendArray[j].byFriendSts = byFriendSts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
#ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
case CW_FRIEND_MEMO_UPDATE_ACK:
|
|
{
|
|
MSG_CW_FRIEND_MEMO_UPDATE_ACK* pk = static_cast<MSG_CW_FRIEND_MEMO_UPDATE_ACK*>(pMsg);
|
|
if (m_pUICommunityInfo != NULL)
|
|
{
|
|
m_pUICommunityInfo->FriendMemo_InputButtonState(uiCommunityInfo::kFriendMemoButtonStatus_Disable);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case CW_FRIEND_MEMO_UPDATE_NAK:
|
|
{
|
|
_processResultCode((static_cast<MSG_CW_FRIEND_MEMO_UPDATE_NAK*>(pMsg))->m_byErrorCode);
|
|
|
|
if (m_pUICommunityInfo != NULL)
|
|
{
|
|
m_pUICommunityInfo->FriendMemo_InputButtonState(uiCommunityInfo::kFriendMemoButtonStatus_Disable);
|
|
}
|
|
}
|
|
break;
|
|
#endif //_NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
|
|
default:
|
|
assert(!"월드 서버에서 정의되지 않은 프로토콜이 왔다.!!");
|
|
break;
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::OnRecvCW_Revenge(MSG_BASE *pMsg)
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH] = {0,};
|
|
|
|
if(!m_pUICommunityDlg)
|
|
return;
|
|
|
|
switch(pMsg->m_byProtocol)
|
|
{
|
|
case CW_REVENGE_ADD_CMD:
|
|
{
|
|
MSG_CW_REVENGE_ADD_CMD * pRecvPacket = (MSG_CW_REVENGE_ADD_CMD *)pMsg;
|
|
|
|
m_byRevengePoint=pRecvPacket->m_byRevengePoint;
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
|
|
#ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
StrnCopy(szWideString , pRecvPacket->m_sRevengeStat.sPacketInfo.ptszRevengeName,
|
|
MAX_CHARNAME_LENGTH);
|
|
AddRevenge(szWideString,
|
|
pRecvPacket->m_sRevengeStat.sPacketInfo.Level,
|
|
pRecvPacket->m_sRevengeStat.sPacketInfo.byClass,
|
|
pRecvPacket->m_sRevengeStat.sPacketInfo.bOnline,
|
|
pRecvPacket->m_sRevengeStat.sPacketInfo.byChannelID,
|
|
pRecvPacket->m_sRevengeStat.dwRevengeCharGuid);
|
|
#else
|
|
StrnCopy(szWideString , pRecvPacket->m_sRevengeStat.ptszRevengeName,
|
|
MAX_CHARNAME_LENGTH);
|
|
AddRevenge(szWideString,
|
|
pRecvPacket->m_sRevengeStat.Level,
|
|
pRecvPacket->m_sRevengeStat.byClass,
|
|
pRecvPacket->m_sRevengeStat.bOnline,
|
|
pRecvPacket->m_sRevengeStat.byChannelID,
|
|
0);
|
|
#endif
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
//5271 %s님을 리벤지 리스트에 추가하였습니다.
|
|
TCHAR szString[INTERFACE_STRING_LENGTH] = {0,};
|
|
TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,};
|
|
|
|
g_InterfaceManager.GetInterfaceString(5271, szTemp, INTERFACE_STRING_LENGTH);
|
|
Snprintf (szString, INTERFACE_STRING_LENGTH-1, szTemp, szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szString );
|
|
|
|
|
|
}
|
|
break;
|
|
|
|
|
|
case CW_REVENGE_DEL_ACK:
|
|
{
|
|
MSG_CW_REVENGE_DEL_ACK * pRecvPacket = (MSG_CW_REVENGE_DEL_ACK *)pMsg;
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->m_ptszCharName, MAX_CHARNAME_LENGTH);
|
|
|
|
DeleteRevenge(szWideString);
|
|
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
//5272 %s님을 리벤지 리스트에서 삭제하였습니다.
|
|
TCHAR szString[INTERFACE_STRING_LENGTH] = {0,};
|
|
TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,};
|
|
|
|
g_InterfaceManager.GetInterfaceString(5272, szTemp, INTERFACE_STRING_LENGTH);
|
|
Snprintf (szString, INTERFACE_STRING_LENGTH-1, szTemp, szWideString);
|
|
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szString );
|
|
|
|
|
|
}
|
|
break;
|
|
|
|
case CW_REVENGE_DEL_NAK:
|
|
{
|
|
MSG_CW_REVENGE_DEL_NAK * pRecvPacket = (MSG_CW_REVENGE_DEL_NAK *)pMsg;
|
|
|
|
ShowRevengeResultCode(pRecvPacket->m_byErrorCode);
|
|
}
|
|
break;
|
|
|
|
|
|
case CW_REVENGE_LIST_CMD:
|
|
{
|
|
MSG_CW_REVENGE_LIST_CMD * pRecvPacket = (MSG_CW_REVENGE_LIST_CMD *)pMsg;
|
|
|
|
m_byRevengePoint=pRecvPacket->byRevengePoint;
|
|
|
|
for(int i=0;i<pRecvPacket->byRevengeStatNum;++i)
|
|
{
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
|
|
#ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
StrnCopy(szWideString , pRecvPacket->sRevengeStat[i].sPacketInfo.ptszRevengeName,
|
|
MAX_CHARNAME_LENGTH);
|
|
AddRevenge(szWideString,
|
|
pRecvPacket->sRevengeStat[i].sPacketInfo.Level,
|
|
pRecvPacket->sRevengeStat[i].sPacketInfo.byClass,
|
|
pRecvPacket->sRevengeStat[i].sPacketInfo.bOnline,
|
|
pRecvPacket->sRevengeStat[i].sPacketInfo.byChannelID,
|
|
pRecvPacket->sRevengeStat[i].dwRevengeCharGuid);
|
|
#else
|
|
StrnCopy(szWideString , pRecvPacket->sRevengeStat[i].ptszRevengeName,
|
|
MAX_CHARNAME_LENGTH);
|
|
AddRevenge(szWideString,
|
|
pRecvPacket->sRevengeStat[i].Level,
|
|
pRecvPacket->sRevengeStat[i].byClass,
|
|
pRecvPacket->sRevengeStat[i].bOnline,
|
|
pRecvPacket->sRevengeStat[i].byChannelID,
|
|
0);
|
|
#endif
|
|
}
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
this->SEND_CW_MEMO_LIST_REQ();
|
|
}
|
|
break;
|
|
|
|
case CW_REVENGE_LOGIN_BRD:
|
|
{
|
|
MSG_CW_REVENGE_LOGIN_BRD * pRecvPacket = (MSG_CW_REVENGE_LOGIN_BRD *)pMsg;
|
|
|
|
TCHAR szConvertCharName[MAX_CHARNAME_LENGTH +1 ]= {0,};
|
|
StrnCopy( szConvertCharName , pRecvPacket->m_ptszCharName, MAX_CHARNAME_LENGTH );
|
|
|
|
SetRevengeOnline(szConvertCharName, TRUE, pRecvPacket->byChannelID);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
}
|
|
break;
|
|
|
|
case CW_REVENGE_LOGOUT_BRD:
|
|
{
|
|
MSG_CW_REVENGE_LOGOUT_BRD * pRecvPacket = (MSG_CW_REVENGE_LOGOUT_BRD *)pMsg;
|
|
|
|
TCHAR szConvertCharName[MAX_CHARNAME_LENGTH +1] = {0,};
|
|
StrnCopy( szConvertCharName , pRecvPacket->ptszCharName, MAX_CHARNAME_LENGTH );
|
|
|
|
SetRevengeOnline(szConvertCharName, FALSE, 0);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
|
|
}
|
|
break;
|
|
|
|
case CW_REVENGE_LEVELUP_BRD:
|
|
{
|
|
MSG_CW_REVENGE_LEVELUP_BRD* pRecvPacket = (MSG_CW_REVENGE_LEVELUP_BRD*)pMsg;
|
|
TCHAR szCharName[MAX_CHARNAME_LENGTH +1] = {0,};
|
|
StrnCopy(szCharName , pRecvPacket->m_ptszCharName ,MAX_CHARNAME_LENGTH );
|
|
SetRevengeLevel(szCharName, pRecvPacket->m_Level);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshFriendList();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::AddMailData(STRUCT_SUBJECT_PACKETINFO *pSubject)
|
|
{
|
|
for(unsigned int i=0; i<m_vecMailData.size(); ++i)
|
|
{
|
|
if(pSubject->m_MemoGuid == m_vecMailData[i].m_subject.m_MemoGuid)
|
|
return;
|
|
}
|
|
|
|
if(m_vecMailData.size() >= MAX_MEMO_NUM)
|
|
{
|
|
// 쪽지 최대갯수를 넘겼을 경우
|
|
// 오래된 쪽지부터 지운다 guid가 작은것 부터
|
|
DelOldMail();
|
|
}
|
|
|
|
MAIL_DATA data;
|
|
ZeroMemory(&data, sizeof(data));
|
|
data.m_bRecvMemo = false;
|
|
CopyMemory(&(data.m_subject), pSubject, sizeof(STRUCT_SUBJECT_PACKETINFO));
|
|
|
|
m_vecMailData.push_back(data);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::AddMailDataBegin(STRUCT_SUBJECT_PACKETINFO *pSubject)
|
|
{
|
|
for(unsigned int i=0; i<m_vecMailData.size(); ++i)
|
|
{
|
|
if(pSubject->m_MemoGuid == m_vecMailData[i].m_subject.m_MemoGuid)
|
|
return;
|
|
}
|
|
|
|
if(m_vecMailData.size() >= MAX_MEMO_NUM)
|
|
{
|
|
// 쪽지 최대갯수를 넘겼을 경우
|
|
// 오래된 쪽지부터 지운다 guid가 작은것 부터
|
|
DelOldMail();
|
|
}
|
|
|
|
MAIL_DATA data;
|
|
ZeroMemory(&data, sizeof(data));
|
|
data.m_bRecvMemo = false;
|
|
CopyMemory(&(data.m_subject), pSubject, sizeof(STRUCT_SUBJECT_PACKETINFO));
|
|
|
|
std::vector<MAIL_DATA>::iterator it = m_vecMailData.begin();
|
|
m_vecMailData.insert(it, data);
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::AddMailView(const MSG_CW_MEMO_VIEW_ANS* memo_view)
|
|
{
|
|
MAIL_DATA* mail_data = NULL;
|
|
size_t mail_data_index = m_vecMailData.size();
|
|
for(size_t index = 0; index < mail_data_index; ++index)
|
|
{
|
|
MAIL_DATA* mail_data = &(m_vecMailData[index]);
|
|
if(memo_view->m_MemoGuid == mail_data->m_subject.m_MemoGuid)
|
|
{
|
|
mail_data->m_bRecvMemo = true;
|
|
mail_data->m_subject.m_byRead = 1;
|
|
|
|
StrnCopy(m_vecMailData[index].m_ptszMemo,
|
|
memo_view->m_ptszMemo,
|
|
_tcslen(memo_view->m_ptszMemo));
|
|
mail_data->m_recvItemCode = memo_view->m_recvItemCode;
|
|
mail_data->m_amountCost = memo_view->m_amountCost;
|
|
// 받아야할 아이템/하임이 있을 경우 요청한다. :관련하여 UI가 추가되면 위치를 옮겨야함
|
|
if (mail_data->m_amountCost != 0)
|
|
{
|
|
SEND_CG_EVENT_SYSTEMMEMO_ITEM_REWARD_REQ(mail_data);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void uiCommunityMan::SEND_CG_EVENT_SYSTEMMEMO_ITEM_REWARD_REQ(const MAIL_DATA* mail_data)
|
|
{
|
|
MSG_CG_EVENT_SYSTEMMEMO_ITEM_REWARD_REQ send_packet;
|
|
send_packet.memo_guid_ = mail_data->m_subject.m_MemoGuid;
|
|
StrnCopy(send_packet.memo_contents_, mail_data->m_ptszMemo, MAX_MEMO_STRLENGTH);
|
|
send_packet.memo_contents_[MAX_MEMO_STRLENGTH - 1] = '\0';
|
|
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send_packet, sizeof(send_packet));
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::DelOldMail()
|
|
{
|
|
MEMOGUID delGuid = 0;
|
|
|
|
std::vector<MAIL_DATA>::iterator it;
|
|
for(it = m_vecMailData.begin(); it != m_vecMailData.end(); ++it)
|
|
{
|
|
if(delGuid == 0)
|
|
{
|
|
// 처음
|
|
delGuid = (*it).m_subject.m_MemoGuid;
|
|
}
|
|
else
|
|
{
|
|
// 제일 작은 guid를 찾는다
|
|
if(delGuid > (*it).m_subject.m_MemoGuid)
|
|
delGuid = (*it).m_subject.m_MemoGuid;
|
|
}
|
|
}
|
|
|
|
if(delGuid > 0)
|
|
{
|
|
DelMail(delGuid, false);
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
//5771 쪽지 최대 개수 초과로 인해 오래된 쪽지를 삭제했습니다.
|
|
g_InterfaceManager.GetInterfaceString(5771 , szMessage ,INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_SysMsg(szMessage);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::DelMail(MEMOGUID guid, bool bMsgShow/* = true*/)
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
|
|
std::vector<MAIL_DATA>::iterator it;
|
|
for(it = m_vecMailData.begin(); it != m_vecMailData.end(); ++it)
|
|
{
|
|
if((*it).m_subject.m_MemoGuid == guid)
|
|
{
|
|
m_vecMailData.erase(it);
|
|
if(bMsgShow)
|
|
{
|
|
// 5772 쪽지를 삭제했습니다.
|
|
g_InterfaceManager.GetInterfaceString( 5772 , szMessage ,INTERFACE_STRING_LENGTH );
|
|
GlobalFunc::OutputMsg_SysMsg(szMessage);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::DelAllMailData(bool bMsgShow/* = true*/)
|
|
{
|
|
m_vecMailData.clear();
|
|
|
|
if(bMsgShow)
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
//5773 전체 쪽지를 삭제했습니다.
|
|
g_InterfaceManager.GetInterfaceString( 5773 , szMessage ,INTERFACE_STRING_LENGTH);
|
|
GlobalFunc::OutputMsg_SysMsg(szMessage);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
MEMOGUID uiCommunityMan::GetCurMailGuid()
|
|
{
|
|
if(m_pUICommunityDlg)
|
|
{
|
|
m_iCurMailSelect = m_pUICommunityDlg->GetCurListSel();
|
|
|
|
if((m_iCurMailSelect >= 0) && ((unsigned int)m_iCurMailSelect < m_vecMailData.size()))
|
|
{
|
|
MAIL_DATA *pData = m_pUICommunityDlg->GetCurMailData(m_iCurMailSelect);
|
|
if(pData)
|
|
{
|
|
return pData->m_subject.m_MemoGuid;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::OnRecvCW_Memo(MSG_BASE *pMsg)
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
TCHAR szWideString[INTERFACE_STRING_LENGTH] = {0,};
|
|
|
|
if(!m_pUICommunityDlg)
|
|
return;
|
|
|
|
switch(pMsg->m_byProtocol)
|
|
{
|
|
case CW_MEMO_SEND_ACK: // 쪽지 전송 성공
|
|
{
|
|
MSG_CW_MEMO_SEND_ACK *pRecvPacket = (MSG_CW_MEMO_SEND_ACK *)pMsg;
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->m_ptszRecvName, MAX_CHARNAME_LENGTH);
|
|
TCHAR szTemp[INTERFACE_STRING_LENGTH] ={0,};
|
|
//5774 %s님에게 쪽지를 전송했습니다.
|
|
g_InterfaceManager.GetInterfaceString( 5774 , szTemp ,INTERFACE_STRING_LENGTH);
|
|
|
|
Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szTemp , szWideString);
|
|
GlobalFunc::OutputMsg_SysMsg(szMessage);
|
|
m_pUICommunityWriteMail->ShowInterface(FALSE);
|
|
}
|
|
break;
|
|
|
|
case CW_MEMO_SEND_NAK: // 쪽지 전송 실패
|
|
{
|
|
MSG_CW_MEMO_SEND_NAK *pRecvPacket = (MSG_CW_MEMO_SEND_NAK *)pMsg;
|
|
ProcessMemoErrCode(pRecvPacket->m_byErrorCode);
|
|
}
|
|
break;
|
|
|
|
case CW_MEMO_LIST_ANS: // 쪽지 목록
|
|
{
|
|
m_bRecvMailInfo = true;
|
|
|
|
MSG_CW_MEMO_LIST_ANS *pRecvPacket = (MSG_CW_MEMO_LIST_ANS *)pMsg;
|
|
if(pRecvPacket->m_byMemoPageCnt == 1)
|
|
{
|
|
m_vecMailData.clear();
|
|
}
|
|
|
|
for(int i=0; i<pRecvPacket->m_byMemoCnt; ++i)
|
|
{
|
|
AddMailDataBegin(&(pRecvPacket->m_Subject[i]));
|
|
}
|
|
|
|
if(pRecvPacket->m_byMemoPageCnt == pRecvPacket->m_byMemoPageCnt)
|
|
{
|
|
// 전송 완료
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshMailList();
|
|
}
|
|
|
|
if( HaveNewNote() )
|
|
{
|
|
GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, g_InterfaceManager.GetInterfaceString( 5449 ) );
|
|
}
|
|
|
|
}
|
|
break;
|
|
|
|
case CW_MEMO_LIST_NAK: // 쪽지 목록 실패
|
|
{
|
|
}
|
|
break;
|
|
|
|
case CW_MEMO_VIEW_ANS: // 쪽지 내용 확인
|
|
{
|
|
UnsetPKBool(ePKBOOL_COMMUNITY_CW_MEMO_VIEW_REQ-1);
|
|
MSG_CW_MEMO_VIEW_ANS *pRecvPacket = (MSG_CW_MEMO_VIEW_ANS *)pMsg;
|
|
|
|
AddMailView(pRecvPacket);
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshMailList();
|
|
|
|
ShowReadMailDlg(pRecvPacket->m_MemoGuid);
|
|
}
|
|
break;
|
|
|
|
case CW_MEMO_VIEW_NAK: // 쪽지 내용 실패
|
|
{
|
|
UnsetPKBool(ePKBOOL_COMMUNITY_CW_MEMO_VIEW_REQ);
|
|
MSG_CW_MEMO_VIEW_NAK *pRecvPacket = (MSG_CW_MEMO_VIEW_NAK *)pMsg;
|
|
ProcessMemoErrCode(pRecvPacket->m_byErrorCode);
|
|
}
|
|
break;
|
|
|
|
case CW_MEMO_DELETE_ACK: // 쪽지 삭제
|
|
{
|
|
MSG_CW_MEMO_DELETE_ACK *pRecvPacket = (MSG_CW_MEMO_DELETE_ACK *)pMsg;
|
|
|
|
if(pRecvPacket->m_MemoGuid == 0)
|
|
{
|
|
DelAllMailData();
|
|
}
|
|
else
|
|
{
|
|
DelMail(pRecvPacket->m_MemoGuid);
|
|
}
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshMailList();
|
|
}
|
|
break;
|
|
|
|
case CW_MEMO_DELETE_NAK: // 쪽지 삭제 실패
|
|
{
|
|
MSG_CW_MEMO_DELETE_NAK *pRecvPacket = (MSG_CW_MEMO_DELETE_NAK *)pMsg;
|
|
ProcessMemoErrCode(pRecvPacket->m_byErrorCode);
|
|
}
|
|
break;
|
|
|
|
case CW_MEMO_NEWMEMO_BRD: // 새 쪽지 알림
|
|
{
|
|
MSG_CW_MEMO_NEWMEMO_BRD *pRecvPacket = (MSG_CW_MEMO_NEWMEMO_BRD *)pMsg;
|
|
|
|
AddMailDataBegin(&(pRecvPacket->m_Subject));
|
|
|
|
if(m_pUICommunityDlg->IsVisibleWindow())
|
|
m_pUICommunityDlg->RefreshMailList();
|
|
|
|
ZeroMemory(szWideString, sizeof(szWideString));
|
|
StrnCopy(szWideString , pRecvPacket->m_Subject.m_SendName, MAX_CHARNAME_LENGTH);
|
|
|
|
if(pRecvPacket->m_Subject.m_MemoType==STRUCT_SUBJECT_PACKETINFO::SYSTEM_MEMO)
|
|
{
|
|
char *pStr = pRecvPacket->m_Subject.m_ptszSubject;
|
|
|
|
//0번째인덱스는 어떤종류의 시스템메시지인지 나타내는값이다(서버와의 규약)
|
|
int nSystemType = (int)ParseMemoInfo(pStr,0,MAX_SUBJECT_STRLENGTH-1);
|
|
|
|
switch(nSystemType)
|
|
{
|
|
case STRUCT_SUBJECT_PACKETINFO::NORMAL_TYPE:
|
|
{
|
|
}
|
|
break;
|
|
case STRUCT_SUBJECT_PACKETINFO::LOTTO_TYPE://하임행운일경우:발신자명을 맵핑시켜준다.
|
|
case STRUCT_SUBJECT_PACKETINFO::LOTTO_TYPE_NEW:
|
|
{
|
|
//1885:하임행운
|
|
g_InterfaceManager.GetInterfaceString( 1885 , szWideString);
|
|
}
|
|
break;
|
|
|
|
case STRUCT_SUBJECT_PACKETINFO::GROUP_TYPE ://그룹일경우:발신자명을 맵핑시켜준다.
|
|
{
|
|
//314: 그룹관리자
|
|
g_InterfaceManager.GetInterfaceString(314,szWideString);
|
|
}
|
|
break;
|
|
|
|
case STRUCT_SUBJECT_PACKETINFO::FRINVATE_START_TYPE ://친구이벤트:발신자명을 맵핑시켜준다.
|
|
case STRUCT_SUBJECT_PACKETINFO::FRINVATE_END_TYPE:
|
|
case STRUCT_SUBJECT_PACKETINFO::FRINVATE_PRESENT_TYPE:
|
|
case STRUCT_SUBJECT_PACKETINFO::FRBEINVATED_START_TYPE:
|
|
case STRUCT_SUBJECT_PACKETINFO::FRBEINVATED_END_TYPE:
|
|
case STRUCT_SUBJECT_PACKETINFO::FRBEINVATED_PRESENT_TYPE:
|
|
{
|
|
//4007: 친구초대 이벤트 요원
|
|
g_InterfaceManager.GetInterfaceString(4007,szWideString);
|
|
}
|
|
break;
|
|
case STRUCT_SUBJECT_PACKETINFO::DOMINATION_TYPE_RETURN:
|
|
case STRUCT_SUBJECT_PACKETINFO::DOMINATION_TYPE_REWARD:
|
|
case STRUCT_SUBJECT_PACKETINFO::DOMINATION_TYPE_RETURN_NEW:
|
|
case STRUCT_SUBJECT_PACKETINFO::DOMINATION_TYPE_REWARD_NEW:
|
|
{
|
|
// 발신자맵핑 3377 피의성전 관리자
|
|
g_InterfaceManager.GetInterfaceString(3377,szWideString);
|
|
}
|
|
break;
|
|
#if defined(_NA_006802_20130819_REORGANIZATION_RANK_SYSTEM_MINOR)
|
|
case STRUCT_SUBJECT_PACKETINFO::WORLDRANKING_TYPE_REWARD_ALARAM:
|
|
{
|
|
// 5478 월드랭킹
|
|
g_InterfaceManager.GetInterfaceString(5478, szWideString);
|
|
}
|
|
break;
|
|
#endif // _NA_006802_20130819_REORGANIZATION_RANK_SYSTEM_MINOR
|
|
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
|
|
case STRUCT_SUBJECT_PACKETINFO::GUILD_JOIN_REQUEST:
|
|
{
|
|
// 1444 : 길드 관리인
|
|
g_InterfaceManager.GetInterfaceString(1444, szWideString);
|
|
}
|
|
break;
|
|
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
|
|
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM
|
|
case STRUCT_SUBJECT_PACKETINFO::SUN_RANKING_SETTLE_RESULT_TYPE:
|
|
{
|
|
// 3599 : SUN 랭킹
|
|
g_InterfaceManager.GetInterfaceString(3599, szWideString);
|
|
}
|
|
break;
|
|
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
TCHAR szTemp[INTERFACE_STRING_LENGTH] ={0,};
|
|
//5775 %s님에게 쪽지를 받았습니다.
|
|
g_InterfaceManager.GetInterfaceString( 5775 , szTemp ,INTERFACE_STRING_LENGTH);
|
|
Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szTemp , szWideString);
|
|
GlobalFunc::OutputMsg_SysMsg(szMessage);
|
|
|
|
}
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
|
|
BOOL uiCommunityMan::HaveNewNote()
|
|
{
|
|
MAIL_DATA_VECTOR_ITRTYPE itr = m_vecMailData.begin();
|
|
MAIL_DATA_VECTOR_ITRTYPE end = m_vecMailData.end();
|
|
|
|
for( ; itr != end; ++itr )
|
|
{
|
|
if( itr->m_subject.m_byRead == 0 ) // 읽지 않은게 한게 라도 있으면 TRUE 리턴
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::ProcessMemoErrCode(BYTE byErrCode)
|
|
{
|
|
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
|
|
TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,};
|
|
|
|
bool bCloseMemo = true;
|
|
|
|
switch(byErrCode)
|
|
{
|
|
case RC_MEMO_SUCCESS: // 성공
|
|
break;
|
|
|
|
case RC_MEMO_FAILED: // 실패
|
|
{
|
|
//5776 쪽지: 실패했습니다.
|
|
g_InterfaceManager.GetInterfaceString( 5776 , szMessage ,INTERFACE_STRING_LENGTH);
|
|
}
|
|
break;
|
|
|
|
case RC_MEMO_NOUSER: // 해당 사용자 없음
|
|
{
|
|
// 5777 쪽지: 해당 사용자가 없습니다.
|
|
g_InterfaceManager.GetInterfaceString( 5777 , szMessage ,INTERFACE_STRING_LENGTH);
|
|
}
|
|
break;
|
|
|
|
case RC_MEMO_NOMEMO: // 해당하는 쪽지가 없음
|
|
{
|
|
//5778 쪽지: 해당 쪽지가 없습니다.
|
|
g_InterfaceManager.GetInterfaceString( 5778 , szMessage ,INTERFACE_STRING_LENGTH);
|
|
}
|
|
break;
|
|
|
|
case RC_MEMO_WAIT_INFO: // 일정 시간 안에 계속 요청할 수 없음
|
|
{
|
|
__asm nop;
|
|
}
|
|
break;
|
|
|
|
case RC_MEMO_DOING_TRANSACTION:
|
|
{
|
|
__asm nop;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
{
|
|
//5779 쪽지: 오류입니다.
|
|
g_InterfaceManager.GetInterfaceString( 5779 , szMessage ,INTERFACE_STRING_LENGTH);
|
|
}
|
|
break;
|
|
}
|
|
if(bCloseMemo)
|
|
{
|
|
m_pUICommunityWriteMail->ShowInterface(FALSE);
|
|
}
|
|
|
|
if(szMessage[0] != NULL)
|
|
{
|
|
GlobalFunc::OutputMsg_SysMsg(szMessage);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
void uiCommunityMan::RqstRefreshFriendInfo()
|
|
{
|
|
if(_tcslen(m_FriendInfo.m_ptszCharName) > 0)
|
|
{
|
|
#ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO //! Send_CW_GROUP_STATUS_REQ 사용하지 않는다.
|
|
Send_CW_FRIEND_STATUS_REQ(m_FriendInfo.m_ptszCharName, m_FriendInfo.m_dwCharGuid);
|
|
#else
|
|
if(IsOnline(m_FriendInfo.m_ptszCharName))
|
|
{
|
|
#ifdef __KR_001355_20090624_GROUPINGSYSTEM_ALL
|
|
if(GetPendingInfoMode() == eCM_GROUP )
|
|
{
|
|
Send_CW_GROUP_STATUS_REQ(m_FriendInfo.m_ptszCharName);
|
|
}
|
|
else
|
|
#endif//__KR_001355_20090624_GROUPINGSYSTEM_ALL :elflee
|
|
{
|
|
Send_CW_FRIEND_STATUS_REQ(m_FriendInfo.m_ptszCharName, m_FriendInfo.m_dwCharGuid);
|
|
}
|
|
}
|
|
#endif //_NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
*/
|
|
//------------------------------------------------------------------------------
|
|
//! 길드창에서 double 클릭시도 사용할수 있게 함수로 뺌
|
|
void uiCommunityMan::OnRecvCW_Friend_STATUS_ANS(MSG_BASE *pMsg)
|
|
{
|
|
MSG_CW_FRIEND_STATUS_ANS *pRecvPacket = (MSG_CW_FRIEND_STATUS_ANS *)pMsg;
|
|
FRIEND_INFO_DATA info;
|
|
ZeroMemory(&info, sizeof(info));
|
|
StrnCopy(info.m_ptszCharName, pRecvPacket->m_ptszCharName, MAX_CHARNAME_LENGTH);
|
|
StrnCopy(info.m_tszGuildName, pRecvPacket->m_tszGuildName, MAX_GUILDNAME_LENGTH);
|
|
info.m_byChannel = pRecvPacket->m_byChannel;
|
|
info.m_byZoneType = pRecvPacket->m_byZoneType;
|
|
info.m_dwZoneKey = pRecvPacket->m_dwZoneKey;
|
|
info.m_MapCode = pRecvPacket->m_MapCode;
|
|
info.m_byDuty = pRecvPacket->m_byDuty;
|
|
|
|
#ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
StrnCopy(info.m_ptszMemo, pRecvPacket->m_ptszMemo, MAX_FRIEND_MEMO_LENGHT);
|
|
info.m_dwCharGuid = GetGUID(info.m_ptszCharName);
|
|
#endif //_NA_0_20100527_ADD_CHAR_RELATION_MEMO
|
|
|
|
SetFriendInfo(info);
|
|
ShowFriendInfoDlg();
|
|
}
|
|
|
|
STRUCT_SUBJECT_PACKETINFO::eMEMOTYPE uiCommunityMan::GetMemoType(MEMOGUID memo_guid)
|
|
{
|
|
STRUCT_SUBJECT_PACKETINFO::eMEMOTYPE memo_type = STRUCT_SUBJECT_PACKETINFO::NORMAL_MEMO;
|
|
|
|
if (memo_guid != 0)
|
|
{
|
|
std::vector<MAIL_DATA>::iterator memo_data_itr = m_vecMailData.begin();
|
|
std::vector<MAIL_DATA>::iterator memo_data_itr_end = m_vecMailData.end();
|
|
for ( ; memo_data_itr != memo_data_itr_end; ++memo_data_itr)
|
|
{
|
|
if (memo_guid == (*memo_data_itr).m_subject.m_MemoGuid)
|
|
{
|
|
memo_type = (*memo_data_itr) .m_subject.m_MemoType;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return memo_type;
|
|
}
|