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

376 lines
12 KiB
C++

//------------------------------------------------------------------------------
// uiItemShopDiv.cpp
//------------------------------------------------------------------------------
#include "SunClientPrecompiledHeader.h"
#include "MouseHandler.h"
#include "uiItemShopDiv.h"
#include "uiItemDivMan/uiItemDivMan.h"
#include "InventoryDialog.h"
#include "globalfunc.h"
#include "interfacemanager.h"
#include "SCItemSlot.h"
#include "ItemManager.h"
#include "ShopDialog.h"
#include <SCSlotContainer.h>
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#include "Hero.h"
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
//------------------------------------------------------------------------------
WzID uiItemShopDiv::wzId_[DIALOG_MAX] =
{
StrToWzID("TI00"), // DLGPOS_BTN_OK
StrToWzID("TI01"), // DLGPOS_BTN_CANCEL
StrToWzID("S000"), // DLGPOS_TEXT_MAX_NUMBER
StrToWzID("S001"), // DLGPOS_TEXT_HIEM
StrToWzID("E000"), // DLGPOS_EDT_NUM
};
//------------------------------------------------------------------------------
/**
*/
uiItemShopDiv::uiItemShopDiv(InterfaceManager *ui_manager_ptr):
uiBase(ui_manager_ptr)
{
price_ = 0;
pre_divide_number_ = 0;
}
//------------------------------------------------------------------------------
/**
*/
uiItemShopDiv::~uiItemShopDiv()
{
this->Release();
}
//------------------------------------------------------------------------------
/**
*/
void uiItemShopDiv::Init(CDrawBase* draw_base_ptr)
{
uiBase::Init(draw_base_ptr);
InitControls();
}
//------------------------------------------------------------------------------
/**
*/
void uiItemShopDiv::InitControls()
{
edit_control_ = static_cast<CCtrlDxIMEEditBox *>(this->get_control(DLGPOS_EDT_NUM));
assert (edit_control_);
static_text_controls_[0] = static_cast<CCtrlStaticWZ*>(this->get_control(DLGPOS_TEXT_MAX_NUMBER));
assert (static_text_controls_[0]);
static_text_controls_[1] = static_cast<CCtrlStaticWZ*>(this->get_control(DLGPOS_TEXT_HIEM));
assert (static_text_controls_[1]);
ok_button_ = static_cast<CCtrlButtonWZ *>(this->get_control(DLGPOS_BTN_OK));
assert(ok_button_);
cancel_button_ = static_cast<CCtrlButtonWZ *>(this->get_control(DLGPOS_BTN_CANCEL));
assert(cancel_button_);
this->init_controls_ = true;
}
//------------------------------------------------------------------------------
/**
*/
void uiItemShopDiv::Release()
{
price_ = 0;
pre_divide_number_ = 0;
}
//------------------------------------------------------------------------------
/**
called to show request
*/
void uiItemShopDiv::OnShowWindow(BOOL value)
{
if (value)
{
if (!this->CheckControls())
{
return;
}
//UpdatePosition();
//SolarDialog::MoveCenter();
edit_control_->ClearText();
edit_control_->SetFontID(StrToWzID("mn12"));
edit_control_->SetFocusWZ();
TCHAR message[INTERFACE_STRING_LENGTH];
TCHAR temp_string[INTERFACE_STRING_LENGTH];
Sprintf(message, _T("%d"), divide_num_);
GlobalFunc::SetText(edit_control_, message);
TCHAR message_max[INTERFACE_STRING_LENGTH];
// 987 : (해당 아이템은 최대 "%d"개씩 구입이 가능합니다.)
g_InterfaceManager.GetInterfaceString(987, message, MAX_MESSAGE_LENGTH );
Sprintf(message_max, message, divide_num_);
static_text_controls_[0]->SetTextWZ(message_max);
TCHAR message_price[INTERFACE_STRING_LENGTH];
// 985 : ("%d"하임)
g_InterfaceManager.GetInterfaceString(985, temp_string, MAX_MESSAGE_LENGTH);
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
// 길드 시설 효과
if (g_pHero &&
g_pHero->GetPlayerAttribute()->GetAttrValue(eATTR_SHOP_BUY_HEIM_RATIO) != 0 &&
(divide_num_ * price_) > 0)
{
MONEY buy_need_money = divide_num_ * price_;
int ratio = g_pHero->GetPlayerAttribute()->GetAttrValue(eATTR_SHOP_BUY_HEIM_RATIO);
MONEY percent_value = buy_need_money / 100 * price_;
buy_need_money += percent_value;
GlobalFunc::SetPointText(message, buy_need_money);
}
else
{
GlobalFunc::SetPointText(message, (divide_num_ * price_));
}
#else
GlobalFunc::SetPointText(message, (divide_num_ * price_));
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
Sprintf(message_price, temp_string, message);
static_text_controls_[1]->SetTextWZ(message_price);
keyMsg key_msg;
ZeroMemory(&key_msg,sizeof(key_msg));
key_msg.dwType = eDoType_dialog_itemshop_div;
key_msg.wParam = IM_ITEMDIV_MANAGER::ITEMSHOPDIV;
key_msg.DoSomething = GlobalFunc::DoShowWindowEx;
g_KeyQueueManager.PushBack(key_msg);
this->GetUIMan()->AttachFirstDialog(IM_ITEMDIV_MANAGER::ITEMSHOPDIV);
}
else
{
this->GetUIMan()->DeAttachFirstDialog(IM_ITEMDIV_MANAGER::ITEMSHOPDIV);
g_KeyQueueManager.DeleteMsg(eDoType_dialog_itemshop_div);
}
}
//------------------------------------------------------------------------------
/**
*/
void uiItemShopDiv::MessageProc(SI_MESSAGE * message_ptr)
{
switch (message_ptr->eResultMsg)
{
case RT_MSG_EDIT_ENTERKEYDOWN:
{
switch (get_control_id_to_position(message_ptr->dwCtrlID))
{
case DLGPOS_EDT_NUM:
{
on_ok_button_click();
}
break;
}
}
break;
case RT_MSG_LBUTTONCLICK:
{
switch (get_control_id_to_position(message_ptr->dwCtrlID))
{
case DLGPOS_BTN_OK:
{
on_ok_button_click();
}
break;
case DLGPOS_BTN_CANCEL:
{
ShowInterface(FALSE);
}
break;
}
}
break;
default:
{
SolarDialog::MessageProc(message_ptr);
}
break;
}
}
////------------------------------------------------------------------------------
///**
//*/
//void uiItemShopDiv::UpdatePosition()
//{
// MoveWindowWZ(733, 289);
//}
//------------------------------------------------------------------------------
/**
*/
void uiItemShopDiv::OnUpdateSolarDialog()
{
DWORD div_number = 0;
TCHAR message[INTERFACE_STRING_LENGTH];
TCHAR temp_string[INTERFACE_STRING_LENGTH];
GlobalFunc::GetText(edit_control_, message, sizeof(message));
div_number = atoi(message);
_itoa(div_number, temp_string, 10);
if (div_number != pre_divide_number_ || strlen(message) != strlen(temp_string))
{
if (div_number > divide_num_)
{
div_number = divide_num_;
}
pre_divide_number_ = div_number;
TCHAR number_string[INTERFACE_STRING_LENGTH];
Sprintf(number_string, "%d", div_number);
if (div_number != 0)
{
GlobalFunc::SetText(edit_control_, number_string);
}
else
{
GlobalFunc::SetText(edit_control_, "");
}
TCHAR message_price[INTERFACE_STRING_LENGTH];
// 985 : ("%s"하임)
g_InterfaceManager.GetInterfaceString(985, temp_string, MAX_MESSAGE_LENGTH);
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
// 길드 시설 효과
if (g_pHero &&
g_pHero->GetPlayerAttribute()->GetAttrValue(eATTR_SHOP_BUY_HEIM_RATIO) != 0 &&
(divide_num_ * price_) > 0)
{
MONEY buy_need_money = divide_num_ * price_;
int ratio = g_pHero->GetPlayerAttribute()->GetAttrValue(eATTR_SHOP_BUY_HEIM_RATIO);
bool is_plus = false;
if (ratio > 0)
is_plus = true;
ratio = abs(ratio);
MONEY percent_value = buy_need_money / 100 * ratio;
if (is_plus)
{
buy_need_money += percent_value;
}
else
{
buy_need_money -= percent_value;
}
GlobalFunc::SetPointText(message, buy_need_money);
}
else
{
GlobalFunc::SetPointText(message, (div_number * price_));
}
#else
GlobalFunc::SetPointText(message, (div_number * price_));
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
Sprintf(message_price, temp_string, message);
static_text_controls_[1]->SetTextWZ(message_price);
}
else
{
if (div_number == 0 && message[0] != '\0')
{
GlobalFunc::SetText(edit_control_, "");
}
}
}
//------------------------------------------------------------------------------
/**
*/
void uiItemShopDiv::on_ok_button_click()
{
TCHAR message[INTERFACE_STRING_LENGTH];
TCHAR temp_string[INTERFACE_STRING_LENGTH];
GlobalFunc::GetText(edit_control_, temp_string, INTERFACE_STRING_LENGTH);
if (lstrlen(temp_string)==0)
{
// [알림] 분할하실 개수를 입력하세요 5127
g_InterfaceManager.GetInterfaceString(eST_INPUT_DIV_NUM, message ,INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, message);
}
else
{
int a_number = (int)_ttoi64(temp_string);
if (a_number < 1 || a_number > divide_num_)
{
// 잘못된 정보입니다. 5346 (현재 있는 메시지 중에 그나마)
// 개수를 다시 입력하세요 등의 메시지를 뿌리는게 더 적당
g_InterfaceManager.GetInterfaceString(5346, message ,INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, message);
Sprintf (temp_string, _T("%d"), divide_num_);
GlobalFunc::SetText(edit_control_, temp_string);
return;
}
SCSlotContainer* at_container = ItemManager::Instance()->GetContainer(from_slot_idx_);
assert(at_container);
SolarDialog* container_dialog = ItemManager::Instance()->GetItemContainerDialog(from_slot_idx_);
assert(container_dialog);
SCItemSlot& ref_slot1 = (SCItemSlot &)at_container->GetSlot(from_postype_);
ShopDialog* shop_dialog = static_cast<ShopDialog*>(container_dialog);
DWORD dwShopID = (DWORD)shop_dialog->GetShopID();
SHOPINFO* shop_info = (SHOPINFO *)ShopInfoParser::Instance()->GetShopList(dwShopID);
SHOPINFO::SHOP_ITEM* shop_item = shop_info->GetItem(ref_slot1.GetCode());
if (!shop_item)
{
assert(!"ShopInfo.txt 확인!!");
return;
}
#ifdef _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION
if (GlobalFunc::HeimTradingvolumeCheck(price_ * ref_slot1.GetMaxNum()))
{
uiSystemMan* ui_system_manager_ptr = GET_DIALOG_MANAGER(uiSystemMan, UIMAN_SYSTEM);
if (ui_system_manager_ptr)
{
ui_system_manager_ptr->Sys_SystemHeimTradingvolumeNpcStore(shop_dialog->GetDialogKey(),
a_number,
from_slot_idx_,
from_postype_,
slot_type_,
slot_code_,
price_ * a_number);
}
}
else
{
ItemManager::Instance()->SendBuyMsg(
shop_dialog ->GetShopID(),
ref_slot1.GetCode(), shop_dialog->GetCurrentTab(), shop_dialog->GetRelativeSlotPos(from_postype_),
a_number);
}
#else
ItemManager::Instance()->SendBuyMsg(
shop_dialog ->GetShopID(),
ref_slot1.GetCode(), shop_dialog->GetCurrentTab(), shop_dialog->GetRelativeSlotPos(from_postype_),
a_number);
#endif // _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION
this->ShowWindow(FALSE);
}
}
//------------------------------------------------------------------------------
// EOF
//------------------------------------------------------------------------------