Files
2022-10-26 12:25:11 +08:00

503 lines
17 KiB
C++

#include "SunClientPrecompiledHeader.h"
#ifdef _NA_003923_20120222_GUILD_RENEWAL_UI_RENEWAL
#include "GuildSystem/uiGuildInfoOther.h"
#include "GuildSystem/GuildSystemFunction.h"
#include "GuildSystem/GuildSystemData.h"
#include "GuildSystem/uiGuildPoint.h"
#include "GuildSystem/uiGuildMember.h"
#include "GuildSystem/uiGuildIntroOther.h"
#include "GuildSystem/uiGuildManagement.h"
#include "GuildSystem/uiGuildLog.h"
#include "GuildSystem/uiGuildInstitution.h"
#include "GuildSystem/uiGuildInfo.h"
#include "uiCharacterStatus/uiCharacterStatusCurrencyInfo.h"
#include "GuildRankInfoParser.h"
#include "CurrencyInfoParser.h"
#include "InterfaceManager.h"
#include "GlobalFunc.h"
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#include "Hero.h"
#include "GuildSystem/GuildSystemPacketFunction.h"
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
const DWORD uiGuildInfoOther::kDialog_ID = g_IDGenerator.GenerateID();
uiGuildInfoOther::uiGuildInfoOther( InterfaceManager* ui_manager )
:uiBase(ui_manager)
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
,guild_join_request_state_(eGUILD_JOIN_REQUEST_CANCEL)
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
{
}
uiGuildInfoOther::~uiGuildInfoOther()
{
}
void uiGuildInfoOther::Init( CDrawBase* draw_base )
{
uiBase::Init(draw_base);
RegisterControlPosition(StrToWzID("C000"), kControl_CheckBT_C000);
RegisterControlPosition(StrToWzID("B999"), kControl_Button_B999);
RegisterControlPosition(StrToWzID("BT01"), kControl_Button_BT01);
RegisterControlPosition(StrToWzID("S004"), kControl_Text_S004);
RegisterControlPosition(StrToWzID("S005"), kControl_Text_S005);
RegisterControlPosition(StrToWzID("TI02"), kControl_TextImage_TI02);
RegisterControlPosition(StrToWzID("I006"), kControl_TextImage_I006);
RegisterControlPosition(StrToWzID("I007"), kControl_TextImage_I007);
RegisterControlPosition(StrToWzID("I008"), kControl_TextImage_I008);
RegisterControlPosition(StrToWzID("I009"), kControl_TextImage_I009);
RegisterControlPosition(StrToWzID("I010"), kControl_TextImage_I010);
RegisterControlPosition(StrToWzID("PI00"), kControl_Picture_PI00);
CControlWZ* control_ptr = GetControlWZ(StrToWzID("P005"));
if (control_ptr != NULL)
{
control_ptr->SetDiscardMessage(true);
}
control_ptr = GetControlWZ_byPosition(kControl_CheckBT_C000);
if (control_ptr != NULL)
{
control_ptr->ShowWindowWZ(WZ_HIDE);
}
control_ptr = GetControlWZ_byPosition(kControl_Text_S004);
if (control_ptr != NULL)
{
control_ptr->ShowWindowWZ(WZ_HIDE);
}
control_ptr = GetControlWZ_byPosition(kControl_Button_BT01);
if (control_ptr != NULL)
{
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
control_ptr->ShowWindowWZ(WZ_SHOW);
guild_join_request_state_ = eGUILD_JOIN_REQUEST_CANCEL;
#else
control_ptr->ShowWindowWZ(WZ_HIDE);
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
}
}
void uiGuildInfoOther::Release()
{
}
void uiGuildInfoOther::MessageProc( SI_MESSAGE* message )
{
if (IsLock())
return;
if (GetMan() == NULL)
return;
switch (message->eResultMsg)
{
case RT_MSG_LBUTTONCLICK:
OnLButtonClick(message);
break;
default:
SolarDialog::MessageProc(message);
break;
}
}
bool uiGuildInfoOther::OnLButtonClick( SI_MESSAGE* message )
{
bool result = true;
DWORD control_position = GetControlPosition_byID(message->dwCtrlID);
switch (control_position)
{
case kControl_Button_BT01:
{
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
OnAnswerJoinRequest();
#else
OnClickRequestJoin();
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
}
break;
case kControl_Button_B999:
{
ShowInterface(FALSE);
}
break;
break;
}
return result;
}
void uiGuildInfoOther::OnClickRequestJoin()
{
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
GuildSystem::GuildSystemData::GuildRankingInfoContainer& guild_ranking_info_container =
GuildSystem::GetGuildSystemData().guild_ranking_info_container();
if (static_cast<size_t>(guild_rank_index()) >= guild_ranking_info_container.size())
{
return;
}
GUILD_RANKING_INFO& ranking_info = guild_ranking_info_container[guild_rank_index()];
GuildSystem::GuildSystemData::GuildRankingGuildInfoContainer& ranking_guild_info_container =
GuildSystem::GetGuildSystemData().guild_ranking_guild_info_container();
GuildSystem::GuildSystemData::GuildRankingGuildInfoContainer::iterator found_itr =
ranking_guild_info_container.find(ranking_info.guild_guid);
if (found_itr == ranking_guild_info_container.end())
{
return;
}
// [GUILD_RENEWAL] 가입요청
MSG_CG_GUILD_JOIN_REQUEST_SYN send_packet;
GuildSystem::GuildSystemData::GuildInfoForClient& guild_info = found_itr->second;
send_packet.guild_guid = guild_info.game_guild_info_.m_GuildGuid;
/*
eGUILD_JOIN_REQUEST_OK = 0, //가입요청, 가입승인
eGUILD_JOIN_REQUEST_CANCEL, //가입취소, 가입거절
*/
send_packet.request_type = eGUILD_JOIN_REQUEST_OK;
GuildSystem::PacketFunction::SEND_CG_GUILD_JOIN_REQUEST_SYN(send_packet);
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
}
void uiGuildInfoOther::OnShowWindow( BOOL is_show )
{
uiGuildIntroOther* ui_guild_intro_other =
GET_CAST_DIALOG(uiGuildIntroOther, uiGuildIntroOther::kDialog_ID);
if (ui_guild_intro_other != NULL)
{
ui_guild_intro_other->set_guild_rank_index(guild_rank_index());
ui_guild_intro_other->ShowInterface(is_show);
}
if (is_show == TRUE)
{
keyMsg msg;
ZeroMemory(&msg,sizeof(msg));
msg.dwType = uiGuildInfoOther::kDialog_ID;
msg.wParam = uiGuildInfoOther::kDialog_ID;
msg.DoSomething = GlobalFunc::DoShowWindowEx;
g_KeyQueueManager.PushBack(msg);
uiBase* ui_guild_info = GET_DIALOG(uiGuildInfo::kDialog_ID);
if (ui_guild_info != NULL)
{
ui_guild_info->ShowInterface(FALSE);
RECT control_rect;
ui_guild_info->GetDialogWZ()->GetClientRect(&control_rect);
MoveWindowWZ(static_cast<float>(control_rect.left),
static_cast<float>(control_rect.top));
}
MoveSubDialog();
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
RequestJoinButtonReset();
SetJoinRequestButton(eGUILD_JOIN_REQUEST_CANCEL); // 기본 버튼 상태
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
}
else
{
g_KeyQueueManager.DeleteMsg(uiGuildInfoOther::kDialog_ID);
}
}
void uiGuildInfoOther::OnUpdateSolarDialog()
{
MoveSubDialog();
UpdateGuildInfo();
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#else
UpdateButtonState();
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
uiBase* ui_guild_intro_other = GET_DIALOG(uiGuildIntroOther::kDialog_ID);
if (ui_guild_intro_other != NULL)
{
if (HaveFocus() == TRUE)
{
GlobalFunc::MoveToTopDialog(ui_guild_intro_other->GetDialogWZ()->GetDlgID());
}
else if (ui_guild_intro_other->HaveFocus() == TRUE)
{
GlobalFunc::MoveToTopDialog(GetDialogWZ()->GetDlgID());
}
}
uiBase* ui_guild_info = GET_DIALOG(uiGuildInfo::kDialog_ID);
if (ui_guild_info != NULL)
{
RECT control_rect;
GetDialogWZ()->GetClientRect(&control_rect);
ui_guild_info->MoveWindowWZ(static_cast<float>(control_rect.left),
static_cast<float>(control_rect.top));
}
}
void uiGuildInfoOther::OnRenderSolarDialog()
{
GuildSystem::GuildSystemData::GuildRankingInfoContainer& guild_ranking_info_container =
GuildSystem::GetGuildSystemData().guild_ranking_info_container();
if (static_cast<size_t>(guild_rank_index()) >= guild_ranking_info_container.size())
{
return;
}
GUILD_RANKING_INFO& ranking_info = guild_ranking_info_container[guild_rank_index()];
GuildSystem::GuildSystemData::GuildRankingGuildInfoContainer& ranking_guild_info_container =
GuildSystem::GetGuildSystemData().guild_ranking_guild_info_container();
GuildSystem::GuildSystemData::GuildRankingGuildInfoContainer::iterator found_itr =
ranking_guild_info_container.find(ranking_info.guild_guid);
if (found_itr == ranking_guild_info_container.end())
{
return;
}
// 길드마크 출력
CCtrlPictureWZ* mark_picture =
static_cast<CCtrlPictureWZ*>(GetControlWZ_byPosition(kControl_Picture_PI00));
if (mark_picture != NULL)
{
GuildSystem::GuildSystemData::GuildInfoForClient& guild_info = found_itr->second;
DWORD background_index = guild_info.game_guild_info_.m_BackGroundIdx;
DWORD pattern_index = guild_info.game_guild_info_.m_PatternIdx;
RECT mark_rect = mark_picture->GetSizeRect();
GuildSystem::Function::RenderGuildMark(background_index, mark_rect);
GuildSystem::Function::RenderGuildMark(pattern_index, mark_rect);
}
}
void uiGuildInfoOther::UpdateGuildInfo()
{
GuildSystem::GuildSystemData::GuildRankingInfoContainer& guild_ranking_info_container =
GuildSystem::GetGuildSystemData().guild_ranking_info_container();
if (static_cast<size_t>(guild_rank_index()) >= guild_ranking_info_container.size())
{
return;
}
GUILD_RANKING_INFO& ranking_info = guild_ranking_info_container[guild_rank_index()];
GuildSystem::GuildSystemData::GuildRankingGuildInfoContainer& ranking_guild_info_container =
GuildSystem::GetGuildSystemData().guild_ranking_guild_info_container();
GuildSystem::GuildSystemData::GuildRankingGuildInfoContainer::iterator found_itr =
ranking_guild_info_container.find(ranking_info.guild_guid);
if (found_itr == ranking_guild_info_container.end())
{
return;
}
TCHAR info_string[INTERFACE_STRING_LENGTH] = {'\0', };
GuildSystem::GuildSystemData::GuildInfoForClient& guild_info = found_itr->second;
// 길드연합
CCtrlImageStaticWZ* info_text_control =
static_cast<CCtrlImageStaticWZ*>(GetControlWZ_byPosition(kControl_TextImage_TI02));
if (info_text_control != NULL)
{
// [GUILD_RENEWAL] 길드연합은 추후 구현
info_text_control->SetTextWZ("");
}
// 길드명
info_text_control =
static_cast<CCtrlImageStaticWZ*>(GetControlWZ_byPosition(kControl_TextImage_I006));
if (info_text_control != NULL)
{
info_text_control->SetTextWZ(guild_info.game_guild_info_.m_tszGuildName);
}
// 길드마스터
info_text_control =
static_cast<CCtrlImageStaticWZ*>(GetControlWZ_byPosition(kControl_TextImage_I007));
if (info_text_control != NULL)
{
info_text_control->SetTextWZ(ranking_info.master_name);
}
// 길드랭킹
info_text_control =
static_cast<CCtrlImageStaticWZ*>(GetControlWZ_byPosition(kControl_TextImage_I008));
if (info_text_control != NULL)
{
Snprintf(info_string, INTERFACE_STRING_LENGTH - 1, "%d", guild_rank_index() + 1);
info_text_control->SetTextWZ(info_string);
}
// 길드레벨
info_text_control =
static_cast<CCtrlImageStaticWZ*>(GetControlWZ_byPosition(kControl_TextImage_I009));
if (info_text_control != NULL)
{
Snprintf(info_string, INTERFACE_STRING_LENGTH - 1, "%d", guild_info.game_guild_info_.m_GuildGrade);
info_text_control->SetTextWZ(info_string);
}
// 길드멤버수
info_text_control =
static_cast<CCtrlImageStaticWZ*>(GetControlWZ_byPosition(kControl_TextImage_I010));
const GuildRankInfo* guild_rank_info =
GuildRankInfoParser::Instance()->FindGuildRankInfo(guild_info.game_guild_info_.m_GuildGrade);
if ((info_text_control != NULL) &&
(guild_rank_info != NULL))
{
TCHAR current_number[INTERFACE_STRING_LENGTH] = {'\0', };
TCHAR max_number[INTERFACE_STRING_LENGTH] = {'\0', };
_itot(ranking_info.member_count,
current_number,
10);
_itot(guild_rank_info->max_member_count_,
max_number,
10);
// 7290 %s / %s
g_InterfaceManager.GetInterfaceStringFormat(
info_string,
INTERFACE_STRING_LENGTH - 1,
7290,
current_number,
max_number);
info_text_control->SetTextWZ(info_string);
}
// 길드코인
CCtrlStaticWZ* text_control =
static_cast<CCtrlStaticWZ*>(GetControlWZ_byPosition(kControl_Text_S005));
if (text_control != NULL)
{
text_control->ShowWindowWZ(WZ_HIDE);
}
}
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#else
void uiGuildInfoOther::UpdateButtonState()
{
}
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
void uiGuildInfoOther::MoveSubDialog()
{
RECT control_rect;
GetDialogWZ()->GetClientRect(&control_rect);
uiBase* sub_dialog = NULL;
// 서브 탭 다이얼로그
sub_dialog = GET_DIALOG(uiGuildIntroOther::kDialog_ID);
if (sub_dialog != NULL)
{
sub_dialog->MoveWindowWZ(static_cast<float>(control_rect.left),
static_cast<float>(control_rect.bottom));
}
}
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
void uiGuildInfoOther::OnAnswerJoinRequest()
{
if (guild_join_request_state_ == eGUILD_JOIN_REQUEST_CANCEL)
return;
GuildSystem::GuildSystemData::GuildRankingInfoContainer& guild_ranking_info_container =
GuildSystem::GetGuildSystemData().guild_ranking_info_container();
if (static_cast<size_t>(guild_rank_index()) >= guild_ranking_info_container.size())
{
return;
}
GUILD_RANKING_INFO& ranking_info = guild_ranking_info_container[guild_rank_index()];
GuildSystem::GuildSystemData::GuildRankingGuildInfoContainer& ranking_guild_info_container =
GuildSystem::GetGuildSystemData().guild_ranking_guild_info_container();
GuildSystem::GuildSystemData::GuildRankingGuildInfoContainer::iterator found_itr =
ranking_guild_info_container.find(ranking_info.guild_guid);
if (found_itr == ranking_guild_info_container.end())
{
return;
}
uiSystemMan* ui_system_manager_ptr = GET_DIALOG_MANAGER(uiSystemMan, UIMAN_SYSTEM);
if (ui_system_manager_ptr)
{
TCHAR temp_message[INTERFACE_STRING_LENGTH] = {0, };
TCHAR guild_name[INTERFACE_STRING_LENGTH] = {0, };
GuildSystem::GuildSystemData::GuildInfoForClient& guild_info = found_itr->second;
Snprintf(guild_name, MAX_GUILDNAME_LENGTH+1, guild_info.game_guild_info_.m_tszGuildName);
g_InterfaceManager.GetInterfaceStringFormat(temp_message, INTERFACE_STRING_LENGTH, 7297, guild_name);
ui_system_manager_ptr->Sys_SystemMessage(temp_message,
NULL,
GuildSystem::Function::Callback_GuildJoinRequestSend,
uiSystemMessage::kConfirm_Type,
true);
}
}
void uiGuildInfoOther::SetJoinRequestButton( const eGUILD_JOIN_REQUEST& guild_join_request_state )
{
/*
eGUILD_JOIN_REQUEST_OK = 0, //가입요청 하기, 가입요청 버튼상태, 가입승인
eGUILD_JOIN_REQUEST_CANCEL, //가입취소 하기, 가입취소 버튼상태, 가입거절
eGUILD_JOIN_REQUEST_UPDATE, //가입 요청 내용 변경
*/
guild_join_request_state_ = guild_join_request_state;
CCtrlButtonWZ* control_ptr = static_cast<CCtrlButtonWZ*>(GetControlWZ_byPosition(kControl_Button_BT01));
if (NULL == control_ptr)
return;
TCHAR button_string[INTERFACE_STRING_LENGTH] = {0, };
switch (guild_join_request_state)
{
case eGUILD_JOIN_REQUEST_OK: // 길드 가입 요청 버튼 상태
{
// 길드가입 요청
control_ptr->EnableWindowWZ(TRUE);
g_InterfaceManager.GetInterfaceString(7280, button_string);
control_ptr->SetTextWZ(button_string);
}
break;
case eGUILD_JOIN_REQUEST_CANCEL: // 길드 가입 대기상태 버튼 상태
{
// 길드가입 대기
g_InterfaceManager.GetInterfaceString(7296, button_string);
control_ptr->SetTextWZ(button_string);
control_ptr->EnableWindowWZ(FALSE);
}
break;
default:
{
// 나머지 상태는 없다.
}
}
}
void uiGuildInfoOther::RequestJoinButtonReset()
{
CCtrlButtonWZ* button_control =
static_cast<CCtrlButtonWZ*>(GetControlWZ_byPosition(kControl_Button_BT01));
if (!button_control)
return;
if (!g_pHero)
return;
if (g_pHero->IsExistGuild() == TRUE)
{
button_control->ShowWindowWZ(WZ_HIDE);
}
else
{
button_control->ShowWindowWZ(WZ_SHOW);
}
}
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#endif //_NA_003923_20120222_GUILD_RENEWAL_UI_RENEWAL