Files
Sun1602/Client/GameClient/Interface/uiGuildMan/uiGuildMan_main.cpp
T
2022-10-26 12:25:11 +08:00

1192 lines
29 KiB
C++

//------------------------------------------------------------------------------
// uiGuildMan_main.cpp
// (C) 2005 ckbang
//------------------------------------------------------------------------------
#include "SunClientPrecompiledHeader.h"
#ifdef _NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
#else
#include "uiGuildMan.h"
#include "uiGuildMain/uiGuildMain.h"
#include "uiGuildCreate/uiGuildCreate.h"
#include "uiGuildMenu/uiGuildMenu.h"
#include "uiGuildWindow/uiGuildWindow.h"
#include "uitargetman/uitargetman.h"
#include "TargetDialog.h"
#include "ObjectManager.h"
#include "globalfunc.h"
#include "InterfaceManager.h"
#include "uiSystemMan/uiSystemMan.h"
#include "uiGuildConvertGP.h"
#include "uiGuildDonateUP.h"
#include "uiGuildRankup.h"
#include "GuildRankInfoParser.h"
#include "uiGuildCorpsChange/uiGuildCorpsChange.h"
#ifdef _NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM
#include "GuildSystem/uiGuildWareHouse.h"
#else
#include "uiGuildWareHouse/uiGuildWareHouse.h"
#endif //_NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM
#include "uiGuildMarkCombination/uiGuildMarkCombination.h"
#include "uiGuildMarkRegisteConfirm/uiGuildMarkRegisteConfirm.h"
void _Callback_Guild_WithDraw_Warning(bool bYes)
{
if(bYes)
{
MSG_CG_GUILD_WITHDRAW_SYN sync;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &sync, sizeof (sync));
}
}
template <class T, T stGUILD_MEMBER_INFO::*p>
bool sortGuildMemberByTypeHigh(stGUILD_MEMBER_INFO & lhw, stGUILD_MEMBER_INFO& rhw)
{
return lhw.*p < rhw.*p;
}
template <class T, T stGUILD_MEMBER_INFO::*p>
bool sortGuildMemberByTypeLow(stGUILD_MEMBER_INFO & lhw, stGUILD_MEMBER_INFO& rhw)
{
return lhw.*p > rhw.*p;
}
//! vs2008 에서는
//! 기본 클래스의 멤버 포인터에서 파생 클래스의 멤버 포인터로의 표준 변환은 템플릿 인수에 적용되지 않습니다.
template <class T, T BASE_GUILD_MEMBER_INFO::*p>
bool sortGuildMemberByTypeHigh_Base(stGUILD_MEMBER_INFO & lhw, stGUILD_MEMBER_INFO& rhw)
{
return lhw.*p < rhw.*p;
}
template <class T, T BASE_GUILD_MEMBER_INFO::*p>
bool sortGuildMemberByTypeLow_Base(stGUILD_MEMBER_INFO & lhw, stGUILD_MEMBER_INFO& rhw)
{
return lhw.*p > rhw.*p;
}
//스트링 StrCmp이용한 정렬
bool sortGuildMemberByNameHigh(stGUILD_MEMBER_INFO & lhw, stGUILD_MEMBER_INFO & rhw)
{
int returnValue = StrnCmp(lhw.m_tszCharName , rhw.m_tszCharName, MAX_CHARNAME_LENGTH);
if( returnValue < 0 )
return true;
else
return false;
}
bool sortGuildMemberByNameLow(stGUILD_MEMBER_INFO & lhw, stGUILD_MEMBER_INFO & rhw)
{
int returnValue = StrnCmp(lhw.m_tszCharName , rhw.m_tszCharName, MAX_CHARNAME_LENGTH);
if( returnValue > 0 )
return true;
else
return false;
}
//------------------------------------------------------------------------------
/**
*/
void _KickGuildMember(bool bYes)
{
if(bYes)
{
uiGuildMan* guildMan =
static_cast<uiGuildMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_GUILD));
if(guildMan && guildMan->GetKickUser())
{
MSG_CG_GUILD_KICKPLAYER_SYN sync;
StrnCopy(sync.m_ptszKickCharName, guildMan->GetKickUser(), MAX_CHARNAME_LENGTH);
sync.m_ptszKickCharName[_countof(sync.m_ptszKickCharName) - 1] = '\0';
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &sync, sizeof (sync));
}
}
}
//------------------------------------------------------------------------------
/**
*/
uiGuildMan::uiGuildMan(InterfaceManager *pUIMan) :
uiBaseMan(pUIMan)
,request_uibase_guild_totalinfo_(0)
{
this->m_bGuildInfo = false;
this->m_bSilentGuildInfo = false;
this->m_bShowGuildMain = false;
this->m_bGuildMemberInfo = false;
m_pUIGuildMain = NULL;
m_pUIGuildCreate = NULL;
m_pUIGuildMenu = NULL;
m_pUIGuildWindow = NULL;
active_tab_ = NULL;
m_strGuildName.clear();
m_strGuildMasterName.clear();
ZeroMemory(m_tszKickMember, sizeof(m_tszKickMember));
ZeroMemory(m_tszNotice, sizeof(m_tszNotice));
this->m_timerGuildMemberInfoGet.Off();
m_bForSort = TRUE;
ZeroMemory(&m_GuildCorpsTotalInfo,sizeof(m_GuildCorpsTotalInfo));
m_hGuildMarkTexture = g_pSunRenderer->x_pManagerTexture->LoadTexture( "Data\\Interface\\all_GuildMark.tga" ,TLS_ORIGINAL_SIZE | TLS_NO_MIPMAP | TLS_NO_MULTITHREAD);
ZeroMemory(&m_GuildInfo, sizeof(m_GuildInfo));
}
//------------------------------------------------------------------------------
/**
*/
uiGuildMan::~uiGuildMan()
{
active_tab_ = NULL;
}
//------------------------------------------------------------------------------
/**
*/
void
uiGuildMan::OnInitialize()
{
_LoadUI();
}
//------------------------------------------------------------------------------
/**
*/
void
uiGuildMan::OnRelease()
{
DelRelationCon();
if( m_hGuildMarkTexture != INVALID_HANDLE_VALUE )
{
g_pSunRenderer->x_pManagerTexture->DestroyTexture( m_hGuildMarkTexture );
m_hGuildMarkTexture = INVALID_HANDLE_VALUE;
}
}
//------------------------------------------------------------------------------
void uiGuildMan::OnReset()
{
set_active_tab(NULL);
}
//------------------------------------------------------------------------------
/**
*/
void
uiGuildMan::Clear()
{
this->m_bGuildInfo = false;
this->m_bGuildMemberInfo = false;
m_strGuildName.clear();
m_strGuildMasterName.clear();
ZeroMemory(m_tszKickMember, sizeof(m_tszKickMember));
ZeroMemory(&m_GuildInfo, sizeof(m_GuildInfo));
if (g_pHero)
{
g_pHero->ClearGuildRenderInfo();
}
}
//------------------------------------------------------------------------------
/**
*/
bool
uiGuildMan::CheckCreatCondition()
{
TCHAR szMessage[INTERFACE_STRING_LENGTH], szText[INTERFACE_STRING_LENGTH];
if (this->IsGuildInfo())
{
// 이미 '%s' 길드에 속해 있읍니다.
g_InterfaceManager.GetInterfaceString( eST_ALREADY_NAMECODE_GUILD_MEMBER, szText, INTERFACE_STRING_LENGTH );
Sprintf (szMessage, szText, this->m_GuildInfo.m_tszGuildName );
uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM);
if(pSystemMan)
pSystemMan->Sys_VerifyLock(szMessage, FALSE);
return false;
}
if (!g_pHero)
{
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("My 캐릭터가 없습니다. (g_pHero == NULL)"));
return false;
}
if (g_pHero->GetLevel() < CREATE_GUILD_LIMIT_LEVEL)
{
// 길드 창설자의 레벨은 20 이상이어야 합니다.
g_InterfaceManager.GetInterfaceString( eST_CHECK_GUILD_MASTER_LEVEL_20, szText, INTERFACE_STRING_LENGTH );
uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM);
if(pSystemMan)
pSystemMan->Sys_VerifyLock(szText, FALSE);
return false;
}
BASE_PLAYERINFO* bp = g_pHero->GetCharInfo();
if (!bp)
{
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("My 캐릭터의 BASE_PLAYERINFO 가 NULL 입니다."));
return false;
}
MONEY money = -1;
GuildRankInfo * pRankInfo = GuildRankInfoParser::Instance()->FindGuildRankInfo( GRADE_AT_GUILD_CREATE );
if( pRankInfo != NULL )
money = pRankInfo->m_dwHeim;
if( bp->m_Money < static_cast<INT64>(money) )
{
// 자금이 부족해 길드를 창설할 수 없습니다!!
g_InterfaceManager.GetInterfaceString( eST_NOT_ENOUGH_MONEY_FOR_CREATE_GUILD, szText, INTERFACE_STRING_LENGTH );
uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM);
if(pSystemMan)
pSystemMan->Sys_VerifyLock(szText, FALSE);
return false;
}
return true;
}
//------------------------------------------------------------------------------
/**
*/
void
uiGuildMan::SEND_CG_GUILD_DESTROY_SYN()
{
MSG_CG_GUILD_DESTROY_SYN send;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send, sizeof (send));
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SEND_CG_GUILD_TOTALINFO_REQ_SYN(uiBase* base)
{
request_uibase_guild_totalinfo_ = base;
if(eGUILD_DELCHK_DESTROY_WAIT == GetGuildDelChk())
{
TCHAR szMessage[INTERFACE_STRING_LENGTH + 1] = {0,};
//6236 길드 해산 대기 중입니다.
g_InterfaceManager.GetInterfaceString(6236, szMessage);
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return;
}
if( IsGuildMemberInfo() == FALSE )
{
MSG_CG_GUILD_TOTALINFO_REQ_SYN SendPacket;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket));
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("MSG_CG_GUILD_TOTALINFO_REQ_SYN"));
}
else
{
if (base == NULL)
{
ShowGuildWindow();
}
}
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::ShowGuildWindow()
{
ShowTab();
//if (active_tab() != NULL)
//{
// active_tab()->ShowInterface(TRUE);
//}
//else if ((m_pUIGuildMain != NULL) && (m_pUIGuildMain->IsVisibleWindow() == FALSE))
//{
// m_pUIGuildMain->ShowInterface(TRUE);
//}
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SEND_CG_GUILD_INVITE_SYN( LPCTSTR szName )
{
if( szName == NULL || _tcslen( szName ) == 0 )
return;
MSG_CG_GUILD_INVITE_SYN send;
_tcsncpy( send.m_TargetCharName, szName, MAX_CHARNAME_LENGTH );
GlobalFunc::SendPacket( CI_GAMESERVERIDX, &send, sizeof( send ) );
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SEND_CG_GUILD_GUILDMARK_DELETE_SYN()
{
if( GetGuildInfo().m_PatternIdx && GetGuildInfo().m_BackGroundIdx )
{
MSG_CG_GUILD_GUILDMARK_DELETE_SYN SendMsg;
SendMsg.m_GuildIndex = GetGuildInfo().m_GuildGuid;
SendMsg.m_BackGroundIndex = GetGuildInfo().m_BackGroundIdx;
SendMsg.m_PatternIndex = GetGuildInfo().m_PatternIdx;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendMsg, sizeof(SendMsg));
}
else
{
uiSystemMan* pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if( pSystemMan )
{
//6272 길드마크가 등록되어 있지않습니다.
pSystemMan->Sys_Verify(g_InterfaceManager.GetInterfaceString(6272), FALSE);
}
}
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SetGuildMarkBackGround(int iBackGround)
{
m_GuildInfo.m_BackGroundIdx = iBackGround;
if( g_pHero )
{
g_pHero->GetGuildRenderInfo().m_BackGroundIndex = iBackGround;
}
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SetGuildMarkPattern(int iPattern)
{
m_GuildInfo.m_PatternIdx = iPattern;
if( g_pHero )
{
g_pHero->GetGuildRenderInfo().m_PatternIndex = iPattern;
}
}
//------------------------------------------------------------------------------
/**
*/
void
uiGuildMan::SEND_CG_GUILD_WITHDRAW_SYN()
{
MSG_CG_GUILD_WITHDRAW_SYN send;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send, sizeof (send));
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SEND_CG_GUILD_RANKUP_SYN()
{
MSG_CG_GUILD_RANKUP_SYN send;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send, sizeof (send));
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("SEND_CG_GUILD_RANKUP_SYN"));
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SEND_CG_GUILD_CONVERT_UP2GP_SYN()
{
MSG_CG_GUILD_CONVERT_UP2GP_SYN send;
send.m_ConvertGP = m_pUIGuildConvertGP->GetConverGP();
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send, sizeof (send));
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("SEND_CG_GUILD_CONVERT_UP2GP_SYN"));
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SEND_CG_GUILD_DONATE_UP_SYN()
{
MSG_CG_GUILD_DONATE_UP_SYN send;
send.m_DonateUP = m_pUIGuildDonateUP->GetDonateUP();
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send, sizeof (send));
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("SEND_CG_GUILD_DONATE_UP_SYN"));
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SEND_CG_GUILD_WAREHOUSE_OPEN_SYN()
{
TCHAR szMessage[INTERFACE_STRING_LENGTH];
if (m_pUIGuildWareHouse->IsVisible())
{
// 창고가 열린 상태입니다.
g_InterfaceManager.GetInterfaceString( eST_WAREHOUSE_ALREADY_OPEN, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
return;
}
MSG_CG_GUILD_WAREHOUSE_OPEN_SYN send;
send.m_GuildIndex = GetGuildInfo().m_GuildGuid;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send, sizeof(send));
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("SEND_CG_GUILD_WAREHOUSE_OPEN_SYN"));
}
void uiGuildMan::SEND_CG_GUILD_WAREHOUSE_CLOSE_SYN()
{
MSG_CG_GUILD_WAREHOUSE_CLOSE_SYN send;
send.m_GuildIndex = GetGuildInfo().m_GuildGuid;
BOOL bVal = GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send, sizeof(send));
if(bVal)
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("SEND_CG_GUILD_WAREHOUSE_CLOSE_SYN"));
else
GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, _T("SEND_CG_GUILD_WAREHOUSE_CLOSE_SYN 못보냈다."));
}
BOOL uiGuildMan::IsGuildWareHouseWindow()
{
if(m_pUIGuildWareHouse)
return m_pUIGuildWareHouse->IsVisible();
else
return FALSE;
}
BOOL uiGuildMan::IsGuildRankUpWindow()
{
if(m_pUIGuildRankup)
return m_pUIGuildRankup->IsVisible();
else
return FALSE;
}
void uiGuildMan::ShowGuildRankUpWindow(BOOL bVal)
{
m_pUIGuildRankup->ShowInterface(bVal);
}
//------------------------------------------------------------------------------
/**
*/
bool uiGuildMan::Invite(const TCHAR* pname)
{
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
if (pname == NULL && !(GET_DIALOG(IM_TARGET_MANAGER::TARGET_DIALOG)->IsVisible()))
{
// 선택된 플레이어가 없습니다.
this->GetUIMan()->GetInterfaceString( eST_NOT_SELECTED_PLAYER, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return false;
}
if(!_isEnableInvite())
{
return false;
}
DWORD dwTargetKey = 0;
Object * pTargetObj = NULL;
TCHAR szName[32];
if (pname == NULL)
{
// 타겟창에 있는 상대와의 거래
TargetDialog * pTargetDlg = GET_CAST_DIALOG(TargetDialog, IM_TARGET_MANAGER::TARGET_DIALOG);
assert (pTargetDlg);
dwTargetKey = pTargetDlg->GetTargetKey();
pTargetObj = g_ObjectManager.GetObject(dwTargetKey);
assert (pTargetObj);
if ( pTargetObj == NULL)
{
TCHAR* pInviteName = pTargetDlg->GetTargetName();
assert (pInviteName);
_tcsncpy( szName, pInviteName, 32 );
}
else
_tcsncpy( szName, pTargetObj->GetName(), 32 );
}
else
{
// 입력한 아이디와의 거래
#ifdef _K2P_OBJECT_MANAGER_MODIFIDY
if( g_ObjectManager.GetObject( pname ) == NULL )
{
// '%s' 님을 찾을 수 없습니다.
g_InterfaceManager.GetInterfaceString( eST_NAMECODE_NOT_FOUND, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Warning(eOUTPUT_MSG_CHAT, szMessage, pname);
return false;
}
#endif
_tcsncpy( szName, pname, 32 );
}
if( _tcslen( szName ) == 0 )
return false;
this->SEND_CG_GUILD_INVITE_SYN( szName );
return true;
}
//------------------------------------------------------------------------------
/**
*/
bool
uiGuildMan::_isEnableInvite()
{
if(!g_pHero)
return false;
TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,};
if (!IsGuildInfo())
{
//5165 길드에 가입되어 있지 않습니다.
g_InterfaceManager.GetInterfaceString( 5165, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return false;
}
return true;
}
//------------------------------------------------------------------------------
/**
*/
bool
uiGuildMan::_isEnableNotice()
{
if(!g_pHero)
return false;
TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,};
if (!IsGuildInfo())
{
//5165 길드에 가입되어 있지 않습니다.
g_InterfaceManager.GetInterfaceString( 5165, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return false;
}
return true;
}
//------------------------------------------------------------------------------
/**
*/
bool
uiGuildMan::_isEnableKick()
{
if(!g_pHero)
return false;
TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,};
if (!IsGuildInfo())
{
//5165 길드에 가입되어 있지 않습니다.
g_InterfaceManager.GetInterfaceString( 5165, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return false;
}
return true;
}
//------------------------------------------------------------------------------
/**
*/
bool
uiGuildMan::Withdraw() //탈퇴
{
if(!g_pHero)
return false;
TCHAR szMessage[INTERFACE_STRING_LENGTH + 1] ={0,};
if (!IsGuildInfo())
{
//5165 길드에 가입되어 있지 않습니다.
g_InterfaceManager.GetInterfaceString( 5165, szMessage);
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return false;
}
//6209 길드를 탈퇴하게 되면 3일간 길드 가입이 가능하지 않습니다. 정말 탈퇴하시겠습니까?
g_InterfaceManager.GetInterfaceString( 6209, szMessage);
GlobalFunc::SysConfirmBox( szMessage, _Callback_Guild_WithDraw_Warning );
return true;
}
//------------------------------------------------------------------------------
/**
*/
bool
uiGuildMan::Kick(const TCHAR* pname)
{
if(pname == NULL)
return false;
if(!_isEnableKick())
{
return false;
}
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,};
StrnCopy(m_tszKickMember, pname, MAX_CHARNAME_LENGTH);
m_tszKickMember[_countof(m_tszKickMember) - 1] = '\0';
//7220 길드원을 제명하게 되면 3일간 가입을 권유할 수 없습니다.%s 길드원을 정말 제명하시겠습니까?
g_InterfaceManager.GetInterfaceString(7220, szTemp);
Snprintf(szMessage, INTERFACE_STRING_LENGTH -1, szTemp, m_tszKickMember);
uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM);
if(pSystemMan)
pSystemMan->Sys_Confirm(szMessage, _KickGuildMember);
return true;
}
//------------------------------------------------------------------------------
/**
*/
bool
uiGuildMan::Notice(TCHAR* pmsg)
{
if(pmsg == NULL)
return false;
if(!_isEnableNotice())
{
return false;
}
if(GlobalFunc::IsSlang(pmsg, true) == TRUE)
{
return false;
}
TCHAR szWideString[MAX_GUILDNOTICE_LENGTH+1] ={0,};
StrnCopy(szWideString , pmsg, MAX_GUILDNOTICE_LENGTH);
szWideString[MAX_GUILDNOTICE_LENGTH] = NULL;
MSG_CW_GUILD_CHANGE_NOTICE_SYN sync;
ZeroMemory(sync.m_tszGuildNotice, sizeof(sync.m_tszGuildNotice));
StrnCopy(sync.m_tszGuildNotice, szWideString, MAX_GUILDNOTICE_LENGTH-1);
sync.m_byNoticeLen = strlen(sync.m_tszGuildNotice);
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof(sync));
return true;
}
//------------------------------------------------------------------------------
/**
*/
bool
uiGuildMan::IsShowWindow()
{
bool bShow = false;
if(m_pUIGuildMain && m_pUIGuildMain->IsVisible())
{
bShow = true;
}
if(m_pUIGuildWindow && m_pUIGuildWindow->IsVisible())
{
bShow = true;
}
return bShow;
}
//------------------------------------------------------------------------------
/**
*/
void
uiGuildMan::CloseWin()
{
if(m_pUIGuildMain && m_pUIGuildMain->IsVisible())
{
m_pUIGuildMain->ShowInterface(FALSE);
set_active_tab(m_pUIGuildMain);
}
if(m_pUIGuildWindow && m_pUIGuildWindow->IsVisible())
{
m_pUIGuildWindow->ShowInterface(FALSE);
set_active_tab(m_pUIGuildWindow);
}
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::_addGuildMember(GUILD_MEMBER_INFO member)
{
m_vMembers.push_back(member);
}
//------------------------------------------------------------------------------
/**
*/
void uiGuildMan::SetWindowFocus()
{
// 길드원정보창
if(m_pUIGuildMain && m_pUIGuildMain->IsVisibleWindow())
{
m_pUIGuildMain->GetDialogWZ()->ShowWindowWZ( WZ_SHOW);
}
// 길드정보창
if(m_pUIGuildWindow && m_pUIGuildWindow->IsVisibleWindow())
{
m_pUIGuildWindow->GetDialogWZ()->ShowWindowWZ( WZ_SHOW);
}
}
//------------------------------------------------------------------------------
/**
*/
//관계 컨테이너 삭제
void uiGuildMan::DelRelationCon()
{
std::list<GUILD_RELATION*>::iterator iter;
for(iter = m_listGuildRelation_Alliance.begin(); iter != m_listGuildRelation_Alliance.end(); ++iter)
{
GUILD_RELATION* ptemp = (*iter);
if(ptemp)
SAFE_DELETE(ptemp);
}
m_listGuildRelation_Alliance.clear();
for(iter = m_listGuildRelation_Hostility.begin(); iter != m_listGuildRelation_Hostility.end(); ++iter)
{
GUILD_RELATION* ptemp = (*iter);
if(ptemp)
SAFE_DELETE(ptemp);
}
m_listGuildRelation_Hostility.clear();
for(iter = m_listGuildRelation_OneSideHostility.begin(); iter != m_listGuildRelation_OneSideHostility.end(); ++iter)
{
GUILD_RELATION* ptemp = (*iter);
if(ptemp)
SAFE_DELETE(ptemp);
}
m_listGuildRelation_OneSideHostility.clear();
}
bool GuildRelationSort_GuildName_Top( const GUILD_RELATION* pGuildRelation1, const GUILD_RELATION* pGuildRelation2)
{
// 길드네임
DWORD dwGuildName1 = StrToWzID(pGuildRelation1->m_GuildName);
DWORD dwGuildName2 = StrToWzID(pGuildRelation2->m_GuildName);
if(dwGuildName1 <= dwGuildName2)
return true;
else
return false;
ASSERT( !"들어 올 수 없다!!!" );
return true;
}
bool GuildRelationSort_GuildName_Bottom( const GUILD_RELATION* pGuildRelation1, const GUILD_RELATION* pGuildRelation2)
{
// 길드네임
DWORD dwGuildName1 = StrToWzID(pGuildRelation1->m_GuildName);
DWORD dwGuildName2 = StrToWzID(pGuildRelation2->m_GuildName);
if(dwGuildName1 >= dwGuildName2)
return true;
else
return false;
ASSERT( !"들어 올 수 없다!!!" );
return true;
}
bool GuildRelationSort_State_Top(const GUILD_RELATION* pGuildRelation1, const GUILD_RELATION* pGuildRelation2)
{
//현재 상태
if(pGuildRelation1->m_eRelationType <= pGuildRelation2->m_eRelationType)
return true;
else
return false;
ASSERT( !"들어 올 수 없다!!!" );
return true;
}
bool GuildRelationSort_State_Bottom(const GUILD_RELATION* pGuildRelation1, const GUILD_RELATION* pGuildRelation2)
{
//현재 상태
if(pGuildRelation1->m_eRelationType >= pGuildRelation2->m_eRelationType)
return true;
else
return false;
ASSERT( !"들어 올 수 없다!!!" );
return true;
}
void uiGuildMan::SortAllianceCon(BOOL bOrder)
{
if(bOrder)
m_listGuildRelation_Alliance.sort(GuildRelationSort_GuildName_Top);
else
m_listGuildRelation_Alliance.sort(GuildRelationSort_GuildName_Bottom);
}
void uiGuildMan::SortHostilityCon(BOOL bOrder, BOOL bState)
{
if(bState)
{
if(bOrder)
m_listGuildRelation_Hostility.sort(GuildRelationSort_GuildName_Top);
else
m_listGuildRelation_Hostility.sort(GuildRelationSort_GuildName_Bottom);
}
else
{
if(bOrder)
m_listGuildRelation_Hostility.sort(GuildRelationSort_State_Top);
else
m_listGuildRelation_Hostility.sort(GuildRelationSort_State_Bottom);
}
}
void uiGuildMan::SortOneSideHostilityCon(BOOL bOrder)
{
if(bOrder)
m_listGuildRelation_OneSideHostility.sort(GuildRelationSort_GuildName_Top);
else
m_listGuildRelation_OneSideHostility.sort(GuildRelationSort_GuildName_Bottom);
}
//------------------------------------------------------------------------------
stGUILD_MEMBER_INFO* const uiGuildMan::GetGuildMemberInfo(int index)
{
if (index >= 0 && index < static_cast<int>(m_vMembers.size()))
{
return &m_vMembers[index];
}
return NULL;
}
//------------------------------------------------------------------------------
stGUILD_MEMBER_INFO * uiGuildMan::GetGuildMemberInfo(const TCHAR * pszName)
{
for( size_t i = 0; i < m_vMembers.size(); ++i )
{
if( StrnCmp(pszName, m_vMembers[i].m_tszCharName, MAX_CHARNAME_LENGTH) == 0 )
{
return &m_vMembers[i];
}
}
return NULL;
}
void uiGuildMan::SortMember(eMEMBER_SORT_TYPE byType)
{
static bool bHighCase = true; // default 오름 차순
static bool bLowCase = false; // default 내림 차순
// 다른 소팅 탭 눌렀을 때, 기본 소팅 방식으로 셋팅되도록 함.
static eMEMBER_SORT_TYPE ePrevious = eSORT_MAX;
if( ePrevious != byType )
{
bHighCase = true;
bLowCase = false;
}
ePrevious = byType;
switch (byType)
{
case eSORT_NAME:
{
if(bHighCase )
{
sort(m_vMembers.begin(),m_vMembers.end(), sortGuildMemberByNameHigh);
}
else
{
sort(m_vMembers.begin(),m_vMembers.end(), sortGuildMemberByNameLow);
}
bHighCase ^= 1;
}
break;
case eSORT_CLASS:
{
if( bHighCase )
{
sort(m_vMembers.begin(),
m_vMembers.end(),
sortGuildMemberByTypeHigh<BYTE, &stGUILD_MEMBER_INFO::m_byClass>);
}
else
{
sort(m_vMembers.begin(),
m_vMembers.end(),
sortGuildMemberByTypeLow<BYTE, &stGUILD_MEMBER_INFO::m_byClass>);
}
bHighCase ^= 1;
}
break;
case eSORT_DUTY:
{
if( bHighCase )
{
sort(m_vMembers.begin(),
m_vMembers.end(),
sortGuildMemberByTypeHigh_Base<eGUILD_DUTY, &stGUILD_MEMBER_INFO::m_eGuildDuty>);
}
else
{
sort(m_vMembers.begin(),
m_vMembers.end(),
sortGuildMemberByTypeLow_Base<eGUILD_DUTY, &stGUILD_MEMBER_INFO::m_eGuildDuty>);
}
bHighCase ^= 1;
}
break;
case eSORT_LV:
{
if( bHighCase )
{
sort(m_vMembers.begin(),
m_vMembers.end(),
sortGuildMemberByTypeHigh<LEVELTYPE , &GUILD_MEMBER_INFO::m_Level >);
}
else
{
sort(m_vMembers.begin(),
m_vMembers.end(),
sortGuildMemberByTypeLow<LEVELTYPE , &GUILD_MEMBER_INFO::m_Level >);
}
bHighCase ^= 1;
}
break;
case eSORT_CONNETION:
{
if( bLowCase )
{
sort( m_vMembers.begin(), m_vMembers.end(), sortGuildMemberByTypeHigh<BOOL, &GUILD_MEMBER_INFO::m_bLogin>);
}
else
{
sort( m_vMembers.begin(), m_vMembers.end(), sortGuildMemberByTypeLow<BOOL, &GUILD_MEMBER_INFO::m_bLogin>);
}
bLowCase ^= 1;
}
break;
}
}
void uiGuildMan::SEND_CG_GUILD_DESTROY_REAR_CAMP_SYN()
{
if( !g_pHero)
return;
stGUILD_MEMBER_INFO * pMemberInfo = GetGuildMemberInfo(g_pHero->GetName());
if( pMemberInfo )
{
MSG_CG_GUILD_DESTROY_REAR_CAMP_SYN SendMsg;
SendMsg.m_byCorpsNum = pMemberInfo->m_byCorpsNum;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendMsg, sizeof(SendMsg));
}
}
void uiGuildMan::ShowGuildDestoryWindow()
{
m_pUIGuildCorpsDestory->InitAllCheckButton();
int index = 0;
for( int i =1; i< MAX_GUILD_CORPS_NUM; ++i)
{
if( GetCorpsTotalInfo().m_CorpsInfo[i].m_bCreate)
{
m_pUIGuildCorpsDestory->ShowAndInsertCheckCorps(index, i);
index++;
}
}
if( index == 0 )
{
//7163 해당 길드에 군단이 생성되지 않았습니다.
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, g_InterfaceManager.GetInterfaceString(7163));
m_pUIGuildCorpsDestory->ShowInterface(FALSE);
}
else
{
m_pUIGuildCorpsDestory->ShowInterface(TRUE);
}
}
int uiGuildMan::GetCorpMemberNum(int iCorps)
{
if( ! m_vMembers.size() )
return 0;
int iNumCorpsMember = 0;
for( size_t i =0; i < m_vMembers.size(); ++i)
{
if( m_vMembers[i].m_byCorpsNum == iCorps)
{
iNumCorpsMember++;
}
}
return iNumCorpsMember;
}
void uiGuildMan::CloseAllOpenedGuildWindow()
{
if( m_pUIGuildCorpsDestory && m_pUIGuildCorpsDestory->IsVisibleWindow())
{
m_pUIGuildCorpsDestory->ShowInterface(FALSE);
}
}
void uiGuildMan::SetRelationNoneByGuildMember()
{
//길드를 탈퇴했으므로 관계를 초기화 한다.
Object_Map_Itr itr = g_ObjectManager.GetBegin();
while( g_ObjectManager.GetEnd() != itr )
{
Object *pObj = (Object *)itr->second;
if( pObj && pObj->IsKindOfObject(PLAYER_OBJECT) )
{
Player * pPlayer = (Player *) pObj;
if( pPlayer )
{
pPlayer->GetGuildRenderInfo().m_RelationType = eGUILD_RELATION_NONE;
}
}
++itr;
}
//길드 탈퇴,제명당한 캐릭의 길드멤버 정보 날린다.
m_vMembers.clear();
}
//------------------------------------------------------------------------------
void uiGuildMan::Send_CW_FRIEND_STATUS_REQ(char* character_name, CHARGUID char_guid)
{
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
StrnCopy(sync.m_ptszCharName, character_name, MAX_CHARNAME_LENGTH);
sync.m_ptszCharName[_countof(sync.m_ptszCharName) - 1] = '\0';
#endif //_NA_0_20100527_ADD_CHAR_RELATION_MEMO
GlobalFunc::SendPacket(CI_CHATSERVERIDX, &sync, sizeof(sync));
}
//------------------------------------------------------------------------------
void uiGuildMan::ChangeTab(uiBase* ui_base)
{
float cx = -1.0f;
float cy = -1.0f;
if (active_tab() != NULL)
{
if ((active_tab() == ui_base) && (active_tab()->IsVisible() == TRUE))
{
return;
}
cx = active_tab()->GetDialogWZ()->GetDlgX();
cy = active_tab()->GetDialogWZ()->GetDlgY();
active_tab()->ShowInterface(FALSE);
}
if (ui_base == NULL)
{
return;
}
set_active_tab(ui_base);
if (active_tab() != NULL)
{
active_tab()->ShowInterface(TRUE);
if (cx >= 0.0f && cy >= 0.0f)
{
active_tab()->MoveWindowWZ(cx, cy);
}
}
}
//------------------------------------------------------------------------------
void uiGuildMan::ShowTab()
{
if (active_tab() != NULL)
{
active_tab()->ShowInterface(TRUE);
}
else
{
//! 기본.
ChangeTab(m_pUIGuildMain);
}
}
#endif //_NA_003923_20120217_GUILD_RENEWAL_UI_GUILD_MANAGER
//------------------------------------------------------------------------------
// EOF
//------------------------------------------------------------------------------