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

2925 lines
80 KiB
C++

//---------------------------------------------------------------------------
//
//
// (C) 2005 y2jinc
//---------------------------------------------------------------------------
#include "SunClientPrecompiledHeader.h"
#include "inventorydialog.h"
#include <SCSlotContainer.h>
#include "ItemUnitRenderer.h"
#include "MouseHandler.h"
#include "ItemManager.h"
#include "QuickSlot.h"
#include "Hero.h"
#include "QuickContainer.h"
#include "InterfaceManager.h"
#include "Mouse.h"
#include <SCItemSlot.h>
#include "chatdialog.h"
#include "objectManager.h"
#include "SlotKeyGenerator.h"
#include "EventInventoryDialog.h"
#include "ItemCompositeParser.h"
#include "QuestManager_Concrete.h"
#include "CursorChangeTransact.h"
#include "globalfunc.h"
#include "uiItemTotalComposite/uiItemTotalComposite.h"
#include "uiToolTipMan/uiToolTipMan.h"
#include "ItemManager.h"
#include "EnchantDialog2.h"
#include "uiItemCompositeMan/uiItemCompositeMan.h"
#include "uiItemCube.h"
#include "uiPasswordMan/uiPasswordMan.h"
#include "uiSystemMan/uiSystemMan.h"
#include "BattleScene.h"
#include "uiSocketRemove/uiSocketRemove.h"
#define MAX_CLIENT_INVENTORY_SLOT_NUM (MAX_INVENTORY_SLOT_NUM+MAX_INVENTORY_SLOT_NUM)
#include "ItemInfoParser.h"
#include "ItemAttrCalculator.h"
#include "uiPersonalWayPointWindow/uiPersonalWayPointWindow.h"
#ifdef __NA_001358_ENCHANT_UNIFICATION
#include "uiEnchantMan/uiEnchantMan.h"
#endif //__NA_001358_ENCHANT_UNIFICATION
#include "ExtendInventoryDialog.h"
#include "uiSocketMan/uiSocketMan.h"
#include "uiSocketComposite/uiSocketComposite.h"
const DWORD c_dwFlashTick = 500;
#include "ItemCooltimeManager.h"
#include "Char_SkillDialog.h"
#include "uiCharacterStatusMan/uiCharacterStatusMan.h"
#include "HeroData.h"
#include "HotKeyManager.h"
#include "Input/KeyCommands.h"
#include "input/HotKeyInfoParser.h"
#include "ItemCrystalizeListParser.h"
#include "SoundEffect.h"
#ifdef _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
#include "uiEquipmentAwakeningMan/uiEquipmentAwakeningDialog.h"
#endif // _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
#ifdef _NA_008121_20150318_EQUIPMENT_EVOLUTION_SYSTEM
#include "uiEquipmentEvolutionMan/uiEquipmentEvolutionDialog.h"
#endif // _NA_008121_20150318_EQUIPMENT_EVOLUTION_SYSTEM
#ifdef _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
#include "AwakeningInfoParser.h"
#endif // _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
//----------------------------------------------------------------------------
/**
*/
WzID InventoryDialog::m_wzId[INVEN_MAX] =
{
StrToWzID("B020"), //INVEN_TB00 = 0,
StrToWzID("B021"), //INVEN_TB01,
StrToWzID("B022"), //INVEN_TB02,
StrToWzID("B023"), //INVEN_TB03,
StrToWzID("B024"), //INVEN_TB04,
StrToWzID("B025"), //INVEN_TB05,
StrToWzID("B026"), //INVEN_TB06,
StrToWzID("B027"), //INVEN_TB07,
StrToWzID("B028"), //INVEN_TB08,
StrToWzID("B029"), //INVEN_TB09,
StrToWzID("B030"), //INVEN_TB10,
StrToWzID("B031"), //INVEN_TB11,
StrToWzID("B032"), //INVEN_TB12,
StrToWzID("B033"), //INVEN_TB13,
StrToWzID("B034"), //INVEN_TB14,
StrToWzID("T001"), //INVEN_TEXT_MONEY,// INVEN_TEXT_MONEY,
StrToWzID("B035"), //INVEN_BT_MONEY,
StrToWzID("C000"), //INVEN_CHECK_1_PAGE,
StrToWzID("C001"), //INVEN_CHECK_2_PAGE,
StrToWzID("C002"), //INVEN_CHECK_3_PAGE,
StrToWzID("C003"), //INVEN_CHECK_4_PAGE,
StrToWzID("C004"), //INVEN_CHECK_5_PAGE,
StrToWzID("C005"), //INVEN_CHECK_CHARGE_1_PAGE,
StrToWzID("C006"), //INVEN_CHECK_CHARGE_2_PAGE,
StrToWzID("C007"), //INVEN_CHECK_CHARGE_3_PAGE,
StrToWzID("C008"), //INVEN_CHECK_CHARGE_4_PAGE,
StrToWzID("C009"), //INVEN_CHECK_CHARGE_5_PAGE,
StrToWzID("BT00"), //INVEN_BT_OPEN_EVENT
StrToWzID("B037"), //INVEN_BT_WASTE_BASKET
StrToWzID("BT01"), //INVEN_BT_UNLOCK,
StrToWzID("B036"), //INVEN_BT_LOCK,
StrToWzID("T999"), //INVEN_TXT_TITLE,
StrToWzID("BT02"), //INVEN_FLASH_BT_OPEN_EVENT
StrToWzID("BT03"), //INVEN_PERSONAL_WAYPOINT_BTN,
StrToWzID("BT04"), //INVEN_BT_SETTING
StrToWzID("BT05"), //INVEN_BT_EXTEND
StrToWzID("B000"), //INVEN_BT_EXIT
};
//----------------------------------------------------------------------------
/**
*/
InventoryDialog::InventoryDialog(InterfaceManager* pUIMan)
: uiBase(pUIMan),
m_TabNum ( 0 ),
m_pItemUnitRenderer ( NULL )
,m_pExtendInventoryDialog(NULL)
#ifdef _NA_000000_20130114_RENEWER_UI
,save_inventory_Extra_(0)
,save_inventory_Extra_Next_(0)
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
{
this->m_pInventoryMan = GET_DIALOG_MANAGER( uiInventoryMan, UIMAN_INVENTORY );
assert (m_pInventoryMan );
m_iTooltipStringCode = 0;
m_UseTooltipCtrls.clear();
m_UseTooltipCtrls[INVEN_BT_UNLOCK] = 5570;
m_UseTooltipCtrls[INVEN_BT_LOCK] = 5569;
m_UseTooltipCtrls[INVEN_PERSONAL_WAYPOINT_BTN] = 11063;
m_UseTooltipCtrls[INVEN_BT_SETTING] = 5588;
m_UseTooltipCtrls[INVEN_BT_EXTEND] = 5589;
m_UseTooltipCtrls[INVEN_BT_WASTE_BASKET] = 5548;
m_UseTooltipCtrls[INVEN_BT_OPEN_EVENT] = 5549;
m_UseTooltipCtrls[INVEN_FLASH_BT_OPEN_EVENT] = 5549;
SCItemSlotContainer::Init((MAX_INVENTORY_SLOT_PER_TAB * MAX_INVENTORY_TAB_NUM), SI_INVENTORY);
GetManager()->SetPasswordState(eInventoryDlgState_None);
m_CharCacheInfoMap.clear();
m_bUpdateQuest = true;
}
//----------------------------------------------------------------------------
/**
*/
InventoryDialog::~InventoryDialog()
{
m_UseTooltipCtrls.clear();
Release();
}
//----------------------------------------------------------------------------
/**
*/
int InventoryDialog::getTooltipString(POSTYPE pos)
{
map<int,int>::iterator iter;
iter = m_UseTooltipCtrls.find(pos);
if (iter == m_UseTooltipCtrls.end())
return 0;
return iter->second;
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::Init( CDrawBase * pDrawBase )
{
#ifdef _NA_006643_20130417_UI_OUT_WINDOW_BREAK
for (int i = 0 ; i < 2 ; ++i)
{
memset(m_hotkey[i],0,sizeof(TCHAR)*INTERFACE_STRING_LENGTH);
}
#endif
// 상대적인 위치처리
uiBase::Init(pDrawBase);
m_TabNum = 0;
m_iClickedIndexTab = 0;
m_iPrevClickedIndexTab = 0;
m_bDrawSlotInfo = FALSE;
m_eCurInvenContainer = INVENTORY;
m_pItemToolTip = NULL;
#ifdef _JBH_MOD_MONEY_OUTPUT
m_dwPendingTick = 0;
m_bCkickMoney = FALSE;
#endif
m_bControlsInitialized = false;
GetControlsFromDialog();
m_pCtrlEventBtn = (CCtrlButtonWZ*)getControl(INVEN_FLASH_BT_OPEN_EVENT);
assert(m_pCtrlEventBtn);
if(m_pCtrlEventBtn)
{
m_pCtrlEventBtn->ShowWindowWZ(WZ_HIDE);
}
m_dwFlashTickForEventInven = c_dwFlashTick;
m_bEventInventory = FALSE;
m_bFlashEventInven = FALSE;
#ifdef _NA_000000_20130114_RENEWER_UI
for (int index = 0 ; index < 5 ; ++index)
{
CControlWZ* TapAbleInvenExtra = getControl(INVEN_CHECK_CHARGE_1_PAGE + index);
if (TapAbleInvenExtra)
{
TapAbleInvenExtra->EnableWindowWZ(false);
TapAbleInvenExtra->SetTextWZA(" ");
}
}
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::InitRenderer()
{
// 임시
if (m_pItemUnitRenderer)
{
SAFE_RELEASENDELETE( m_pItemUnitRenderer );
}
m_pItemUnitRenderer = new ItemUnitRenderer;
m_pItemUnitRenderer->Init( m_pDraw, GetMaxSlotNum() );
m_pItemUnitRenderer->ShowCooldown(TRUE);
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::Release()
{
SAFE_RELEASENDELETE( m_pItemUnitRenderer );
m_CharCacheInfoMap.clear();
}
//----------------------------------------------------------------------------
/** 이미지 리소스관련해서만 필요.
*/
VOID
InventoryDialog::FlushUnitDraw()
{
SCItemSlot FromSlot;
m_bUpdateQuest = false;
for (int i = 0; i < GetMaxSlotNum(); ++i)
{
if( !IsEmpty(i) )
DeleteSlot(i, NULL);
}
m_bUpdateQuest = true;
Release();
m_iClickedIndexTab = m_iPrevClickedIndexTab = 0;
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::OnUpdateSolarDialog()
{
//무언가 정보를 갱신 해야 할때 작업
// 돈 정보를 갱신한다.
m_pItemUnitRenderer->Update();
if (m_MoneyText != NULL)
{
updateMoney(m_MoneyText);
}
#ifdef _NA_000000_20130114_RENEWER_UI
//인벤토리 페이지 정보를 갱신한다.
UpdateExtraInventoryPage();
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
#ifdef _JBH_MOD_MONEY_OUTPUT
#if defined(__KR) || defined(_KOREA)
updateToolTip();
# endif //#if defined(__KR) || defined(_KOREA)
#endif //_JBH_MOD_MONEY_OUTPUT
}
//----------------------------------------------------------------------------
/**
*/
uiInventoryMan* InventoryDialog::GetManager()
{
return m_pInventoryMan;
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
VOID InventoryDialog::Process(DWORD dwTick)
{
if(m_bEventInventory)
{
if((DWORD)m_dwFlashTickForEventInven > dwTick && IsVisible())
{
m_dwFlashTickForEventInven -= dwTick;
if( m_dwFlashTickForEventInven <= 100 )
{
m_bFlashEventInven ^= 1;
m_dwFlashTickForEventInven = c_dwFlashTick;
}
}
}
else
{
m_bFlashEventInven = FALSE;
}
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::OnRenderSolarDialog()
{
if (m_pItemUnitRenderer)
{
m_pItemUnitRenderer->Render();
if (MouseHandler::Instance()->GetMouseState() == MouseHandler::CRYSTALIZATION)
{
ImpossibleCrystalizationItemIconDeActiveRender();
}
}
updateToolTip();
if((TRUE == m_bFlashEventInven) && (WZ_HIDE == m_pCtrlEventBtn->GetState()))
{
m_pCtrlEventBtn->ShowWindowWZ(WZ_SHOW);
}
else if((FALSE == m_bFlashEventInven) && (WZ_SHOW == m_pCtrlEventBtn->GetState()))
{
m_pCtrlEventBtn->ShowWindowWZ(WZ_HIDE);
}
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::getControlPos( POSTYPE AtPos, RECT & rectOut )
{
CControlWZ * pCtrl = getControl( AtPos );
rectOut = pCtrl->GetSizeRect();
}
//----------------------------------------------------------------------------
/**
*/
BOOL
InventoryDialog::GetControlsFromDialog()
{
int i;
for (i = 0; i < INVEN_TAB_MAX; ++i)
{
m_pCtrlCheckTab[i] = (CCtrlButtonCheckWZ *) getControl(INVEN_CHECK_1_PAGE+i);
if ( !m_pCtrlCheckTab[i] )
{
return FALSE;
}
}
for(i = 0; i < eINVENTORY_LOCK_STATE_MAX; ++i)
{
m_pCtrlBtnLock[i] = static_cast<CCtrlButtonCheckWZ *>(getControl(INVEN_BT_UNLOCK + i));
assert(m_pCtrlBtnLock[i]);
}
m_TxtCtrlTitle = static_cast<CCtrlStaticWZ *>(getControl(INVEN_TXT_TITLE));
assert(m_TxtCtrlTitle);
m_MoneyText = static_cast<CCtrlStaticWZ *>(getControl(INVEN_TEXT_MONEY));
assert(m_MoneyText);
m_bControlsInitialized = true;
return TRUE;
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::refreshInventoryRenderUnit()
{
ItemUnitRenderer::RenderUnit * pRender = NULL;
RECT rcSlot;
CControlWZ * pCtrl = NULL;
for (int i = 0; i < GetMaxSlotNum(); ++i)
{
SCSlot & rSlot = SCSlotContainer::GetSlot(i);
if (this->IsEmpty(i))
{
continue;
}
if ( this->m_eCurInvenContainer == INVENTORY &&
i >= m_TabNum && i < m_TabNum+INVEN_MAX_SLOT )
{
// 보여줘야할 목록
if(!m_pItemUnitRenderer)
continue;
pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() );
pCtrl = getControl(GetRelativeSlotPos(i));
rcSlot = pCtrl->GetSizeRect();
if (!pRender)
{
pCtrl = getControl( GetRelativeSlotPos(i) );
rcSlot = pCtrl->GetSizeRect();
pRender = m_pItemUnitRenderer->AddItemUnit( rSlot.GetSerial(), rSlot.GetCode(), &rcSlot, &rSlot ,pCtrl);
}
else
{
pCtrl = getControl(GetRelativeSlotPos(i));
rcSlot = pCtrl->GetSizeRect();
m_pItemUnitRenderer->ChangePositionItemUnit(rSlot.GetSerial(), &rcSlot, pCtrl);
}
if (pRender)
{
if(pRender != MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit)
{
pRender->SetShow(TRUE);
}
else
{
if (MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit &&
MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit->m_isDiv)
{
pRender->SetShow(TRUE);
}
}
}
}
else
{
// 보여지지 말아야 할 목록
if(!m_pItemUnitRenderer)
continue;
pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() );
if (!pRender )
{
pCtrl = getControl( GetRelativeSlotPos(i) );
rcSlot = pCtrl->GetSizeRect();
pRender = m_pItemUnitRenderer->AddItemUnit( rSlot.GetSerial(), rSlot.GetCode(), &rcSlot, &rSlot ,pCtrl);
}
if (pRender)
pRender->SetShow(FALSE);
}
}
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::ReFreshRenderSlotALL()
{
refreshInventoryRenderUnit();
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::ReFreshRenderSlot()
{
if ( !this->IsVisibleWindow() )
{
if (m_pExtendInventoryDialog != NULL)
{
m_pExtendInventoryDialog->RefreshRenderSlot();
}
return;
}
ReFreshRenderSlotALL();
m_iPrevClickedIndexTab = this->m_iClickedIndexTab;
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::updateMoney(CCtrlStaticWZ *pControl)
{
if (g_pHero)
{
NUMBERFMT nFmt = { 0, 0, 3, _T("."), _T(","), 1 };
// 돈을 셋팅한다.
Sprintf(m_szResult, _T("%I64u"), g_pHero->GetMoney());
::GetNumberFormat(
LOCALE_SYSTEM_DEFAULT,
NULL,
m_szResult,
&nFmt,
m_szNumber,
sizeof(m_szNumber));
#ifdef _JBH_MOD_MONEY_OUTPUT
DWORD dwColor = GlobalFunc::GetMoneyColor( g_pHero->GetMoney() );
pControl->SetTextColor( dwColor );
#else
pControl->SetTextColor(RGBA(255,255,255,255));
#endif
GlobalFunc::SetCaption( pControl, m_szNumber );
}
}
//----------------------------------------------------------------------------
/**
*/
BOOL
InventoryDialog::UpdateData(BOOL bTake)
{
if(!m_bControlsInitialized)
{
return FALSE;
}
if (bTake)
{
}
else
{
ClickCheckButton(m_iClickedIndexTab);
}
return TRUE;
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::OnShowWindow(BOOL val)
{
//SolarDialog::OnShowWindow(val);
if (val)
{
UpdateData(FALSE);
ClickCheckButton(m_iClickedIndexTab );
ReFreshRenderSlotALL();
InitTitleByLockState(m_TxtCtrlTitle, m_pCtrlBtnLock[eINVENTORY_LOCK_STATE_LOCK],
m_pCtrlBtnLock[eINVENTORY_LOCK_STATE_UNLOCK]);
MSG_CG_EVENT_QUERY_EXIST_SYN SendMsg;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendMsg, sizeof(SendMsg));
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
}
else
{
UpdateData(TRUE);
HideWindowProcess();
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
}
}
void InventoryDialog::HideWindowProcess()
{
MouseHandler::Instance()->RemoveMouseState(MouseHandler::SOCKET_FILL);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::ENCHANT);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::EXTRASTONE_USE);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::THROW_WASTE_BASKET);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::SOCKET_REMOVE);
#ifdef _ADD_CHARGE_ITEM_RANDOM_OPTION
MouseHandler::Instance()->RemoveMouseState(MouseHandler::ADD_RANDOM_OPTION );
#endif
MouseHandler::Instance()->RemoveMouseState(MouseHandler::RANK_DOWN);
g_KeyQueueManager.DeleteMsg(eDoType_Rank_Down_Cancle);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::ETHERIA_EXTRACT);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::ETHERIA_EXTRACT_CASTING);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::ETHERIA_COMBINATION);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::ETHER_DEVICE_FILL);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::RIDER_WAX);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::REPAIR_LIMITED);
g_KeyQueueManager.DeleteMsg(eDoType_Repair_Limited_Cancle);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::CRYSTALIZATION);
g_KeyQueueManager.DeleteMsg(eDoType_Crystalization);
#ifdef _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
MouseHandler::Instance()->RemoveMouseState(MouseHandler::AWAKENING);
#endif // _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
MouseHandler::Instance()->RollbackItemAtHand();
}
//----------------------------------------------------------------------------
/**
*/
RC::eSLOT_INSERT_RESULT InventoryDialog::InsertSlot( POSTYPE AtPos, SCSlot & rSlot )
{
//slot_safe_code:안전한 슬롯체크 구문(삽입)
if (ValidPos(AtPos) == false)
{
return RC::RC_INSERT_SLOT_FAILED;
}
if ( GENERALPARAM->GetSpecialMode() )
{
CheckValidInsertWithNotice(AtPos);
}
if(!g_pHero)
return RC_INSERT_SLOT_FAILED;
g_pHero->GetQuickContainer()->UpdateEquip(rSlot.GetSlotIdx(), rSlot.GetPos(), rSlot.GetCode(),
SI_INVENTORY, AtPos, rSlot.GetCode());
g_pHero->GetQuickContainer()->UpdateQuickSlot( rSlot.GetSlotIdx(), rSlot.GetPos(), rSlot.GetCode(),
SI_INVENTORY, AtPos, rSlot.GetCode());
if( BASE_ITEMINFO* pItemInfo = ItemInfoParser::Instance()->GetItemInfo( rSlot.GetCode() ) )
{
RC::eSLOT_INSERT_RESULT eInsertSlotResult = SCSlotContainer::InsertSlot( AtPos, rSlot );
//slot_safe_code:실제삽입 성공시에만 데이터처리
if (eInsertSlotResult != RC::RC_INSERT_SLOT_SUCCESS)
{
return eInsertSlotResult;
}
if( pItemInfo->IsExistInvenOptions() )
{
g_pHero->AddItemEffect( g_pHero, pItemInfo, eITEM_EFFECT_TYPE_INVENTORY );
MSG_CG_STATUS_RENDER_EFFECT_ITEM_LIST_SYN SendMsg;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendMsg, sizeof(SendMsg));
}
}
//////////////////////////////////////////////////////////////////////////
// 여기서 퀵정보를 갱신.
ItemManager::Instance()->UpdateQuickInfo();
if(true == m_bUpdateQuest)
{
if ( g_pQMGR_Real )
{
g_pQMGR_Real->Event( QUEST_EVENT_ITEM, NULL );
g_InterfaceManager.UpdateQuestInfo();
}
}
uiItemTotalcomposite * pTotalComposite = GET_CAST_DIALOG( uiItemTotalcomposite, IM_ITEM_COMPOSITE_MANAGER::ITEM_TOTAL_COMPOSITE );
if( pTotalComposite->IsVisible() )
{
pTotalComposite->updateInfo();
}
// 인벤 체크 시점 검토 필요
int nCount = GetSlotNum();
int nMax = (g_pHero->GetCharInfo()->m_ExtraInventoryTabCount + INVEN_TAB_CHARGE_MAX) * INVEN_MAX_SLOT;
if ( nCount == nMax )
{
WzColor color = WzColor_RGB(197, 47, 47);
TCHAR szMessage[INTERFACE_STRING_LENGTH];
g_InterfaceManager.GetInterfaceString(5663, szMessage, INTERFACE_STRING_LENGTH-1);
g_InterfaceManager.ShowCenterMessageBox(szMessage, 5000, &color, FALSE );
}
if (g_pHero != NULL)
{
g_pHero->UpdateSkillAttr();
}
uiCharacterStatusMan::RefreshSimulationPlayerAttributes();
return RC_INSERT_SLOT_SUCCESS;
}
//----------------------------------------------------------------------------
/**
*/
BOOL
InventoryDialog::DeleteSlot( POSTYPE AtPos, SCSlot * pSlotOut )
{
assert( FALSE == IsEmpty(AtPos) );
//slot_safe_code:안전한 슬롯체크 구문(삭제)
if ((ValidPos(AtPos) == false) ||
IsEmpty(AtPos))
{
return false;
}
// render unit 를 먼저 지운다.
SCSlot & rSlot = GetSlot(AtPos);
if(m_pItemUnitRenderer)
{
m_pItemUnitRenderer->RemoveItemUnit( rSlot.GetSerial() );
}
else
{
assert(m_pItemUnitRenderer);
}
g_SlotKeyGenerator.Restore((DWORD)rSlot.GetSerial());
SCItemSlot& item_slot = (SCItemSlot&)GetSlot(AtPos);
const BASE_ITEMINFO* const pItemInfo = item_slot.GetItemInfo();
if(pItemInfo)
{
if( pItemInfo->IsExistInvenOptions() )
{
// 이펙트 삭제
g_pHero->RemoveItemEffectByItemCode(pItemInfo->m_Code);
//////////////////////////////////////////////////////////////////////////
//다른플레이어들에게 이펙트 지워졌다고 알려줌
MSG_CG_STATUS_RENDER_EFFECT_ITEM_LIST_SYN SendMsg;
GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendMsg, sizeof(SendMsg));
//////////////////////////////////////////////////////////////////////////
//인벤에 EffectOption 아이템이 남아있다면 다시 Add Effect
POSTYPE start = 0;
POSTYPE total = GetMaxSlotNum();
int iCurPos = 0;
for (POSTYPE i = start; i < total; ++i)
{
if ( IsEmpty(i) )
continue;
SCSlot& rSlotTemp = GetSlot(i);
if(rSlot.GetPos() == rSlotTemp.GetPos())
continue;
SCItemSlot& temp_slot = (SCItemSlot&)rSlotTemp;
if( const BASE_ITEMINFO* const pItemInfoTemp = temp_slot.GetItemInfo() )
{
if( pItemInfoTemp->IsExistInvenOptions() )
{
g_pHero->AddItemEffect( g_pHero, pItemInfoTemp, eITEM_EFFECT_TYPE_INVENTORY );
}
}
}
//옵션값 계산
//SCItemSlot& item_slot = (SCItemSlot&)GetSlot(AtPos);
if (!IsEmpty(AtPos))
{
//BASE_ITEMINFO* item_info = item_slot.GetItemInfo();
//
//if (item_info->IsExistInvenOptions())
//{
// //ApplyEffect(item_slot, -1, 0);
//}
SCItemSlot TmpDeleteItemSlot;
if (!SCSlotContainer::DeleteSlot(AtPos, &TmpDeleteItemSlot))
{
return FALSE;
}
if (pSlotOut)
{
((SCItemSlot*)pSlotOut)->Copy(TmpDeleteItemSlot);
}
}
}
else
{
SCSlotContainer::DeleteSlot(AtPos, pSlotOut );
}
}
ReFreshRenderSlot();
// TODO : 여기서 퀵정보를 갱신.
ItemManager::Instance()->UpdateQuickInfo();
#ifdef _YMS_AUTOBOT_GAME
ItemManager::Instance()->UpdateQuickInfo(SI_AUTOMATIC_INFO);
#endif _YMS_AUTOBOT_GAME
//!
if(true == m_bUpdateQuest)
{
if ( g_pQMGR_Real )
{
g_pQMGR_Real->Event( QUEST_EVENT_ITEM, NULL );
g_InterfaceManager.UpdateQuestInfo();
}
}
uiItemTotalcomposite * pTotalComposite = GET_CAST_DIALOG( uiItemTotalcomposite, IM_ITEM_COMPOSITE_MANAGER::ITEM_TOTAL_COMPOSITE );
if( pTotalComposite->IsVisible() )
pTotalComposite->updateInfo();
if (g_pHero != NULL)
{
g_pHero->UpdateSkillAttr();
}
uiCharacterStatusMan::RefreshSimulationPlayerAttributes();
return TRUE;
}
//----------------------------------------------------------------------------
/**
*/
VOID InventoryDialog::UpdateSlot( POSTYPE AtPos, SCSlot & IN rSlot )
{
SCSlotContainer::UpdateSlot(AtPos, rSlot);
// 여기서 퀵정보를 갱신
ItemManager::Instance()->UpdateQuickInfo(SI_QUICK);
ItemManager::Instance()->UpdateQuickInfo(SI_AUTOMATIC_INFO);
}
//-------------------------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::OnInsert( SCSlot & IN rSlotIn )
{
// 클라에서 따로 시리얼을 발급한다.
rSlotIn.SetSerial( g_SlotKeyGenerator.GetKey() );
ReFreshRenderSlot();
ItemManager::Instance()->AddUpdateItemSlot(&rSlotIn);
}
//-------------------------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::OnDelete( SCSlot & IN rSlotIn )
{
// render unit 를 먼저 지운다.
ItemManager::Instance()->RemoveUpdateItemSlot(&rSlotIn);
}
//
////-------------------------------------------------------------------------------------------
///**
//*/
//void
//InventoryDialog::UpdatePosition()
//{
// ////SolarDialog::UpdatePosition();
//}
//----------------------------------------------------------------------------
/**
*/
ItemUnitRenderer *
InventoryDialog::GetItemUnitRender() const
{
return m_pItemUnitRenderer;
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::MessageProc( SI_MESSAGE * pMessage )
{
static BOOL bDclicked = FALSE;
switch( pMessage->eResultMsg )
{
case RT_MSG_LBUTTONDCLICK:
{
POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID );
if (this->m_eCurInvenContainer != INVENTORY)
{
return;
}
CControlWZ * pControl = getControl(pos);
if (!pControl)
{
return;
}
bDclicked = TRUE;
POSTYPE RealSlotPos = GetRealSlotPos(pos);
if(RealSlotPos < this->GetMaxSlotNum() && pos < INVEN_MAX_SLOT)
{
this->DoubleClickSlotBtn(RealSlotPos);
}
else
{
ClickCheckButton(m_iClickedIndexTab);
}
}
break;
//----------------------
// 더클클릭시 Lbuttondown -> Double Click -> Lbuttondown 이 연속적으로 들어와서
// 플레그를 둬서 Lbuttondown을 한번 씹는다.
case RT_MSG_LBUTTONCLICK:
{
if (bDclicked)
{
bDclicked = FALSE;
ClickCheckButton(m_iClickedIndexTab);
return;
}
POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID );
CControlWZ * pControl = getControl(pos);
if (!pControl)
{
return;
}
if( pos < INVEN_MAX_SLOT )
{
CControlWZ* pControl = getControl(pos);
if (pControl != NULL)
{
POSTYPE RealPos = GetRealSlotPos(pos);
ClickSlotBtn(RealPos, pControl->GetSizeRect());
}
}
else
{
ClickETCBtn(pos);
}
}
break;
case RT_MSG_RBUTTONCLICK:
{
POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID );
CControlWZ * pControl = getControl(pos);
if (!pControl)
{
return;
}
if (pos >= INVEN_MAX_SLOT)
{
return;
}
RightClickProcess(GetRealSlotPos(pos));
}
break;
default:
{
SolarDialog::MessageProc( pMessage );
}
break;
}
}
//----------------------------------------------------------------------------
/**
*/
VOID InventoryDialog::RightClickProcess(POSTYPE real_pos)
{
EnchantDialog* enchant_dialog_ptr = static_cast<EnchantDialog*>(ItemManager::Instance()->GetItemContainerDialog(SI_ENCHANT));
if ((enchant_dialog_ptr != NULL) && (enchant_dialog_ptr->IsVisible() == TRUE))
{
enchant_dialog_ptr->OnEnchantItem_InventoryRightClick(SI_INVENTORY, real_pos);
return;
}
// 결정화 상태일 때는 우클릭을 막자
if (MouseHandler::Instance()->GetMouseState() == MouseHandler::CRYSTALIZATION)
{
return;
}
uiItemCube* itemcube_dialog_ptr = static_cast<uiItemCube*>(ItemManager::Instance()->GetItemContainerDialog(SI_CUBE));
if ((itemcube_dialog_ptr != NULL) && (itemcube_dialog_ptr->IsVisible() == TRUE))
{
itemcube_dialog_ptr->OnItemCube_InventoryRightClick(SI_INVENTORY, real_pos);
return;
}
uiSocketComposite* socketcomposite_dialog_ptr =
static_cast<uiSocketComposite*>(ItemManager::Instance()->GetItemContainerDialog(SI_SOCKET_COMPOSITE));
if ((socketcomposite_dialog_ptr != NULL) && (socketcomposite_dialog_ptr->IsVisible() == TRUE))
{
socketcomposite_dialog_ptr->OnSocketComposite_InventoryRightClick(SI_INVENTORY, real_pos);
return;
}
#ifdef _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
uiEquipmentAwakeningDialog* equipment_wakeup_dialog = static_cast<uiEquipmentAwakeningDialog*>(ItemManager::Instance()->GetItemContainerDialog(SI_EQUIPMENT_AWAKENING));
if ((equipment_wakeup_dialog != NULL) && (equipment_wakeup_dialog->IsVisible() == TRUE))
{
equipment_wakeup_dialog->OnEquipmentAwakeningItem_InventoryRightClick(SI_INVENTORY, real_pos);
MouseHandler::Instance()->RollbackItemAtHand();
return;
}
#endif // _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
#ifdef _NA_008121_20150318_EQUIPMENT_EVOLUTION_SYSTEM
uiEquipmentEvolutionDialog* equipment_evolution_dialog = static_cast<uiEquipmentEvolutionDialog*>(ItemManager::Instance()->GetItemContainerDialog(SI_EQUIPMENT_EVOLUTION));
if ((equipment_evolution_dialog != NULL) && (equipment_evolution_dialog->IsVisible() == TRUE))
{
equipment_evolution_dialog->OnEquipmentEvolutionItem_InventoryRightClick(SI_INVENTORY, real_pos);
MouseHandler::Instance()->RollbackItemAtHand();
return;
}
#endif // _NA_008121_20150318_EQUIPMENT_EVOLUTION_SYSTEM
// default
MouseHandler::Instance()->ItemUseTransaction(SI_INVENTORY, real_pos);
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::ClickCheckButton(int iIndex )
{
iIndex = max(0, iIndex);
if (iIndex >= INVEN_TAB_MAX)
{
return;
}
for (int i = 0; i < INVEN_TAB_MAX; ++i)
{
m_pCtrlCheckTab[i]->SetCheckState(FALSE);
}
m_pCtrlCheckTab[iIndex]->SetCheckState(TRUE);
this->m_iClickedIndexTab = iIndex;
m_TabNum = m_iClickedIndexTab * INVEN_MAX_SLOT;
}
VOID
InventoryDialog::ClickSlotBtn(POSTYPE RealPos, RECT rcSlot)
{
switch (MouseHandler::Instance()->GetMouseState())
{
case MouseHandler::ENCHANT:
{
#ifdef __NA_001358_ENCHANT_UNIFICATION
// 인스턴스 인챈트 작업
// 클릭한 아이템이 인챈트가 가능한 아이템인지 체크 - 무기와 방어구
// 체크 후 인챈트 패킷 전송, 팬딩
uiEnchantMan* pUIMan = GET_DIALOG_MANAGER(uiEnchantMan, UIMAN_ENCHANT);
if( pUIMan )
{
pUIMan->SetTargetItemPos(RealPos);
if ( pUIMan->CheckEnableEnchant() )
{
pUIMan->AskInstantEnchant();
MouseHandler::Instance()->RemoveMouseState( MouseHandler::ENCHANT );
}
}
#endif // __NA_001358_ENCHANT_UNIFICATION
}
break;
case MouseHandler::SOCKET_FILL:
{
// 소켓 채우기 진행
MouseHandler::Instance()->ItemCompositeSocketFill(
SI_INVENTORY,
RealPos
);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::SOCKET_FILL);
// 소켓옵션 삽입을 할 아이템을 선택하시오 : 5303
const int c_iAddSocketOption = 5303;
g_InterfaceManager.GetInterfaceString( c_iAddSocketOption, m_szResult, INTERFACE_STRING_LENGTH);
GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, m_szResult);
}
break;
case MouseHandler::SOCKET_IDENTIFY:
{
// 소켓 미확인 갯수 확인
bool result = MouseHandler::Instance()->ItemSocketIndentifyTransction(RealPos);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::SOCKET_IDENTIFY);
if (result == false)
{
// 해당아이템은 소켓 수량이 이미 확인 되었거나, 소켓아이템이 아닙니다. : 6486
const int c_iAddSocketOption = 6486;
g_InterfaceManager.GetInterfaceString( c_iAddSocketOption, m_szResult, INTERFACE_STRING_LENGTH);
GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, m_szResult);
}
}
break;
case MouseHandler::CRYSTALIZATION:
{
// 인벤토리가 부족하다 알려주자.
InventoryDialog* inventory_dialog_ptr = GET_CAST_DIALOG(InventoryDialog, IM_INVENTORY_MANAGER::INVEN_DLG);
if (inventory_dialog_ptr)
{
int count = inventory_dialog_ptr->GetSlotNum();
int max = (g_pHero->GetCharInfo()->m_ExtraInventoryTabCount +
inventory_dialog_ptr->GetMaxInvenChargeNum()) *
inventory_dialog_ptr->GetMaxInvenSlotNum();
if ( count == max )
{
// 경고음 출력
g_SoundEffect.PlayUI(UI_SOUND_ITEM_PUT_CRYSTALIZATION);
TCHAR result_message[INTERFACE_STRING_LENGTH] = {0, };
// 5851 : 인벤토리에 공간이 없어 결정화를 진행할 수 없습니다.
g_InterfaceManager.GetInterfaceString(5851, result_message);
GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, result_message );
break;
}
}
// 아이템 결정화
bool result = MouseHandler::Instance()->ItemCrystalizationTransction(RealPos);
if (result == false)
{
// 경고음 출력
g_SoundEffect.PlayUI(UI_SOUND_ITEM_PUT_CRYSTALIZATION);
// 5707 : 해당 아이템은 결정화 할 수 없는 아이템입니다
g_InterfaceManager.GetInterfaceString(5707, m_szResult);
GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, m_szResult );
}
}
break;
case MouseHandler::SOCKET_RECREATE:
{
// 헤르메시즘의 성서 사용
bool result = MouseHandler::Instance()->ItemSocketRecreateTransction(RealPos);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::SOCKET_RECREATE);
if (result == false)
{
SCItemSlot& use_slot = static_cast<SCItemSlot&>(GetSlot(RealPos));
const BASE_ITEMINFO* selected_item_info_ptr = use_slot.GetItemInfo();
if (selected_item_info_ptr != NULL)
{
TCHAR string_name[INTERFACE_STRING_LENGTH] = {0,};
TCHAR string_buffer[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceString(selected_item_info_ptr->m_NCode, string_name, INTERFACE_STRING_LENGTH);
// 48280 %s 아이템은 소켓이 생성될 수 없는 아이템 입니다.
const int c_iAddSocketOption = 48280;
g_InterfaceManager.GetInterfaceString(c_iAddSocketOption, string_buffer, INTERFACE_STRING_LENGTH);
Sprintf(m_szResult, string_buffer, string_name);
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, m_szResult);
}
}
}
break;
case MouseHandler::EXTRASTONE_USE:
{
// 엑스트라 스톤 적용
BOOL bRet = MouseHandler::Instance()->ItemCompositeExtraStoneUse(
SI_INVENTORY,
RealPos
);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::EXTRASTONE_USE);
if ( bRet )
{
// 엑스트라스톤을 적용할 아이템을 선택하시오 : 5304
const int c_iSelectItemApplyExtraStone = 5304;
g_InterfaceManager.GetInterfaceString(
c_iSelectItemApplyExtraStone,
m_szResult,
INTERFACE_STRING_LENGTH);
GlobalFunc::OutputMsg_Notice( eOUTPUT_MSG_CHAT, m_szResult);
}
}
break;
case MouseHandler::SOCKET_REMOVE:
{
uiSocketRemove * pSocketRemove = static_cast<uiSocketRemove *> ( g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_SOCKET_REMOVE) );
if( pSocketRemove )
{
BOOL bRet = pSocketRemove->IsAvaliableRemoveSocket(SI_INVENTORY , RealPos );
if( bRet )
{
// 소켓 옵션을 리스트에 추가 하였다.
if( pSocketRemove->InsertSocketOption(SI_INVENTORY , RealPos ) )
{
if( ! pSocketRemove->IsVisibleWindow() )
{
pSocketRemove->ShowWindow(TRUE);
MouseHandler::Instance()->RemoveMouseState(MouseHandler::SOCKET_REMOVE);
}
}
}
}
}
break;
#ifdef _ADD_CHARGE_ITEM_RANDOM_OPTION
case MouseHandler::ADD_RANDOM_OPTION:
{
// 소켓 옵션 제거.
BOOL bRet = MouseHandler::Instance()->ItemCompositeAddRandomOption(
SI_INVENTORY,
RealPos );
if (bRet)
{
MouseHandler::Instance()->RemoveMouseState(MouseHandler::ADD_RANDOM_OPTION);
g_KeyQueueManager.DeleteMsg(eDoType_dialog_Random_Option_cancel);
}
}
break;
#endif
case MouseHandler::REPAIR_LIMITED:
{
BOOL bRet = MouseHandler::Instance()->ItemRepairLimitedTransction(SI_INVENTORY, RealPos);
if(bRet)
{
MouseHandler::Instance()->RemoveMouseState(MouseHandler::REPAIR_LIMITED);
GetManager()->Send_CG_ITEM_HAMMER_OF_ALCHEMIST_SYN(RealPos);
}
else
MouseHandler::Instance()->SetTryUseChageItem(FALSE);
}
break;
case MouseHandler::ETHER_DEVICE_FILL:
{
MouseHandler::Instance()->ItemEtherDeviceFillTransction(SI_INVENTORY, RealPos);
}
break;
case MouseHandler::RIDER_WAX:
{
MouseHandler::Instance()->ItemRiderWaxChangeTransction(SI_INVENTORY, RealPos);
}
break;
#ifdef _NA_0_20111012_ITEM_DATE_EXTEND
case MouseHandler::EXTEND_ITEMDATE:
{
MouseHandler::Instance()->ExtendItemDateTransction(RealPos);
}
break;
#endif//_NA_0_20111012_ITEM_DATE_EXTEND
#ifdef _NA_003740_20111122_RANDOM_ITEM
case MouseHandler::RANDOMIZE_ITEM:
{
MouseHandler::Instance()->RandomizeTransction(RealPos);
}
break;
#endif//_NA_003740_20111122_RANDOM_ITEM
case MouseHandler::ETHERIA_EXTRACT:
{
//에테리아 추출이벤트(캐스팅후에 패킷보내기)
MouseHandler::Instance()->ItemEtheriaExtractTransction(RealPos);
}
break;
case MouseHandler::ETHERIA_COMBINATION:
{
if (MouseHandler::Instance()->ItemEtheriaCombinationTransction(SI_INVENTORY, RealPos))
{
CooltimeStruct data;
ZeroMemory(&data, sizeof(data));
data.type = kEtheriaCombine;
data.max_time = 2000;
data.EtheriaCombine.from_pos = MouseHandler::Instance()->GetPendingUseChargeItemPos();
data.EtheriaCombine.to_pos = RealPos;
data.slot_index = SI_INVENTORY;
data.item_pos = RealPos;
data.dealy_time = 2000;
data.serial_key = GetSlot(RealPos).GetSerial();
ItemCooltimeManager::Instance()->InsertItem(&data);
}
}
break;
case MouseHandler::GUILD_WITHDRAW:
case MouseHandler::WITHDRAW:
{
//할거 없다.
}
break;
case MouseHandler::ITEM_STAT_CHANGE:
{
SCItemSlot & rItemSlot = (SCItemSlot &)GetSlot(RealPos);
BASE_ITEMINFO * pInfo = ItemInfoParser::Instance()->GetItemInfo( rItemSlot.GetCode() );
if(NULL == pInfo)
break;
bool is_shell_item = (rItemSlot.IsContainValidItem() &&
rItemSlot.IsShellItem());
if (rItemSlot.IsEtheriaItem() ||
(is_shell_item == false) ||
pInfo->IsWeapon() ||
pInfo->IsArmor())
{
ItemManager::Instance()->SetChangeItemPosInStatChangePkt(RealPos);
ItemManager::Instance()->SendStatChangeItem();
}
else
{
TCHAR szMessage[INTERFACE_STRING_LENGTH + 1] = {0,};
//5146 기능을 사용할 수 없는 아이템입니다.
g_InterfaceManager.GetInterfaceString(5146,szMessage);
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
}
}
break;
default:
{
//RECT rcSlot = pControl->GetSizeRect();
MouseHandler::Instance()->ItemTransaction(
SI_INVENTORY,
RealPos,
&rcSlot);
}
break;
}
}
VOID
InventoryDialog::UpdatePage()
{
BYTE c_byPAGEIDS[] =
{
INVEN_CHECK_1_PAGE,
INVEN_CHECK_2_PAGE,
INVEN_CHECK_3_PAGE,
INVEN_CHECK_4_PAGE,
INVEN_CHECK_5_PAGE,
INVEN_BT_OPEN_EVENT,
};
m_eCurInvenContainer = INVENTORY;
m_iClickedIndexTab = m_iClickedIndexTab;
ClickCheckButton(m_iClickedIndexTab);
m_TabNum = m_iClickedIndexTab * INVEN_MAX_SLOT;
ReFreshRenderSlot();
}
//-------------------------------------------------------------------------------------------
/**
*/
void InventoryDialog::InitTitleByLockState(CCtrlStaticWZ* pTxtCtrlTitle,
CCtrlButtonWZ* pCtrlBtnLock, CCtrlButtonWZ* pCtrlBtnUnlock)
{
PLAYERINFO_FOR_PACKET::eINVEN_LOCK_MODE InventoryLockState = xGetHeroData()->GetInventoryLockState();
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
if(pTxtCtrlTitle)
{
if( InventoryLockState == PLAYERINFO_FOR_PACKET::DISABLEDnEXIST)
{
// 인벤토리 (잠김)
g_InterfaceManager.GetInterfaceString( 1187, szMessage, INTERFACE_STRING_LENGTH );
}
else
{
// 인벤토리 (열림)
g_InterfaceManager.GetInterfaceString( 1188, szMessage, INTERFACE_STRING_LENGTH );
}
GlobalFunc::SetCaption(pTxtCtrlTitle, szMessage);
}
InitDlgShowNHide(pCtrlBtnLock, pCtrlBtnUnlock);
}
//-------------------------------------------------------------------------------------------
/**
*/
void InventoryDialog::InventoryUnitRender()
{
m_pItemUnitRenderer->Render();
if (MouseHandler::Instance()->GetMouseState() == MouseHandler::CRYSTALIZATION)
{
ImpossibleCrystalizationItemIconDeActiveRender();
}
}
//-------------------------------------------------------------------------------------------
/**
*/
void InventoryDialog::RefreshItemMark()
{
if (m_pItemUnitRenderer != NULL)
{
m_pItemUnitRenderer->RefreshItemMark();
}
}
void InventoryDialog::SetInventoryMouseOverType(const eMOUSE_OVER_TYPE mouse_over_type)
{
m_MouseOverObject.eMouseOverType = mouse_over_type;
}
//-------------------------------------------------------------------------------------------
/**
*/
void InventoryDialog::InitDlgShowNHide(CCtrlButtonWZ* pCtrlBtnLock, CCtrlButtonWZ* pCtrlBtnUnlock)
{
#ifdef _GS_GSP_REMOVE_LOCKBTN_
//락버튼 없애기
pCtrlBtnLock->ShowWindowWZ(WZ_HIDE);
pCtrlBtnUnlock->ShowWindowWZ(WZ_HIDE);
#else
PLAYERINFO_FOR_PACKET::eINVEN_LOCK_MODE InventoryLockState = xGetHeroData()->GetInventoryLockState();
if( InventoryLockState == PLAYERINFO_FOR_PACKET::DISABLEDnEXIST )
{
pCtrlBtnLock->ShowWindowWZ(WZ_SHOW);
pCtrlBtnUnlock->ShowWindowWZ(WZ_HIDE);
}
else
{
pCtrlBtnUnlock->ShowWindowWZ(WZ_SHOW);
pCtrlBtnLock->ShowWindowWZ(WZ_HIDE);
}
#endif//_GS_GSP_REMOVE_LOCKBTN_
}
//-------------------------------------------------------------------------------------------
/**
*/
void InventoryDialog::SetInventoryLockState( PLAYERINFO_FOR_PACKET::eINVEN_LOCK_MODE iInventoryLockState )
{
GetManager()->SetInventoryLockState( iInventoryLockState );
InitTitleByLockState(m_TxtCtrlTitle, m_pCtrlBtnLock[eINVENTORY_LOCK_STATE_LOCK],
m_pCtrlBtnLock[eINVENTORY_LOCK_STATE_UNLOCK]);
if (m_pExtendInventoryDialog != NULL)
{
m_pExtendInventoryDialog->InitTitleByLockState();
}
}
//-------------------------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::ClickETCBtn(POSTYPE pos)
{
if (MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit)
{
if (MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit->m_isDiv)
{
if (pos < INVEN_CHECK_1_PAGE || pos > INVEN_CHECK_CHARGE_5_PAGE)
{
UpdatePage();
return;
}
}
}
switch(pos)
{
case INVEN_CHECK_1_PAGE:
case INVEN_CHECK_2_PAGE:
case INVEN_CHECK_3_PAGE:
case INVEN_CHECK_4_PAGE:
case INVEN_CHECK_5_PAGE:
{
m_eCurInvenContainer = INVENTORY;
POSTYPE TempPos = pos - INVEN_CHECK_1_PAGE;
m_iClickedIndexTab = TempPos;
ClickCheckButton(m_iClickedIndexTab );
if (m_iPrevClickedIndexTab == m_iClickedIndexTab)
{
return;
}
m_TabNum = m_iClickedIndexTab * INVEN_MAX_SLOT;
ReFreshRenderSlot();
}
break;
case INVEN_CHECK_CHARGE_1_PAGE:
case INVEN_CHECK_CHARGE_2_PAGE:
case INVEN_CHECK_CHARGE_3_PAGE:
case INVEN_CHECK_CHARGE_4_PAGE:
case INVEN_CHECK_CHARGE_5_PAGE:
{
POSTYPE TempPos = pos - INVEN_CHECK_1_PAGE;
ClickCheckChargeBtn(TempPos);
}
break;
case INVEN_BT_OPEN_EVENT:
case INVEN_FLASH_BT_OPEN_EVENT:
{
EventInventoryDialog * pEventInventory = GET_CAST_DIALOG( EventInventoryDialog, IM_INVENTORY_MANAGER::EVENTINVEN_DLG );
if ( pEventInventory )
{
if ( !pEventInventory->GetPacketStatus() )
{
// 패킷처리가 다 끝난 상황이다.
pEventInventory->SendRequestFetchEventItem();
}
}
}
break;
case INVEN_BT_WASTE_BASKET:
{
EnableWasteBasket();
}
break;
case INVEN_BT_UNLOCK:
{
int iStrIndex = 0;
PLAYERINFO_FOR_PACKET::eINVEN_LOCK_MODE InventoryLockState = xGetHeroData()->GetInventoryLockState();
if( InventoryLockState == PLAYERINFO_FOR_PACKET::ENABLEnEMPTY)
{ // 5585 인벤토리와 보조창고 보호 기능을 사용하시겠습니까? 비밀번호를 설정할 경우, 게임 종료 시 자동 잠금 상태로 변경됩니다.
iStrIndex = 5585;
}
else
{ // 5582 인벤토리와 보조 창고를 잠금 상태로 변경하시겠습니까?
iStrIndex = 5582;
}
if (GetManager() != NULL)
{
GetManager()->PasswordLockingSyn(iStrIndex);
}
}
break;
case INVEN_BT_LOCK:
{
if (GetManager() != NULL)
{
// 5583 인벤토리와 보조 창고를 열림 상태로 변경하시겠습니까?
GetManager()->PasswordLockingSyn(5583);
}
}
break;
#ifdef _JBH_MOD_MONEY_OUTPUT
case INVEN_TEXT_MONEY:
{
m_bCkickMoney = TRUE;
}
break;
#endif
case INVEN_PERSONAL_WAYPOINT_BTN:
{
if (GetManager() != NULL)
{
GetManager()->ToggleWayPointInvenDlg();
}
}
break;
case INVEN_BT_SETTING:
{ // 인벤토리 설정창을 연다
if (GetManager() != NULL)
{
GetManager()->ToggleFilterInvenDlg();
}
}
break;
case INVEN_BT_EXTEND:
{ // 인벤토리 확장창을 연다, 자신은 닫는다.
if (GetManager() != NULL)
{
GetManager()->ToggleExtendInvenDlg();
}
}
break;
case INVEN_BT_EXIT:
{
ShowDialog(FALSE);
}
break;
}
}
//----------------------------------------------------------------------------
/**
*/
void InventoryDialog::SetPasswordDlg(int iStringTableNum, int iPasswordDlgState)
{
int iMinCount = 0;
int iMaxCount = MAX_SSN_COUNT;
if(iPasswordDlgState == eInventoryDlgState_Setting_SSN || iPasswordDlgState == eInventoryDlgState_Check_Clear)
{
iMinCount = 0;
iMaxCount = MAX_SSN_COUNT;
}
else
{
iMinCount = 4;
iMaxCount = MAX_WAREHOUSE_INVENTORY_PWD_LENGTH;
}
GetManager()->SetPasswordState(iPasswordDlgState);
BOOL showPassChgBtn = TRUE;
showPassChgBtn = ( GetManager()->GetInventoryLockState() & MSG_CG_WAREHOUSE_START_ACK::DISABLED );
uiPasswordMan* pPasswordMan =
static_cast<uiPasswordMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PASSWORD));
assert (pPasswordMan);
if(pPasswordMan)
{
pPasswordMan->PasswordDlg(iStringTableNum, GlobalFunc::_fn_uiInvenPassword, iMinCount, iMaxCount, showPassChgBtn, ePassWordCalledState_Inven);
}
}
//-------------------------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::DoubleClickSlotBtn(POSTYPE realpos)
{
TCHAR szMessage[INTERFACE_STRING_LENGTH];
if (IsEmpty(realpos))
{
return;
}
if (MouseHandler::Instance()->GetMouseState() == MouseHandler::CRYSTALIZATION)
{
// 결정화 상태일때는 더블클릭을 막는다.
return;
}
//POSTYPE realpos = GetRealSlotPos(pos);
SCItemSlot & rItemSlot = (SCItemSlot &)GetSlot(realpos);
// 더블클릭의로 에테리아 조합하기(반드시 슬롯아이템정보를 참조해야함!)
if (rItemSlot.IsEtheriaItem())
{
MouseHandler::Instance()->SetMouseState(MouseHandler::ETHERIA_COMBINATION);
MouseHandler::Instance()->SetPendingUseChargeItemPos(realpos);
MouseHandler::Instance()->RollbackItemAtHand();
keyMsg msg;
ZeroMemory(&msg,sizeof(msg));
msg.dwType=eDoType_Etheria_Combine;
msg.DoSomething=GlobalFunc::DoEtheriaCombination;
g_KeyQueueManager.PushBack(msg);
//6100:에테리아를 조합할 아이템을 클릭해주세요
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, g_InterfaceManager.GetInterfaceString(6100));
}
switch (rItemSlot.GetItemInfo()->m_wType)
{
case eITEMTYPE_ENCHANT:
{
#ifdef __NA_001358_ENCHANT_UNIFICATION
// 인스턴스 인챈트 작업
// 사용하는 보석 저장
uiEnchantMan* pUIMan = GET_DIALOG_MANAGER(uiEnchantMan, UIMAN_ENCHANT);
if( pUIMan )
{
MouseHandler::Instance()->RollbackItemAtHand();
MouseHandler::Instance()->SetMouseState( MouseHandler::ENCHANT );
pUIMan->SetInstantEnchantPos(realpos);
// 인챈트할 아이템을 선택하십시오.
g_InterfaceManager.GetInterfaceString( 721, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
keyMsg msg;
ZeroMemory(&msg, sizeof(msg));
msg.DoSomething = GlobalFunc::DoInstantEnchantCancle;
msg.dwType = eDoType_dialog_InstantEnchant_Cancle;
g_KeyQueueManager.PushBack(msg);
}
#endif // __NA_001358_ENCHANT_UNIFICATION
}
break;
case eITEMTYPE_CUBE:
{
uiItemCube* dialog = GET_CAST_DIALOG(uiItemCube, IM_ITEM_COMPOSITE_MANAGER::ITEM_CUBE);
if (dialog)
{
if (dialog->IsActivated())
{
if (realpos != dialog->cube_position())
{
dialog->ShowInterface(FALSE);
}
else
{
return;
}
}
dialog->ShowInterface(TRUE);
ItemManager::Instance()->SetItemLock(SI_INVENTORY, realpos, true);
dialog->SetCubeItemPosition(realpos);
MouseHandler::Instance()->RollbackItemAtHand();
}
}
break;
#ifdef _20220329_ADD_EQU_RECOVERY
case eITEMTYPE_EQU_RECOVERY:
{
uiItemCube* dialog = GET_CAST_DIALOG(uiItemCube, IM_ITEM_COMPOSITE_MANAGER::ITEM_CUBE);
if (dialog)
{
if (dialog->IsActivated())
{
if (realpos != dialog->cube_position())
{
dialog->ShowInterface(FALSE);
}
else
{
return;
}
}
dialog->ShowInterface(TRUE);
ItemManager::Instance()->SetItemLock(SI_INVENTORY, realpos, true);
dialog->SetCubeItemPosition(realpos);
MouseHandler::Instance()->RollbackItemAtHand();
}
}
break;
#endif
case eITEMTYPE_SOCKET_ZARD:
{
// 소켓 재료.
MouseHandler::Instance()->SetMouseState( MouseHandler::SOCKET_FILL );
MouseHandler::Instance()->SetCrystalPos(realpos);
// 소켓 옵션을 채울 아이템을 클릭하세요.
g_InterfaceManager.GetInterfaceString( eST_SELECT_ITEM_FOR_SOCKET_OPTION, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
MouseHandler::Instance()->RollbackItemAtHand();
}
break;
case eITEMTYPE_SOCKET_ZARD_RINGS:
{
// 소켓 재료.
MouseHandler::Instance()->SetMouseState( MouseHandler::SOCKET_FILL );
MouseHandler::Instance()->SetCrystalPos(realpos);
// 소켓 옵션을 채울 아이템을 클릭하세요.
g_InterfaceManager.GetInterfaceString( eST_SELECT_ITEM_FOR_SOCKET_OPTION, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
MouseHandler::Instance()->RollbackItemAtHand();
}
break;
case eITEMTYPE_SOCKET_IDENTIFY: //소켓 확인 아이템
{ // 소켓 확인 재료.
MouseHandler::Instance()->SetSocketIdentifyState();
MouseHandler::Instance()->SetPendingUseChargeItemPos(realpos);
// 6483:소켓 등급을 확인하고 싶은 아이템을 클릭하세요
g_InterfaceManager.GetInterfaceString(6483, szMessage, INTERFACE_STRING_LENGTH);
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );
MouseHandler::Instance()->RollbackItemAtHand();
}
break;
case eITEMTYPE_STAT_CHANGE: //헤르메시즘의 성서(랜덤형/고정형)
{ // 헤르메시즘 아이템
MouseHandler::Instance()->SetRecreateSocketState();
MouseHandler::Instance()->SetPendingUseChargeItemPos(realpos);
// 6483:소켓 등급을 확인하고 싶은 아이템을 클릭하세요
/*g_InterfaceManager.GetInterfaceString(6483, szMessage, INTERFACE_STRING_LENGTH);
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );*/
MouseHandler::Instance()->RollbackItemAtHand();
}
break;
case eITEMTYPE_SOCKET_CREATE: //xiaomi add RINGS socket
{ // 헤르메시즘 아이템
MouseHandler::Instance()->SetRecreateSocketState();
MouseHandler::Instance()->SetPendingUseChargeItemPos(realpos);
// 6483:소켓 등급을 확인하고 싶은 아이템을 클릭하세요
/*g_InterfaceManager.GetInterfaceString(6483, szMessage, INTERFACE_STRING_LENGTH);
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage );*/
MouseHandler::Instance()->RollbackItemAtHand();
}
break;
case eITEMTYPE_CRYSTAL:
{
sITEMCOMPOSITE * pInfo = ItemCompositeParser::Instance()->GetCompositeInfo(eITEMCOPOSITE_EXTRASTONE_USE);
if ( pInfo &&
(SLOTCODE)rItemSlot.GetCode() == pInfo->m_sCompositeMaterials[0].m_dwCompositeMaterialCode )
{
// 엑스트라 스톤 사용하기 위한 재료
MouseHandler::Instance()->SetMouseState( MouseHandler::EXTRASTONE_USE );
MouseHandler::Instance()->SetCrystalPos(realpos);
// 엑스트라 스톤을 사용할 아이템을 클릭하세요.
g_InterfaceManager.GetInterfaceString( eST_SELECT_EXTRASTON_ITEM_CLICK, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage );
MouseHandler::Instance()->RollbackItemAtHand();
}
}
break;
case eITEMTYPE_SOCKETEXTRACT:
{
MouseHandler::Instance()->SetMouseState( MouseHandler::SOCKET_REMOVE );
MouseHandler::Instance()->SetPendingSocketRemovePos(realpos);
MouseHandler::Instance()->SetPendingSocketItemPos(realpos);
//5864 소켓 옵션을 제거할 아이템을 선택해주세요
g_InterfaceManager.GetInterfaceString( 5864 , szMessage , INTERFACE_STRING_LENGTH);
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szMessage );
MouseHandler::Instance()->RollbackItemAtHand();
}
break;
case eITEMTYPE_HAMMER_OF_ALCHEMIST:
{
MouseHandler::Instance()->SetMouseState( MouseHandler::REPAIR_LIMITED);
MouseHandler::Instance()->SetPendingUseChargeItemPos(realpos);
MouseHandler::Instance()->RollbackItemAtHand();
keyMsg msg;
ZeroMemory(&msg, sizeof(msg));
msg.DoSomething = GlobalFunc::DoRepairLimitedCancle;
msg.dwType = eDoType_Repair_Limited_Cancle;
g_KeyQueueManager.PushBack(msg);
}
break;
case eITEMTYPE_ETHER_DEVICE:
{
MouseHandler::Instance()->SetMouseState(MouseHandler::ETHER_DEVICE_FILL);
MouseHandler::Instance()->SetPendingUseChargeItemPos(realpos);
MouseHandler::Instance()->RollbackItemAtHand();
//6128 에테르 방출장치를 장착할 아이템을 선택하세요.
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, g_InterfaceManager.GetInterfaceString(6128) );
}
break;
default:
break;
}
}
//-------------------------------------------------------------------------------------------
/** 캐시아이템 슬롯 클릭시 처리
*/
VOID InventoryDialog::ClickCheckChargeBtn(POSTYPE pos)
{
m_eCurInvenContainer = INVENTORY;
if ( !g_pHero )
{
ClickCheckButton(m_iPrevClickedIndexTab );
return;
}
if ( pos >= g_pHero->GetCharInfo()->m_ExtraInventoryTabCount + MAX_INVENTORY_TAB_NUM)
{
// 상용화 아이템을 구입하세요.
// 현재는 사용할수 없는 텝입니다.
ClickCheckButton(m_iPrevClickedIndexTab );
//7018 해당 인벤토리를 사용할 수 없습니다. 원정용 가방을 사용하셔야 합니다.
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceString(7018, szMessage, INTERFACE_STRING_LENGTH);
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
return;
}
m_iClickedIndexTab = pos;
ClickCheckButton(m_iClickedIndexTab );
if (m_iPrevClickedIndexTab == m_iClickedIndexTab)
{
return;
}
m_TabNum = m_iClickedIndexTab * INVEN_MAX_SLOT;
ReFreshRenderSlot();
//// 특정 패킷을 보내서 정보를 받아온 상태라면 바로 갱신.
//// 그러기 위해서는 특정 정보에 대해서 값을 받아왔는지 알아오는 길을 알아야한다.
}
VOID InventoryDialog::ReceivedChargeInfo(POSTYPE pos)
{
CHARGE_CACHE_INFO_ITR itr = m_CharCacheInfoMap.find( pos );
if ( itr == m_CharCacheInfoMap.end() )
{
m_CharCacheInfoMap.insert(CHARGE_CACHE_INFO_PAIR(pos, eCHARGE_CACHE_TRY_REQUEST_INFO));
}
else
{
itr->second = eCHARGE_CACHE_TRY_REQUEST_INFO;
eCHARGE_CACHE_TYPE eTestValue = itr->second;
}
m_iClickedIndexTab = pos;
ClickCheckButton(m_iClickedIndexTab );
if (m_iPrevClickedIndexTab == m_iClickedIndexTab)
{
return;
}
m_TabNum = m_iClickedIndexTab * INVEN_MAX_SLOT;
ReFreshRenderSlot();
}
//-------------------------------------------------------------------------------------------
/** 잔상문제 관련 발생시 정보를 알려주기 위한 함수.
*/
VOID
InventoryDialog::CheckValidInsertWithNotice(POSTYPE pos)
{
TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,};
if ( !IsEmpty(pos) )
{
//5150 %d번째 슬롯에 중복 추가되었습니다. 현재 상황에 대해 스크린샷을 첨부하여 운영팀에게 자세한 내용을 보내주시기 바랍니다.
g_InterfaceManager.GetInterfaceString( 5150 , szMessage ,INTERFACE_STRING_LENGTH);
GlobalFunc::OutputMsg_Error(eOUTPUT_MSG_TOP_SHOW, szMessage, pos);
}
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::NetworkProc( MSG_BASE * pMsg )
{
if ( pMsg->m_byCategory == CG_ITEM )
{
switch ( pMsg->m_byProtocol )
{
case CG_ITEM_INVENTORY_PWD_LOCKING_ACK:
{
MSG_CG_ITEM_INVENTORY_PWD_LOCKING_ACK* pRecvMsg = (MSG_CG_ITEM_INVENTORY_PWD_LOCKING_ACK *)pMsg;
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0, };
switch( pRecvMsg->m_byRetCode )
{
case MSG_CG_ITEM_INVENTORY_PWD_LOCKING_ACK::RET_SUCCESS_LOCKED:
{
SetInventoryLockState(PLAYERINFO_FOR_PACKET::DISABLEDnEXIST);
uiSystemMan* pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
// 인벤토리와 보조 창고가 잠금 상태로 변경되었습니다.
g_InterfaceManager.GetInterfaceString( 5574, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage, NULL);
}
GetManager()->ClearPassword();
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_LOCKING_ACK::RET_NEED_PWD_FOR_LOCKING:
{
GetManager()->Send_CG_ITEM_INVENTORY_PWD_SETTING_SYN(MSG_CG_ITEM_INVENTORY_PWD_SETTING_SYN::SYNC_FIRST);
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_LOCKING_ACK::RET_NEED_PWD_FOR_UNLOCKING:
{
GetManager()->Send_CG_ITEM_INVENTORY_PWD_CHECK_SYN(MSG_CG_ITEM_INVENTORY_PWD_CHECK_SYN::SYNC_FIRST);
}
break;
}
}
break;
case CG_ITEM_INVENTORY_PWD_LOCKING_NAK:
{
MSG_CG_ITEM_INVENTORY_PWD_LOCKING_NAK* pRecvMsg = (MSG_CG_ITEM_INVENTORY_PWD_LOCKING_NAK *)pMsg;
GetManager()->ClearPassword();
ItemManager::Instance()->NoticeReasonItemErrorCode(pRecvMsg->m_byErrCode);
}
break;
case CG_ITEM_INVENTORY_PWD_CHECK_ACK:
{
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0, };
MSG_CG_ITEM_INVENTORY_PWD_CHECK_ACK* pRevMsg = (MSG_CG_ITEM_INVENTORY_PWD_CHECK_ACK *)pMsg;
GetManager()->ClearPassword();
switch(pRevMsg->m_byRetCode)
{
case MSG_CG_ITEM_INVENTORY_PWD_CHECK_ACK::RET_SUCCESS:
{
SetInventoryLockState(PLAYERINFO_FOR_PACKET::ENABLEnEXIST);
uiSystemMan* pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
// 5576 인벤토리와 보조 창고가 열림 상태로 변경되었습니다.
g_InterfaceManager.GetInterfaceString( 5576, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage, NULL);
}
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_CHECK_ACK::RET_INVALID_PWD:
{
uiSystemMan* pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
GetManager()->SetPasswordState(eInventoryDlgState_Check_Unlock);
// 비밀번호가 틀렸습니다.
g_InterfaceManager.GetInterfaceString( 5555, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage, GlobalFunc::_fn_uiInvenPassword_invalidPassword);
}
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_CHECK_ACK::RET_NEED_PWD:
{
// 비밀번호를 입력해주세요
SetPasswordDlg(5551, eInventoryDlgState_Check_Unlock);
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_CHECK_ACK::RET_NEED_SSN:
{
// 주민등록번호 뒷자리 입력
SetPasswordDlg(5579, eInventoryDlgState_Check_Clear);
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_CHECK_ACK::RET_INVALID_SSN:
{
uiSystemMan* pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
GetManager()->SetPasswordState(eInventoryDlgState_Check_Clear);
// 주민등록번호가 일치하지 않습니다.
g_InterfaceManager.GetInterfaceString( 5845, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage, GlobalFunc::_fn_uiInvenPassword_invalidSSN);
}
}
break;
default:
break;
}
}
break;
case CG_ITEM_INVENTORY_PWD_SETTING_ACK:
{
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0, };
MSG_CG_ITEM_INVENTORY_PWD_SETTING_ACK * pRecvMsg = (MSG_CG_ITEM_INVENTORY_PWD_SETTING_ACK *)pMsg;
switch(pRecvMsg->m_byRetCode)
{
case MSG_CG_ITEM_INVENTORY_PWD_SETTING_ACK::RET_FAIL:
case MSG_CG_ITEM_INVENTORY_PWD_SETTING_ACK::RET_CANCELED:
GetManager()->ClearPassword();
break;
case MSG_CG_ITEM_INVENTORY_PWD_SETTING_ACK::RET_SUCCESS:
{
GetManager()->ClearPassword();
uiSystemMan* pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
// 비밀번호가 설정되었습니다.
g_InterfaceManager.GetInterfaceString( 5556, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage, NULL);
}
SetInventoryLockState(PLAYERINFO_FOR_PACKET::ENABLEnEXIST);
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_SETTING_ACK::RET_NEED_SSN:
{
// 주민등록번호 뒷자리 입력
SetPasswordDlg(5579, eInventoryDlgState_Setting_SSN);
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_SETTING_ACK::RET_INVALID_SSN:
{
uiSystemMan* pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
GetManager()->SetPasswordState(eInventoryDlgState_Setting_SSN);
// 주민등록번호가 일치하지 않습니다.
g_InterfaceManager.GetInterfaceString( 5845, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage, GlobalFunc::_fn_uiInvenPassword_invalidSSN);
}
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_SETTING_ACK::RET_NEED_PWD:
{
// 비밀번호를 입력해 주세요
SetPasswordDlg(5551, eInventoryDlgState_Setting_PasswordCmp);
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_SETTING_ACK::RET_INVALID_PWD:
{
uiSystemMan* pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
GetManager()->SetPasswordState(eInventoryDlgState_Lock);
// 비밀번호가 틀렸습니다.
g_InterfaceManager.GetInterfaceString( 5555, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage, GlobalFunc::_fn_uiInvenPassword_invalidPassword);
}
}
break;
case MSG_CG_ITEM_INVENTORY_PWD_CHECK_ACK::RET_SUCCESS_CLEAR:
{
SetInventoryLockState(PLAYERINFO_FOR_PACKET::ENABLEnEMPTY);
uiSystemMan* pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
// 잠금 기능을 [사용 안 함]으로 변경하였습니다.
g_InterfaceManager.GetInterfaceString( 5577, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage, NULL);
}
}
break;
}
}
break;
case CG_ITEM_INVENTORY_PWD_SETTING_NAK:
{
GetManager()->ClearPassword();
}
break;
}
}
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::MouseOver_MsgProc( SI_MESSAGE * pMessage )
{
switch( pMessage->eResultMsg )
{
case RT_MSG_MOUSEOVER:
{
POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID );
POSTYPE RelativePos = GetRealSlotPos(pos);
// 0~ INVEN_MAX_SLOT 까지 아이템 정보를 보여준다.
if (RelativePos < this->GetMaxSlotNum() &&
pos >= 0 && pos < INVEN_MAX_SLOT)
{
MouseOverProcess(RelativePos);
}
else
{
m_iTooltipStringCode = getTooltipString(pos);
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
}
}
break;
}
}
//----------------------------------------------------------------------------
/**
*/
void InventoryDialog::MouseOverProcess(POSTYPE RelativePos)
{
if (!IsEmpty(RelativePos))
{
SCSlot & rSlot = GetSlot( RelativePos );
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_SLOT;
m_MouseOverObject.pSlot = &rSlot;
}
else
{
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
}
}
//----------------------------------------------------------------------------
/**
*/
POSTYPE
InventoryDialog::getCtrlIDToPos( WzID wzId )
{
for( POSTYPE i = 0 ; i < INVEN_MAX ; ++i )
{
if( m_wzId[i] == wzId )
{
return i;
}
}
return INVEN_MAX;
}
//----------------------------------------------------------------------------
/**
*/
CControlWZ *
InventoryDialog::getControl( POSTYPE AtPos )
{
if ( AtPos >= INVEN_MAX )
{
return NULL;
}
return GetControlWZ( m_wzId[ AtPos % INVEN_MAX ] );
}
//----------------------------------------------------------------------------
/**
*/
POSTYPE
InventoryDialog::GetRealSlotPos( POSTYPE pos )
{
return pos + m_TabNum;
}
//----------------------------------------------------------------------------
/**
*/
POSTYPE
InventoryDialog::GetRelativeSlotPos( POSTYPE pos )
{
return (pos % INVEN_MAX_SLOT);
}
//----------------------------------------------------------------------------
/**
*/
VOID
InventoryDialog::UpdateQuickPos()
{
return;
}
//----------------------------------------------------------------------------
/**
*/
void InventoryDialog::updateToolTip()
{
int iMouseX = Mouse::Instance()->GetMouseX();
int iMouseY = Mouse::Instance()->GetMouseY();
// 스킵처리
// 인터페이스에서 Dialog 바탕에서는 Mouse Over가 오지 않는다.
bool bMouseOver = false;
for (POSTYPE a = 0; a < INVEN_MAX; a++)
{
CControlWZ * pControl = getControl(a);
if(pControl)
{
RECT rc = pControl->GetSizeRect();
if (rc.left <= iMouseX && rc.right >= iMouseX)
{
if (rc.top <= iMouseY && rc.bottom >= iMouseY)
{
bMouseOver = true;
break;
}
}
}
}
ProcessToolTip(bMouseOver, GetDialogKey());
}
void InventoryDialog::ProcessToolTip(bool bMouseOver, WzID dialog_key)
{
if (!bMouseOver)
{
m_iTooltipStringCode = 0;
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
return;
}
else
{
if ( this->m_MouseOverObject.eMouseOverType != eMOUSE_OVER_MAX)
{
if ( eMOUSE_OVER_SLOT == m_MouseOverObject.eMouseOverType )
{
uiToolTipMan* pUIMan = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP);
if(pUIMan)
{
if (MouseHandler::Instance()->GetMouseState() == MouseHandler::CRYSTALIZATION)
{
if (m_MouseOverObject.pSlot->GetSlotType() == ST_ITEM)
{
pUIMan->RegisterTooltipCrystalization(static_cast<SCItemSlot*>(m_MouseOverObject.pSlot));
}
}
else
{
pUIMan->RegisterSlotInfoTooltip(m_MouseOverObject.pSlot);
}
pUIMan->SetTooltipDialogID(dialog_key);
}
if( GetAsyncKeyState( VK_CONTROL ) & 0x8000 )
{
uiToolTipMan* pUIMan2 = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager( UIMAN_TOOLTIP2 );
if( pUIMan2 )
{
pUIMan2->RegisterHeroItemInfoTooltipFromSlot( m_MouseOverObject.pSlot );
}
}
MouseHandler::MOUSE_STATE eState = MouseHandler::Instance()->GetMouseState();
if(MouseHandler::GUILD_WITHDRAW != eState &&
MouseHandler::GUILD_DEPOSIT != eState &&
MouseHandler::WITHDRAW != eState &&
MouseHandler::DEPOSIT != eState )
{
CursorChangeTransact::Instance()->ChangeTranaction( MouseCursor::eMouseCursor_Cursor_Cancle );
}
}
}
else if (m_iTooltipStringCode == 11063)
{
/*개인 웨이포인트(%s)\n\n
룬스톤을 활성화하면 남은 사용기간 동안 현재 위치를 저장하거나,
저장해 놓은 위치로 순간이동할 수 있습니다.*/
// 개인 웨이포인트 툴팁
uiToolTipMan* pTooltipMan = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP);
#ifdef _NA_006643_20130417_UI_OUT_WINDOW_BREAK
if(!pTooltipMan)
{
return;
}
TCHAR szString[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceStringFormat( szString,
INTERFACE_STRING_LENGTH,
m_iTooltipStringCode,
m_hotkey[1]);
std::vector<util::_tstring> vstrMsg;
vstrMsg.clear();
GlobalFunc::ProcessWordWrapByFontSize(&vstrMsg,
szString,
StrToWzID("mn12"),
_tcslen(szString),
200);
for (size_t i=0; i<vstrMsg.size(); ++i)
{
TCHAR *pStr = const_cast<TCHAR *>(vstrMsg[i].c_str());
pTooltipMan->RegisterTooltip( pStr,
-1,
23,
StrToWzID("mn12"),
WzColor_RGBA( 255, 255, 255, 255 ),
TOOLTIP_BG_WZCOLOR,
0);
pTooltipMan->SetTooltipDialogID(dialog_key);
}
#else
uiPersonalWayPointMan* pPersonalWayPointMan = GET_DIALOG_MANAGER(uiPersonalWayPointMan, UIMAN_PERSONAL_WAYPOINT);
if (pTooltipMan && pPersonalWayPointMan)
{
// 11061 - 이용 가능 , 11062 - 이용 불가능
int nEnableCode = (pPersonalWayPointMan->GetActiveWaypointItem() != NULL) ? 11061 : 11062;
pTooltipMan->RegisterPersonalWaypoint(nEnableCode);
pTooltipMan->SetTooltipDialogID(dialog_key);
}
#endif
}
#ifdef _NA_006643_20130417_UI_OUT_WINDOW_BREAK
else if (m_iTooltipStringCode == 5589)
{
/*인벤토리 창 확대/축소(%s)\n\n
내가 소유한 아이템을 한눈에 볼 수 있도록 창의 확대/축소가 가능하며,
소유한 아이템들을 자신이 원하는 위치에 쉽게 이동 시킬 수 있습니다.*/
uiToolTipMan* pTooltipMan = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP);
if(!pTooltipMan)
{
return;
}
TCHAR szString[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceStringFormat( szString,
INTERFACE_STRING_LENGTH,
m_iTooltipStringCode,
m_hotkey[0]);
std::vector<util::_tstring> vstrMsg;
vstrMsg.clear();
GlobalFunc::ProcessWordWrapByFontSize(&vstrMsg,
szString,
StrToWzID("mn12"),
_tcslen(szString),
200);
for (size_t i=0; i<vstrMsg.size(); ++i)
{
TCHAR *pStr = const_cast<TCHAR *>(vstrMsg[i].c_str());
pTooltipMan->RegisterTooltip( pStr,
-1,
23,
StrToWzID("mn12"),
WzColor_RGBA( 255, 255, 255, 255 ),
TOOLTIP_BG_WZCOLOR,
0);
pTooltipMan->SetTooltipDialogID(dialog_key);
}
}
#endif
else if (m_iTooltipStringCode > 0)
{
uiToolTipMan* pUIMan = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP);
if(pUIMan)
{
pUIMan->RegisterTooltipForWareNInventoryLock(m_iTooltipStringCode);
pUIMan->SetTooltipDialogID(dialog_key);
}
}
}
}
//----------------------------------------------------------------------------
/**
*/
void InventoryDialog::SetbEventInventory(BOOL bVal)
{
m_bEventInventory = bVal;
if (m_pExtendInventoryDialog != NULL)
{
m_pExtendInventoryDialog->SetEventInvenState((bVal != FALSE));
}
}
void InventoryDialog::EnableWasteBasket()
{
if ( MouseHandler::THROW_WASTE_BASKET != MouseHandler::Instance()->GetMouseState() )
{
MouseHandler::Instance()->SetMouseState(MouseHandler::THROW_WASTE_BASKET);
// 큐에 휴지통정보를 넣는다.
keyMsg msg;
ZeroMemory(&msg,sizeof(msg));
msg.dwType=eDoType_dialog_delete_cancel;
msg.DoSomething=GlobalFunc::DoDeleteItemCancel;
g_KeyQueueManager.PushBack(msg);
}
}
#ifdef _NA_000000_20130114_RENEWER_UI
void InventoryDialog::UpdateExtraInventoryPage()
{
int useInventoryCount = g_pHero->GetCharInfo()->m_ExtraInventoryTabCount;
if (useInventoryCount != save_inventory_Extra_)
{
int Getsize = useInventoryCount - save_inventory_Extra_;
int ExtraCount = 0;
TCHAR isNum[3];
for (int index = save_inventory_Extra_Next_ ;
index < save_inventory_Extra_Next_+ Getsize ; ++index)
{
memset(isNum,0,sizeof(TCHAR)*3);
CControlWZ* TapAbleInvenExtra = getControl(INVEN_CHECK_CHARGE_1_PAGE + index);
if (TapAbleInvenExtra)
{
sprintf(isNum,"%d",(index+1)+MAX_INVENTORY_TAB_NUM);
TapAbleInvenExtra->EnableWindowWZ(true);
TapAbleInvenExtra->SetTextWZA(isNum);
}
++ExtraCount;
}
save_inventory_Extra_Next_ += ExtraCount;
save_inventory_Extra_ = useInventoryCount;
}
}
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
#ifdef _NA_006643_20130417_UI_OUT_WINDOW_BREAK
void InventoryDialog::CheckModifyOption()
{
HOT_KEY_FUNCTION_INDEX hotkey_func_index_[] =
{
//핫키와 ID가 매칭되게 넣는다
kModeChange_ExtendInventory_UI,
kOpen_personal_Warp_UI,
kKeyFunctionMax,
};
for (int i = 0 ; i < 2 ; ++i)
{
if(hotkey_func_index_[i] == kKeyFunctionMax)
{
continue;
}
KEY_BIND_PAIR_MAP::iterator found_itr =
HotKeyManager::Instance()->current_using_key_bind_info().key_bind_pair_map().find(hotkey_func_index_[i]);
KEY_BIND_PAIR temp_key_bind_pair = found_itr->second;
STLX_STRING hot_key_string;
DWORD string_code = 0;
HOT_KEY_CODE hot_ket_code(temp_key_bind_pair.GetHotKeyCode(KEY_BIND_PAIR::kMainHotKey));
if (hot_ket_code.key_code_ != 0)
{
if (hot_ket_code.ctrl_key_ == 1)
{
hot_key_string += g_InterfaceManager.GetInterfaceString(8218);
hot_key_string += " + ";
}
if (hot_ket_code.alt_key_ == 1)
{
hot_key_string += g_InterfaceManager.GetInterfaceString(8219);
hot_key_string += " + ";
}
if (hot_ket_code.shift_key_ == 1)
{
hot_key_string += g_InterfaceManager.GetInterfaceString(8217);
hot_key_string += " + ";
}
string_code = HotKeyInfoParser::Instance()->GetStringCodeByKeyCode(hot_ket_code.key_code_);
hot_key_string += g_InterfaceManager.GetInterfaceString(string_code);
}
else
{
continue;
}
//핫키 툴팁을 위해 사용할 툴팁넣기.
sprintf(m_hotkey[i],"%s",hot_key_string.c_str());
}
}
void InventoryDialog::ImpossibleCrystalizationItemIconDeActiveRender()
{
for (int i = 0; i < GetMaxSlotNum(); ++i)
{
bool is_active = true;
ItemUnitRenderer::RenderUnit * pRender = NULL;
SCItemSlot& rSlot = (SCItemSlot&)SCSlotContainer::GetSlot(i);
if (this->IsEmpty(i))
{
continue;
}
if (!rSlot.IsContainValidItem())
continue;
const BASE_ITEMINFO* selected_item_info_ptr = rSlot.GetItemInfo();
if (selected_item_info_ptr == NULL)
{
continue;
}
if (rSlot.CanUseMixture(MIXTURE_CRYSTALIZE) == false)
{
is_active = false;
}
#ifdef _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
SLOTCODE slot_code = ItemCrystalizeListParser::Instance()->GetCrystalizeCode(rSlot, rSlot.GetEnchant());
#else
SLOTCODE slot_code = ItemCrystalizeListParser::Instance()->GetCrystalizeCode(rSlot);
#endif // _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
if (slot_code == 0)
{
is_active = false;
}
sITEM_CRYSTALIZE_LIST* item_crystalize_list = ItemCrystalizeListParser::Instance()->GetCrystalizeListInfo(slot_code);
if (item_crystalize_list == NULL)
{
is_active = false;
}
if (is_active == false)
{
pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() );
if (pRender)
{
pRender->SetState(SLOT_RENDER_STATE_DEACTIVATED);
}
}
}
}
void InventoryDialog::RevertCrystalizationItemIconDeActiveRender()
{
for (int i = 0; i < GetMaxSlotNum(); ++i)
{
bool is_active = true;
ItemUnitRenderer::RenderUnit * pRender = NULL;
SCItemSlot& rSlot = (SCItemSlot&)SCSlotContainer::GetSlot(i);
if (this->IsEmpty(i))
{
continue;
}
if (!rSlot.IsContainValidItem())
continue;
const BASE_ITEMINFO* selected_item_info_ptr = rSlot.GetItemInfo();
if (selected_item_info_ptr == NULL)
{
continue;
}
pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() );
if (pRender)
{
pRender->SetState(SLOT_RENDER_STATE_ACTIVATED);
}
}
ItemCooltimeManager::Instance()->Release();
}
#ifdef _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
void InventoryDialog::ImpossibleAwakeningItemIonDeActiveRender()
{
for (int i = 0; i < GetMaxSlotNum(); ++i)
{
bool is_active = true;
ItemUnitRenderer::RenderUnit * pRender = NULL;
SCItemSlot& rSlot = (SCItemSlot&)SCSlotContainer::GetSlot(i);
if (this->IsEmpty(i))
{
continue;
}
if (!rSlot.IsContainValidItem())
continue;
const BASE_ITEMINFO* selected_item_info_ptr = rSlot.GetItemInfo();
if (selected_item_info_ptr == NULL)
{
continue;
}
RC::eITEM_RESULT result_code = RC_ITEM_FAILED;
uiEquipmentAwakeningDialog* equipment_awakening_dialog = static_cast<uiEquipmentAwakeningDialog*>(ItemManager::Instance()->GetItemContainerDialog(SI_EQUIPMENT_AWAKENING));
if ( equipment_awakening_dialog == NULL )
{
return;
}
if ( equipment_awakening_dialog->IsVisibleWindow() == FALSE )
{
return;
}
switch ( equipment_awakening_dialog->GetAwakeningUIMode() )
{
case uiEquipmentAwakeningDialog::AWAKENING_MODE_EQUIPMENT:
{
result_code = AwakeningInfoParser::Instance()->PermitEquipmentCheck(rSlot);
}
break;
case uiEquipmentAwakeningDialog::AWAKENING_MODE_MATERIAL:
{
SCItemSlot* equip_item = ItemManager::Instance()->GetInventoryItem( equipment_awakening_dialog->get_equip_item_pos_() );
if ( equip_item )
{
#ifdef _NA_008536_20151030_AWAKENING_MATERIAL_AMOUNT_ADD
result_code = AwakeningInfoParser::Instance()->PermitMaterialCheck( (*equip_item).GetCode(), rSlot.GetCode(), rSlot.GetNum());
#else
result_code = AwakeningInfoParser::Instance()->PermitMaterialCheck( (*equip_item).GetCode(), rSlot.GetCode());
#endif // _NA_008536_20151030_AWAKENING_MATERIAL_AMOUNT_ADD
if ( rSlot.IsShellItem() == true || rSlot.IsEtheriaItem() == true )
{
result_code = RC::RC_EQUIPMENT_AWAKENING_INVALID_MATERIAL_INFO;
}
}
}
break;
case uiEquipmentAwakeningDialog::AWAKENING_MODE_ADDITIVE:
{
SCItemSlot* equip_item = ItemManager::Instance()->GetInventoryItem( equipment_awakening_dialog->get_equip_item_pos_() );
SCItemSlot* material_item = ItemManager::Instance()->GetInventoryItem( equipment_awakening_dialog->get_material_item_pos_() );
if ( equip_item && material_item )
{
result_code = AwakeningInfoParser::Instance()->PermitAdditiveCheck( *equip_item, *material_item, rSlot);
}
}
break;
case uiEquipmentAwakeningDialog::AWAKENING_MODE_COMPLETE:
{
}
break;
}
if ( result_code != RC::RC_ITEM_SUCCESS )
{
is_active = false;
}
if (is_active == false)
{
pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() );
if (pRender)
{
pRender->SetState(SLOT_RENDER_STATE_DEACTIVATED);
}
}
}
}
void InventoryDialog::RevertAwakeningItemIconDeActiveRender()
{
for (int i = 0; i < GetMaxSlotNum(); ++i)
{
bool is_active = true;
ItemUnitRenderer::RenderUnit * pRender = NULL;
SCItemSlot& rSlot = (SCItemSlot&)SCSlotContainer::GetSlot(i);
if (this->IsEmpty(i))
{
continue;
}
if (!rSlot.IsContainValidItem())
continue;
const BASE_ITEMINFO* selected_item_info_ptr = rSlot.GetItemInfo();
if (selected_item_info_ptr == NULL)
{
continue;
}
pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() );
if (pRender)
{
pRender->SetState(SLOT_RENDER_STATE_ACTIVATED);
}
}
}
#endif // _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
#endif