968 lines
34 KiB
C++
968 lines
34 KiB
C++
#include "stdafx.h"
|
|
|
|
#include "KUIControlStatic.h"
|
|
#include "KUIControlButton.h"
|
|
#include "KUIControlGauge.h"
|
|
#include "KUIControlScroll.h"
|
|
//#include "KUIControlNumber.h"
|
|
#include "KUITabControl.h"
|
|
|
|
#include "KUIControlQJTV.h"
|
|
|
|
#include "SGameManager.h"
|
|
#include "SGameMessage.h"
|
|
//#include "SGameMessageUI.h"
|
|
#include "SUICreatureWnd.h"
|
|
#include "SUIDisplayInfo.h"
|
|
|
|
#include "SGameOption.h"
|
|
#include "SSummonSlotMgr.h"
|
|
#include "SInventoryMgr.h"
|
|
#include "SCreatureDB.h"
|
|
#include "SStringDB.h"
|
|
#include "SSkillDB.h"
|
|
#include "SItemDB.h"
|
|
#include "SSkillSlot.h"
|
|
|
|
#include "KDeviceManager.h"
|
|
#include "KUITextureManager.h"
|
|
#include <kfile/KFileManager.h>
|
|
#include "KResourceDX.h"
|
|
|
|
#include "KTGA_IO.h"
|
|
// 2010.05.10 - prodongi
|
|
#include "SCreatureEnhanceDB.h"
|
|
// 2010.05.11 - prodongi
|
|
#include <toolkit/XStringUtil.h>
|
|
//#include "SUIUtil.h"
|
|
|
|
namespace
|
|
{
|
|
const int c_nOffSetY = 12;
|
|
const int c_nOffSet = 12;
|
|
const int c_nMaxSlot = 6;
|
|
const int c_nDeltaX = 40;
|
|
const int c_nDeltaY = 65; // 2011.04.06 - servantes
|
|
int g_nMainCreatureID = 0; // 2011.05.20 - servantes
|
|
AR_HANDLE g_hMainCreature = NULL; // 2011.05.24 - servantes
|
|
bool c_bSelectLast = false; // 2011.06.02 - servantes
|
|
};
|
|
|
|
|
|
SUICreatureWnd::~SUICreatureWnd() // 2011.05.17 - servantes
|
|
{
|
|
GetGameOption().SetCreatureX( GetRect().left );
|
|
GetGameOption().SetCreatureY( GetRect().top );
|
|
}
|
|
|
|
bool SUICreatureWnd::InitControls( KPoint kPos )
|
|
{
|
|
SetCustomMovingRect( KRect( 0,0,92,20 ) ); // 타이틀 바 선택 영역, 이동위해 클릭 Area
|
|
SetResizeUnit( 2, 2, KSize(47, 90), KSize((GetRect().right-GetRect().left)*2, 300) );
|
|
|
|
KUIControlMultiIcon* pIcon = dynamicCast<KUIControlMultiIcon*>( GetChild( "creature_icon00" ) );
|
|
if( pIcon )
|
|
pIcon->SetIconLayer( 4 );
|
|
|
|
return SUIWnd::InitControls(kPos);
|
|
}
|
|
bool SUICreatureWnd::InitData( bool bReload )
|
|
{
|
|
m_bCreaturePage = true;
|
|
m_nSelctIndex = -1;
|
|
|
|
m_dwTime = 0;
|
|
m_dwStartTime = 0;
|
|
m_nProcessCount = 0;
|
|
|
|
SetChildShow( "creature_mouseover", false );
|
|
|
|
if( !bReload )
|
|
{
|
|
KUIControlMultiIcon* pIcon = NULL;
|
|
RECT rc; rc.top = c_nDeltaY; rc.left = 0; rc.right = 0; rc.bottom = c_nDeltaY;
|
|
for( int i = 0; i < c_nMaxSlot; i++ )
|
|
{
|
|
// CopyControl( CStringUtil::StringFormat("creature_bg%02d" , i).c_str(), CStringUtil::StringFormat("creature_bg%02d" , i+1).c_str(), rc );
|
|
// CopyControl( CStringUtil::StringFormat("creature_slot%02d" , i).c_str(), CStringUtil::StringFormat("creature_slot%02d" , i+1).c_str(), rc );
|
|
// CopyControl( CStringUtil::StringFormat("creature_level_font%02d" , i).c_str(), CStringUtil::StringFormat("creature_level_font%02d" , i+1).c_str(), rc );
|
|
CopyControl( CStringUtil::StringFormat("static_creature%02d" , i).c_str(), CStringUtil::StringFormat("static_creature%02d" , i+1).c_str(), rc );
|
|
CopyControl( CStringUtil::StringFormat("creature_icon%02d" , i).c_str(), CStringUtil::StringFormat("creature_icon%02d" , i+1).c_str(), rc );
|
|
pIcon = dynamicCast<KUIControlMultiIcon*>( GetChild( CStringUtil::StringFormat("creature_icon%02d" , i).c_str() ) );
|
|
if( pIcon )
|
|
pIcon->SetIconLayer( 4 );
|
|
|
|
CopyControl( CStringUtil::StringFormat("static_slot_number%02d" , i).c_str(), CStringUtil::StringFormat("static_slot_number%02d" , i+1).c_str(), rc );
|
|
CopyControl( CStringUtil::StringFormat("static_slot_time%02d" , i).c_str(), CStringUtil::StringFormat("static_slot_time%02d" , i+1).c_str(), rc );
|
|
CopyControl( CStringUtil::StringFormat("static_creature%02d_lv_value", i).c_str(), CStringUtil::StringFormat("static_creature%02d_lv_value", i+1).c_str(), rc );
|
|
CopyControl( CStringUtil::StringFormat("gauge_hp_creature%02d" , i).c_str(), CStringUtil::StringFormat("gauge_hp_creature%02d" , i+1).c_str(), rc );
|
|
CopyControl( CStringUtil::StringFormat("gauge_mp_creature%02d" , i).c_str(), CStringUtil::StringFormat("gauge_mp_creature%02d" , i+1).c_str(), rc );
|
|
CopyControl( CStringUtil::StringFormat("gauge_sp_creature%02d" , i).c_str(), CStringUtil::StringFormat("gauge_sp_creature%02d" , i+1).c_str(), rc );
|
|
// CopyControl( CStringUtil::StringFormat("creature_disable%02d" , i).c_str(), CStringUtil::StringFormat("creature_disable%02d" , i+1).c_str(), rc );
|
|
}
|
|
|
|
// SetChildAsTop( "creature_mouseclick" );
|
|
|
|
//슬롯 넘버
|
|
for( int i = 0; i < c_nMaxSlot; i++ )
|
|
{
|
|
SetChildCaption( CStringUtil::StringFormat("static_slot_number%02d" , i).c_str(), CStringUtil::StringFormat("<vcenter><hcenter>%s<size:8><#000000>%d", S(6425), i+1).c_str() );
|
|
SetChildAsTop( CStringUtil::StringFormat("static_slot_number%02d" , i).c_str() );
|
|
|
|
int nX = i%2;
|
|
int nY = i/2;
|
|
int nH = (i+1)/2 + (i+1)%2;
|
|
|
|
// 2011.04.06 - servantes
|
|
SetMovePos( CStringUtil::StringFormat("static_creature%02d" , i).c_str(), (nX * c_nDeltaX) + c_nOffSet + ((nX-1)*4), (nY * c_nDeltaY) + 20 + 5 + (nH * 2) );
|
|
SetMovePos( CStringUtil::StringFormat("creature_icon%02d" , i).c_str(), (nX * c_nDeltaX) + c_nOffSet + 3 + ((nX-1)*4), (nY * c_nDeltaY) + 28 + 7 + (nH * 2) );
|
|
SetMovePos( CStringUtil::StringFormat("static_slot_number%02d" , i).c_str(), (nX * c_nDeltaX) + c_nOffSet + 3 + ((nX-1)*4), (nY * c_nDeltaY) + 28 + 7 + (nH * 2) );
|
|
SetMovePos( CStringUtil::StringFormat("static_creature%02d_lv_value", i).c_str(), (nX * c_nDeltaX) + c_nOffSet + 11 + ((nX-1)*4), (nY * c_nDeltaY) + 28 + 7 + (nH * 2) );
|
|
SetMovePos( CStringUtil::StringFormat("static_slot_time%02d" , i).c_str(), (nX * c_nDeltaX) + c_nOffSet + 2 + ((nX-1)*4), (nY * c_nDeltaY) + 28 + 32 + (nH * 2) );
|
|
SetMovePos( CStringUtil::StringFormat("gauge_hp_creature%02d" , i).c_str(), (nX * c_nDeltaX) + c_nOffSet + 3 + ((nX-1)*4), (nY * c_nDeltaY) + 28 + 44 + (nH * 2) );
|
|
SetMovePos( CStringUtil::StringFormat("gauge_mp_creature%02d" , i).c_str(), (nX * c_nDeltaX) + c_nOffSet + 3 + ((nX-1)*4), (nY * c_nDeltaY) + 28 + 48 + (nH * 2) );
|
|
SetMovePos( CStringUtil::StringFormat("gauge_sp_creature%02d" , i).c_str(), (nX * c_nDeltaX) + c_nOffSet + 3 + ((nX-1)*4), (nY * c_nDeltaY) + 28 + 53 + (nH * 2) );
|
|
}
|
|
|
|
//rc.top = 0; rc.bottom = 0;
|
|
//CopyControl( "creature_mouseclick", "creature_mouseclick_new", rc );
|
|
//RemoveChild( GetChild("creature_mouseclick") );
|
|
}
|
|
|
|
// 2011.04.06 - servantes
|
|
m_pFormation[0] = dynamicCast<KUIControlStatic*>(GetChild( "formation_main" ));
|
|
if(NULL == m_pFormation[0]) return false;
|
|
|
|
m_pFormation[1] = dynamicCast<KUIControlStatic*>(GetChild( "formation_sub00" ));
|
|
if(NULL == m_pFormation[1]) return false;
|
|
|
|
RECT rc;
|
|
::SetRect(&rc, 0, 0, 0, 0);
|
|
m_pFormation[2] = dynamicCast<KUIControlStatic*>(CopyControl( "formation_sub00", "formation_sub01", rc ));
|
|
if(NULL == m_pFormation[2]) return false;
|
|
|
|
m_pFormation[3] = dynamicCast<KUIControlStatic*>(CopyControl( "formation_sub00", "formation_sub02", rc ));
|
|
if(NULL == m_pFormation[3]) return false;
|
|
|
|
m_pFormation[4] = dynamicCast<KUIControlStatic*>(CopyControl( "formation_sub00", "formation_sub03", rc ));
|
|
if(NULL == m_pFormation[4]) return false;
|
|
|
|
m_pFormation[5] = dynamicCast<KUIControlStatic*>(CopyControl( "formation_sub00", "formation_sub04", rc ));
|
|
if(NULL == m_pFormation[5]) return false;
|
|
|
|
m_pFormation[0]->SetShow( false );
|
|
m_pFormation[1]->SetShow( false );
|
|
m_pFormation[2]->SetShow( false );
|
|
m_pFormation[3]->SetShow( false );
|
|
m_pFormation[4]->SetShow( false );
|
|
m_pFormation[5]->SetShow( false );
|
|
|
|
return SUIWnd::InitData(bReload);
|
|
}
|
|
void SUICreatureWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd )
|
|
{
|
|
SUIWnd::OnNotifyUIWindowOpen(bOpen);
|
|
|
|
if( bOpen )
|
|
{
|
|
if(m_CreatureSlotMgr.GetEquipedCreatureCount() <= 0 )
|
|
{
|
|
//TODO : 하드 코딩
|
|
//기획팀의 요청으로 다이얼로그 박스 대신 시스템메시지로 표시
|
|
// m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(800), false ) );
|
|
m_pDisplayInfo->AddSystemMessage( S(800), 7 ); // You do not have any creatures
|
|
m_nCurCreatureCount = 0;
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE, false ) );
|
|
}
|
|
else
|
|
{
|
|
m_pGameManager->StartSound( "ui_popup_window01.wav" );
|
|
|
|
// 선택된 크리처가 없으면 첫번째 크리처를 선택한다.
|
|
if( m_CreatureSlotMgr.GetSelectedCreature() == 0 )
|
|
{
|
|
RequestSelectCreature(0);
|
|
}
|
|
|
|
RefreshSlot();
|
|
|
|
//막음 -N4- m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_FULLDOWN_CREATURE, false ) );
|
|
}
|
|
}
|
|
|
|
GetGameOption().SetCreatureOpen( bOpen );
|
|
}
|
|
void SUICreatureWnd::OnRefresh( SGameMessage* pMsg )
|
|
{
|
|
if( IsShow() )
|
|
RefreshSlot();
|
|
}
|
|
|
|
void SUICreatureWnd::MovePos(int x, int y)
|
|
{
|
|
KUIWnd::MovePos(x,y);
|
|
}
|
|
|
|
void SUICreatureWnd::Process(DWORD dwTime)
|
|
{
|
|
SUIWnd::Process( dwTime );
|
|
|
|
//대여 시간 처리
|
|
m_dwTime = dwTime;
|
|
|
|
if( (m_dwTime - m_dwStartTime) > 1000 )
|
|
{
|
|
m_dwStartTime = m_dwTime;
|
|
++m_nProcessCount;
|
|
|
|
if( m_nProcessCount >= 60 )
|
|
{
|
|
m_nProcessCount = 0;
|
|
//Refresh
|
|
|
|
for( int nIndex(0); c_nMaxSlot>nIndex; ++nIndex )
|
|
{
|
|
if( m_CreatureRemainTime[nIndex] )
|
|
{
|
|
int nRemainTime = m_InventoryMgr.GetLendingItemTime( m_CreatureRemainTime[nIndex] );
|
|
|
|
//대여 시간 표시
|
|
SetChildShow( CStringUtil::StringFormat("static_slot_time%02d" , nIndex).c_str(), true );
|
|
std::string StrTime = GetRemainTime(nRemainTime);
|
|
if( !StrTime.empty() )
|
|
SetChildCaption( CStringUtil::StringFormat("static_slot_time%02d", nIndex).c_str(), StrTime.c_str() );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
std::string SUICreatureWnd::GetRemainTime( int nRemainTime )
|
|
{
|
|
std::string StrTempTime = m_pDisplayInfo->GetTimeString( nRemainTime, 0, true ).c_str();
|
|
if( !StrTempTime.empty() )
|
|
return CStringUtil::StringFormat("<size:8>%s<outline><vcenter><right><#00fff6>%s", S(6425), StrTempTime.c_str() );
|
|
// return CStringUtil::StringFormat("<OUT>%s<outline><VCENTER><HCENTER><size:8><#00fff6>%s</OUT>", S(6425), StrTempTime.c_str() );
|
|
return "";
|
|
}
|
|
|
|
void SUICreatureWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam )
|
|
{
|
|
switch(nMessage)
|
|
{
|
|
case KUI_MESSAGE::KBUTTON_CLICK:
|
|
{
|
|
if( ::_stricmp( lpszControlID, "button_close" ) == 0 )
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE, false ) );
|
|
//막음 -N4- m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_FULLDOWN_CREATURE, false ) );
|
|
}
|
|
}
|
|
break;
|
|
case KUI_MESSAGE::KICON_CLICK:
|
|
{
|
|
m_pGameManager->StartSound( "ui_button_click.wav" );
|
|
|
|
for( int i = 0; i < c_nMaxSlot; i++ )
|
|
{
|
|
if( ::_stricmp( lpszControlID, CStringUtil::StringFormat("creature_icon%02d" , i).c_str() ) == 0 )
|
|
{
|
|
RequestSelectCreature(i);
|
|
|
|
if( GetGameOption().IsCreatureInfoOpen() )
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, false ) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_PAGE , false ) );
|
|
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, !m_bCreaturePage ) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_PAGE, m_bCreaturePage ) );
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
// MJ 2004/12/03 // 크리쳐 정보창 열기
|
|
case KUI_MESSAGE::KICON_DBLCLK:
|
|
{
|
|
for( int i = 0; i < c_nMaxSlot; i++ )
|
|
{
|
|
if( ::_stricmp( lpszControlID, CStringUtil::StringFormat("creature_icon%02d", i).c_str() ) == 0 )
|
|
{
|
|
RequestSelectCreature(i);
|
|
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, false ) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_PAGE , false ) );
|
|
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, !m_bCreaturePage ) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_PAGE , m_bCreaturePage ) );
|
|
break; // 2011.07.06 - servantes
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case KUI_MESSAGE::KGENWND_MOVE: // 윈도우 이동
|
|
LimitMoveWnd(); // 게임 외부로 나가지 못하게 제한
|
|
RefreshSlot();
|
|
|
|
//막음 -N4- m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_FULLDOWN_CREATURE, GetRect().left-120, GetRect().top ) );
|
|
break;
|
|
case KUI_MESSAGE::KFOCUS_ACTIVATED :
|
|
{
|
|
if( ::_stricmp( lpszControlID, "window_simple_summon" ) == 0 )
|
|
SetChildShow( "creature_mouseclick", false );
|
|
}
|
|
break;
|
|
//막음 -N4-
|
|
// case KUI_MESSAGE::KGENWND_RIGHT_CLICK:
|
|
// {
|
|
// m_pGameManager->ProcMsgAtStatic( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_FULLDOWN_CREATURE ) );
|
|
// m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_FULLDOWN_CREATURE, GetRect().left-120, GetRect().top ) );
|
|
// }
|
|
// break;
|
|
}
|
|
|
|
SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam );
|
|
|
|
// 2011.05.17 - servantes 계속 저장 느리다
|
|
// GetGameOption().SetCreatureX( GetRect().left );
|
|
// GetGameOption().SetCreatureY( GetRect().top );
|
|
}
|
|
void SUICreatureWnd::ProcMsgAtStatic( SGameMessage* pMsg )
|
|
{
|
|
switch(pMsg->nType)
|
|
{
|
|
#ifndef NDEBUG
|
|
case MSG_SEND_DATA:
|
|
{
|
|
SMSG_SEND_DATA *pSendMsg = dynamicCast< SMSG_SEND_DATA * >( pMsg );
|
|
if( pSendMsg->strMessage == "creature_update" )
|
|
{
|
|
AR_HANDLE hCreature = m_CreatureSlotMgr.GetSelectSummonCreature();
|
|
if( hCreature )
|
|
{
|
|
int i = m_CreatureSlotMgr.GetEquipedCardIndexByCreature( hCreature );
|
|
|
|
if( i >= 0 && i < c_nMaxCard )
|
|
{
|
|
// 게임에 선택된 크리쳐 넘기기
|
|
SIMSG_UI_ACT_SELECT_SUMMON msg;
|
|
msg.card_handle = m_hCreatureCard[ i ];
|
|
m_pGameManager->ProcMsgAtStatic(&msg);
|
|
|
|
// 위치
|
|
KUIWnd* pBgWnd = GetChild( CStringUtil::StringFormat("static_creature%02d", i).c_str() );
|
|
if( pBgWnd )
|
|
{
|
|
SetMovePos( "creature_mouseclick", pBgWnd->GetRect().left-2, pBgWnd->GetRect().top-4 );
|
|
SetChildShow( "creature_mouseclick", true );
|
|
}
|
|
|
|
// 소환된 크리처이면 킥슬롯 열기
|
|
if( m_CreatureSlotMgr.IsExistSummonedCreature( hCreature ) )
|
|
{
|
|
m_CreatureSlotMgr.SetActiveCreatureQuickSlot( hCreature );
|
|
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_CREATURE_QUICK_UPDATE() );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
#endif
|
|
|
|
case MSG_EQUIP_SUMMON: // 겟한 크리쳐
|
|
{
|
|
/// 2010.11.15 - prodongi
|
|
int oldCreatureCount = m_nCurCreatureCount;
|
|
|
|
if( m_CreatureSlotMgr.GetEquipedCreatureCount() == 0 )
|
|
{
|
|
m_nCurCreatureCount = 0;
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE, false ) );
|
|
}
|
|
else m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE, true ) );
|
|
|
|
RefreshSlot();
|
|
|
|
// 2011.04.18 - servantes
|
|
//편성되는 순간 가장 마지막에 있는 크리처를 셀렉트 해준다.
|
|
// RequestSelectCreature( m_nCurCreatureCount-1 );
|
|
|
|
if(c_bSelectLast)
|
|
{
|
|
for( int k = c_nMaxSlot; k >= 0; k-- )
|
|
{
|
|
if(m_hCreatureCard[k])
|
|
{
|
|
KUIWnd* pBgWnd = GetChild( CStringUtil::StringFormat("static_creature%02d", k).c_str() );
|
|
if( pBgWnd )
|
|
{
|
|
SetMovePos( "creature_mouseclick", pBgWnd->GetRect().left-2, pBgWnd->GetRect().top-4 );
|
|
SetChildShow( "creature_mouseclick", true );
|
|
|
|
m_CreatureSlotMgr.SetSelectCreatureCard(m_hCreatureCard[k]);
|
|
|
|
// 2011.06.02 - servnates // 선택된 크리처가 크리처 편성창에도 선택되도록 메세지 보낸다
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SELECT_CREATURE_2ND( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATUREFORM, m_hCreatureCard[k] ) ); // 크리처 편성창
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
c_bSelectLast = false;
|
|
}
|
|
|
|
/// 2011.07.12 - prodongi
|
|
if (!c_bSelectLast)
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, false ) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_PAGE , false ) );
|
|
}
|
|
else if( GetGameOption().IsCreatureInfoOpen() )
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, false ) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_PAGE , false ) );
|
|
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, !m_bCreaturePage ) );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_PAGE, m_bCreaturePage ) );
|
|
}
|
|
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
case IMSG_UI_TARGET_STAT:
|
|
{
|
|
pMsg->bUse = true;
|
|
SIMSG_UI_TARGET_STAT* pUIMsg = dynamicCast<SIMSG_UI_TARGET_STAT*>(pMsg);
|
|
|
|
for( int i = 0; i < c_nMaxSlot; i++ )
|
|
{
|
|
if( pUIMsg->handle == m_CreatureSlotMgr.GetEquipedCreature(i) )
|
|
{
|
|
const SCreatureInfo* pInfo = m_CreatureSlotMgr.GetCreatureInfo( pUIMsg->handle );
|
|
if( !pInfo ) return;
|
|
|
|
if( pUIMsg->m_nMode == SIMSG_UI_TARGET_STAT::USE_EXP )
|
|
{
|
|
// RefreshExp ( nIndex, pInfo->GetCurExp(), pInfo->GetMaxExp() );
|
|
}
|
|
else
|
|
{
|
|
RefreshHP ( i, pUIMsg->m_nVar1, pUIMsg->m_nVar3 );
|
|
RefreshMP ( i, pUIMsg->m_nVar2, pUIMsg->m_nVar4 );
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case MSG_LEVEL_UPDATE:
|
|
// case MSG_HPMP:
|
|
{
|
|
RefreshSlot();
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
case MSG_PROPERTY:
|
|
{
|
|
SMSG_PROPERTY* pPropertyMsg = (SMSG_PROPERTY*)pMsg;
|
|
switch( pPropertyMsg->nPropertyType )
|
|
{
|
|
case SMSG_PROPERTY::PROPERTY_LEVEL:
|
|
case SMSG_PROPERTY::PROPERTY_EXP:
|
|
case SMSG_PROPERTY::PROPERTY_JP:
|
|
{
|
|
RefreshSlot();
|
|
}
|
|
break;
|
|
}
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
//2011.05.16 - servantes
|
|
case IMSG_UI_SELECT_LAST_CREATURE: // 마지막 크리처를 선택하도록 알림
|
|
{
|
|
SIMSG_SELECT_LAST_CREATURE* pMsgSelect = (SIMSG_SELECT_LAST_CREATURE*)pMsg;
|
|
c_bSelectLast = pMsgSelect->bSelectLastCreature;
|
|
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
//2011.05.16 - servantes
|
|
case IMSG_UI_SELECT_CREATURE: // 크리처를 선택 미니 편성창에 선택한 번호를 알려준다
|
|
{
|
|
SIMSG_SELECT_CREATURE* pMsgSelect = (SIMSG_SELECT_CREATURE*)pMsg;
|
|
m_nSelctIndex = pMsgSelect->nIndex;
|
|
if(m_nSelctIndex != -1) // 2011.06.02 - servantes
|
|
{
|
|
/// 2011.06.07 편성창의 index와 미니편성창의 index가 다르기 때문에 인덱스를 변경해 준다 - prodongi
|
|
AR_HANDLE hCreatureCard = m_CreatureSlotMgr.GetEquipedCreatureCard(pMsgSelect->nIndex);
|
|
int convertIndex = findCreatureCardIndex(hCreatureCard);
|
|
RequestSelectCreature( convertIndex );
|
|
}
|
|
else // m_nSelctIndex == -1
|
|
{
|
|
/// 2011.06.07 - prodongi
|
|
SetChildShow( "creature_mouseclick", false );
|
|
m_CreatureSlotMgr.SetSelectCreatureCard(-1);
|
|
|
|
if (m_pGameManager->IsUIWindowOpened(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL))
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, false) );
|
|
}
|
|
|
|
/*
|
|
for( int k = c_nMaxSlot-1; k >= 0; k-- )
|
|
{
|
|
if(m_hCreatureCard[k])
|
|
{
|
|
KUIWnd* pBgWnd = GetChild( CStringUtil::StringFormat("static_creature%02d", k).c_str() );
|
|
if( pBgWnd )
|
|
{
|
|
SetMovePos( "creature_mouseclick", pBgWnd->GetRect().left-2, pBgWnd->GetRect().top-4 );
|
|
SetChildShow( "creature_mouseclick", true );
|
|
|
|
m_CreatureSlotMgr.SetSelectCreatureCard(m_hCreatureCard[k]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
// 2011.05.19 - servantes
|
|
case IMSG_UI_SET_MAIN_CREATURE: // 메인 크리처를 선택을 알려준다
|
|
{
|
|
SIMSG_SET_MAIN_CREATURE* pMsgSetMain = (SIMSG_SET_MAIN_CREATURE*)pMsg;
|
|
g_nMainCreatureID = pMsgSetMain->nIndex;
|
|
g_hMainCreature = pMsgSetMain->hCreature;
|
|
|
|
int nMainID=0, nSubID=0;
|
|
AR_HANDLE hMainCreature=0, hSubCreature=0;
|
|
// AR_HANDLE hMainCardCreature=0, hSubCardCreature=0;
|
|
|
|
if(m_CreatureSlotMgr.GetSummonedCreatureCnt() > 1) // 소환된 크리처가 두 마리일 경우 주크리처를 정한다
|
|
{
|
|
for(int i=0; i<SCreatureSlotMgr::MAX_SUMMON_SLOT; i++) // 주크리처 핸들 찾기
|
|
{
|
|
hMainCreature = m_CreatureSlotMgr.GetSummonedCreature(i);
|
|
if(g_hMainCreature == hMainCreature)
|
|
break;
|
|
}
|
|
|
|
for(int k=0; k<SCreatureSlotMgr::MAX_SUMMON_SLOT; k++) // 보조크리처 핸들 찾기
|
|
{
|
|
hSubCreature = m_CreatureSlotMgr.GetSummonedCreature(k);
|
|
if(g_hMainCreature != hSubCreature)
|
|
break;
|
|
}
|
|
|
|
for(int j=0; j<SCreatureSlotMgr::MAX_SUMMON_SLOT; j++) // 주크리처 인덱스 찾기
|
|
{
|
|
AR_HANDLE hCreature = m_CreatureSlotMgr.GetEquipedCreature( m_hCreatureCard[j] );
|
|
if(hCreature == hMainCreature)
|
|
{
|
|
// hMainCardCreature = m_hCreatureCard[j];
|
|
nMainID = j;
|
|
break;
|
|
}
|
|
}
|
|
|
|
for(int h=0; h<SCreatureSlotMgr::MAX_SUMMON_SLOT; h++) // 보조크리처 인덱스 찾기
|
|
{
|
|
AR_HANDLE hCreature = m_CreatureSlotMgr.GetEquipedCreature( m_hCreatureCard[h] );
|
|
if(hCreature == hSubCreature)
|
|
{
|
|
// hSubCardCreature = m_hCreatureCard[h];
|
|
nSubID = h;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(nSubID < nMainID) // 주크리처 인덱스가 보조크리처 인덱스보다 크다면
|
|
{
|
|
g_hMainCreature = hSubCreature;
|
|
}
|
|
else
|
|
{
|
|
g_hMainCreature = hMainCreature;
|
|
}
|
|
}
|
|
|
|
SetMainCreature( g_hMainCreature, g_nMainCreatureID );
|
|
|
|
// RequestSelectCreature( g_nMainCreatureID ); // 2011.05.25 - servantes // 주크리처 선택은 빨간색 바만 바뀌면 된다. 선택 테두리는 바뀌기 않는다
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
// 2011.05.24 - servantes
|
|
case IMSG_UI_GET_MAIN_CREATURE_HANDLE: // 미니 크리처창에 저장되어있는 메인크리처 핸들값 얻어오기
|
|
{
|
|
SIMSG_GET_MAIN_CREATURE_HANDEL* pMsgSetMain = (SIMSG_GET_MAIN_CREATURE_HANDEL*)pMsg;
|
|
pMsgSetMain->hCreature = g_hMainCreature;
|
|
|
|
pMsg->bUse = true;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// 슬롯
|
|
///////////////////////////////////////////////////////////
|
|
void SUICreatureWnd::RefreshSlot()
|
|
{
|
|
// 리사이즈
|
|
if( m_nCurCreatureCount != m_CreatureSlotMgr.GetEquipedCreatureCount() )
|
|
{
|
|
int nDelta = m_nCurCreatureCount - m_CreatureSlotMgr.GetEquipedCreatureCount();
|
|
//int nOffset = (nDelta*(-1)) * c_nDeltaX;
|
|
//Resize( KRect(GetRect().left, GetRect().top, GetRect().right, GetRect().bottom+nOffset) );
|
|
LimitMoveWnd();
|
|
}
|
|
|
|
m_nCurCreatureCount = m_CreatureSlotMgr.GetEquipedCreatureCount();
|
|
::memset( m_hCreatureCard, 0, sizeof(m_hCreatureCard) );
|
|
::memset( m_CreatureRemainTime, 0, sizeof(m_CreatureRemainTime) );
|
|
SetChildShow( "creature_mouseclick", false );
|
|
|
|
// 2011.04.06 - servantes
|
|
m_pFormation[ 0 ]->SetShow( false );
|
|
m_pFormation[ 1 ]->SetShow( false );
|
|
m_pFormation[ 2 ]->SetShow( false );
|
|
m_pFormation[ 3 ]->SetShow( false );
|
|
m_pFormation[ 4 ]->SetShow( false );
|
|
m_pFormation[ 5 ]->SetShow( false );
|
|
|
|
|
|
int nIndex = 0;
|
|
int nEnableCnt = 0;
|
|
for( int i = 0; nIndex < c_nMaxSlot; i++ )
|
|
{
|
|
if( i >= c_nMaxSlot )
|
|
{
|
|
EnableSlot( nIndex, false );
|
|
nIndex++;
|
|
continue;
|
|
}
|
|
|
|
const SCreatureInfo* pInfo = m_CreatureSlotMgr.GetCreatureInfo( m_CreatureSlotMgr.GetEquipedCreature(i) );
|
|
if( pInfo == NULL )
|
|
{
|
|
// EnableSlot( nIndex, false );
|
|
continue;
|
|
}
|
|
|
|
EnableSlot( nIndex, true );
|
|
++nEnableCnt;
|
|
|
|
// SetChildCaption( CStringUtil::StringFormat("creature_slot%02d", nIndex).c_str(), i );
|
|
SetChildCaption( CStringUtil::StringFormat("static_creature%02d_lv_value", nIndex).c_str(), CStringUtil::StringFormat("<OUT>%s<vcenter><hcenter><size:8>%d</OUT>", S(6425), pInfo->GetLevel()).c_str() );
|
|
|
|
RefreshHP ( nIndex, pInfo->GetHP(), pInfo->GetMaxHP() );
|
|
RefreshMP ( nIndex, pInfo->GetMP(), pInfo->GetMaxMP() );
|
|
RefreshExp ( nIndex, pInfo->GetCurExp(), pInfo->GetMaxExp() );
|
|
|
|
KUIControlMultiIcon* pIcon = dynamicCast<KUIControlMultiIcon*>(GetChild( CStringUtil::StringFormat( "creature_icon%02d", nIndex ).c_str() ));
|
|
if( pIcon )
|
|
{
|
|
ResetMultiIcon( pIcon, 0, 4 );
|
|
// 2010.05.11 - prodongi
|
|
SInventorySlot* slot = m_InventoryMgr.GetItemInfo(m_CreatureSlotMgr.GetEquipedCreatureCard(i));
|
|
if( slot )
|
|
{
|
|
if( false == setSummonCardIconForPortrait( pIcon, slot ) )
|
|
{
|
|
int enhance = (slot) ? slot->GetEnhance() : 0;
|
|
char iconName[128];
|
|
::getEnhanceIconName(iconName, pInfo, enhance);
|
|
pIcon->SetIcon( 0, c_szDEF_SPR_NAME, iconName );
|
|
// pIcon->SetIcon( c_szDEF_SPR_NAME, GetCreatureDB().GetIconName(pInfo->GetID()) );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//slot이 없는경우도 있나?
|
|
int enhance = (slot) ? slot->GetEnhance() : 0;
|
|
char iconName[128];
|
|
::getEnhanceIconName(iconName, pInfo, enhance);
|
|
pIcon->SetIcon( 0, c_szDEF_SPR_NAME, iconName );
|
|
}
|
|
|
|
pIcon->SetTooltip( GetStringDB().GetString( GetCreatureDB().GetTextID(pInfo->GetID()) ) );
|
|
}
|
|
|
|
// 선택 크리처이면 disable
|
|
if( m_CreatureSlotMgr.GetSelectedCreature() == m_CreatureSlotMgr.GetEquipedCreature(i) )
|
|
{
|
|
// SetChildShow( CStringUtil::StringFormat("creature_disable%02d", nIndex).c_str(), false );
|
|
|
|
// 위치
|
|
KUIWnd* pBgWnd = GetChild( CStringUtil::StringFormat("static_creature%02d", nIndex).c_str() );
|
|
if( pBgWnd )
|
|
{
|
|
SetMovePos( "creature_mouseclick", pBgWnd->GetRect().left-2, pBgWnd->GetRect().top-4 );
|
|
SetChildShow( "creature_mouseclick", true );
|
|
}
|
|
}
|
|
//else
|
|
// SetChildShow( CStringUtil::StringFormat("creature_disable%02d", nIndex).c_str(), true );
|
|
|
|
m_hCreatureCard[nIndex] = m_CreatureSlotMgr.GetEquipedCreatureCard(i);
|
|
|
|
if( m_hCreatureCard[nIndex] )
|
|
{
|
|
SInventorySlot* pSlot = m_InventoryMgr.GetItemInfo( m_hCreatureCard[nIndex] );
|
|
if( pSlot && pSlot->GetItem()->remain_time )
|
|
{
|
|
m_CreatureRemainTime[nIndex] = m_hCreatureCard[nIndex];
|
|
|
|
m_nProcessCount = 60;
|
|
}
|
|
}
|
|
|
|
nIndex++;
|
|
}
|
|
|
|
if( nEnableCnt == 0 ) return;
|
|
|
|
int nCountX = (nEnableCnt == 1 ? 1 : 2);
|
|
int nCountY = nEnableCnt/2 + nEnableCnt%2;
|
|
|
|
_oprint( "%d - %d %d\n", nEnableCnt, nCountX, nCountY );
|
|
|
|
KUIWnd * pTitleFrame = GetChild( "titlebar" );
|
|
KUIWnd * pOutFrame = GetChild( "outframe" );
|
|
KUIWnd * pCloseBtn = GetChild( "button_close" );
|
|
KUIWnd * pLastYFrame = GetChild( CStringUtil::StringFormat("static_creature%02d", nEnableCnt-1).c_str() );
|
|
KUIWnd * pLastXFrame = GetChild( CStringUtil::StringFormat("static_creature%02d", nCountX-1).c_str() );
|
|
if( pTitleFrame && pOutFrame && pCloseBtn && pLastYFrame && pLastXFrame )
|
|
{
|
|
if( nCountX == 1 )
|
|
pTitleFrame->SetAniName( "static_common_titlebar03" );
|
|
else
|
|
pTitleFrame->SetAniName( "static_common_titlebar02" );
|
|
|
|
KRect titleRc = pTitleFrame->GetRect();
|
|
titleRc.right = pLastXFrame->GetRect().right + 7;
|
|
pTitleFrame->Resize( titleRc );
|
|
|
|
KRect newRc = pOutFrame->GetRect();
|
|
newRc.right = pLastXFrame->GetRect().right + 7;
|
|
newRc.bottom = pLastYFrame->GetRect().bottom + 9;
|
|
|
|
pOutFrame->Resize( newRc );
|
|
|
|
pCloseBtn->MovePos( newRc.right-pCloseBtn->GetRect().GetWidth() - 6 , pCloseBtn->GetRect().top );
|
|
|
|
//윈도우 사이즈
|
|
newRc.top = titleRc.top;
|
|
Resize( newRc );
|
|
}
|
|
|
|
// 2011.05.23 - servantes
|
|
// if( m_nSelctIndex == -1 )
|
|
// {
|
|
// if( m_CreatureSlotMgr.GetEquipedCreatureCount() != 0 )
|
|
// {
|
|
// m_nSelctIndex = 0;
|
|
// RequestSelectCreature( m_nSelctIndex );
|
|
// }
|
|
// }
|
|
|
|
SetMainCreature( g_hMainCreature ); // 2011.05.20 - servantes
|
|
}
|
|
void SUICreatureWnd::EnableSlot( int nIndex, bool bShow )
|
|
{
|
|
// SetChildShow( CStringUtil::StringFormat("creature_bg%02d" , nIndex).c_str(), bShow );
|
|
// SetChildShow( CStringUtil::StringFormat("creature_slot%02d" , nIndex).c_str(), bShow );
|
|
// SetChildShow( CStringUtil::StringFormat("creature_level_font%02d" , nIndex).c_str(), bShow );
|
|
SetChildShow( CStringUtil::StringFormat("static_creature%02d" , nIndex).c_str(), bShow );
|
|
SetChildShow( CStringUtil::StringFormat("creature_icon%02d" , nIndex).c_str(), bShow );
|
|
SetChildShow( CStringUtil::StringFormat("static_slot_number%02d" , nIndex).c_str(), bShow );
|
|
SetChildShow( CStringUtil::StringFormat("static_slot_time%02d" , nIndex).c_str(), false );
|
|
SetChildShow( CStringUtil::StringFormat("static_creature%02d_lv_value", nIndex).c_str(), bShow );
|
|
// SetChildShow( CStringUtil::StringFormat("creature_disable%02d" , nIndex).c_str(), bShow );
|
|
SetChildShow( CStringUtil::StringFormat("gauge_hp_creature%02d" , nIndex).c_str(), bShow );
|
|
SetChildShow( CStringUtil::StringFormat("gauge_mp_creature%02d" , nIndex).c_str(), bShow );
|
|
SetChildShow( CStringUtil::StringFormat("gauge_sp_creature%02d" , nIndex).c_str(), bShow );
|
|
|
|
if(bShow)
|
|
{
|
|
char str[256]={}; // 2011.04.06 - servantes
|
|
sprintf(str, "static_slot_number%02d", nIndex);
|
|
KUIWnd* pWnd = GetChild( str );
|
|
if(NULL == pWnd) return ;
|
|
|
|
KRect rt = pWnd->GetRect();
|
|
rt.top -= 7;
|
|
m_pFormation[ nIndex ]->MovePos(rt.left, rt.top);
|
|
m_pFormation[ nIndex ]->SetShow( true );
|
|
}
|
|
else
|
|
{
|
|
m_pFormation[ nIndex ]->SetShow( false );
|
|
}
|
|
}
|
|
///////////////////////////////////////////////////////////
|
|
// 정보
|
|
///////////////////////////////////////////////////////////
|
|
void SUICreatureWnd::RefreshHP( int nIndex, int nHP, int nMaxHP )
|
|
{
|
|
KUIControlGauge* pGuage = dynamicCast<KUIControlGauge*>(GetChild( CStringUtil::StringFormat("gauge_hp_creature%02d", nIndex).c_str() ));
|
|
if( pGuage == NULL ) return;
|
|
|
|
nMaxHP = max( nHP, nMaxHP );
|
|
nHP = max( nHP, 0 );
|
|
pGuage->SetMax( (DWORD)nMaxHP );
|
|
pGuage->SetGauge( (DWORD)nHP, 0 );
|
|
|
|
if( nMaxHP <= 0 ) return;
|
|
int nPer = ( static_cast<float>(nHP) / static_cast<float>(nMaxHP) ) * 100;
|
|
|
|
// 게이지 남은 양에 따라 텍스처 바꿔줌 // 2012.02.02 - servantes
|
|
setHPGaugeTexture( nPer, pGuage );
|
|
}
|
|
void SUICreatureWnd::RefreshMP( int nIndex, int nMP, int nMaxMP )
|
|
{
|
|
KUIControlGauge* pGuage = dynamicCast<KUIControlGauge*>(GetChild( CStringUtil::StringFormat("gauge_mp_creature%02d", nIndex).c_str() ));
|
|
if( pGuage == NULL ) return;
|
|
|
|
nMaxMP = max( nMP, nMaxMP );
|
|
nMP = max( nMP, 0 );
|
|
pGuage->SetMax( (DWORD)nMaxMP );
|
|
pGuage->SetGauge( (DWORD)nMP, 0 );
|
|
}
|
|
void SUICreatureWnd::RefreshExp( int nIndex, __int64 nExp, __int64 nMaxExp )
|
|
{
|
|
KUIControlGauge* pGuage = dynamicCast<KUIControlGauge*>(GetChild( CStringUtil::StringFormat("gauge_sp_creature%02d", nIndex).c_str() ));
|
|
if( pGuage == NULL ) return;
|
|
|
|
pGuage->SetMax( 1000 );
|
|
pGuage->SetGauge( (double)nExp / nMaxExp * 1000, 0 );
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// 선택처리
|
|
///////////////////////////////////////////////////////////
|
|
void SUICreatureWnd::RequestSelectCreature( int nIndex )
|
|
{
|
|
if( nIndex < 0 || nIndex >= c_nMaxCard ) return;
|
|
|
|
// 선택 초기화
|
|
SetChildShow( "creature_mouseclick", false );
|
|
|
|
m_CreatureSlotMgr.SetSelectSummonCreature(NULL);
|
|
|
|
// 게임에 선택된 크리쳐 넘기기
|
|
SIMSG_UI_ACT_SELECT_SUMMON msg;
|
|
msg.card_handle = m_hCreatureCard[ nIndex ];
|
|
m_pGameManager->ProcMsgAtStatic(&msg);
|
|
|
|
// 선택 크리처 표시하기
|
|
AR_HANDLE hCreature = m_CreatureSlotMgr.GetEquipedCreature(m_hCreatureCard[nIndex]);
|
|
|
|
if( hCreature != NULL )
|
|
{
|
|
m_CreatureSlotMgr.SetSelectSummonCreature( hCreature ); //선택
|
|
|
|
m_CreatureSlotMgr.SetSelectCreatureCard(m_hCreatureCard[nIndex]); //크리처 카드 선택 // 2011.07.05 - servantes
|
|
|
|
// 위치
|
|
KUIWnd* pBgWnd = GetChild( CStringUtil::StringFormat("static_creature%02d", nIndex).c_str() );
|
|
if( pBgWnd )
|
|
{
|
|
SetMovePos( "creature_mouseclick", pBgWnd->GetRect().left-2, pBgWnd->GetRect().top-4 );
|
|
SetChildShow( "creature_mouseclick", true );
|
|
}
|
|
|
|
// 2011.06.02 - servnates // 선택된 크리처가 크리처 편성창에도 선택되도록 메세지 보낸다
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SELECT_CREATURE_2ND( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATUREFORM, m_hCreatureCard[ nIndex ] ) ); // 크리처 편성창
|
|
}
|
|
|
|
// 소환된 크리처이면 킥슬롯 열기
|
|
if( m_CreatureSlotMgr.IsExistSummonedCreature( hCreature ) )
|
|
{
|
|
m_CreatureSlotMgr.SetActiveCreatureQuickSlot( hCreature );
|
|
m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_CREATURE_QUICK_UPDATE() );
|
|
}
|
|
}
|
|
|
|
// 2011.05.19 - servantes
|
|
void SUICreatureWnd::SetMainCreature(AR_HANDLE hMainCreture, int nForceIndex)
|
|
{
|
|
if(hMainCreture < 0)
|
|
return ;
|
|
|
|
int i=0, ni=1, nMainCretureIndex=-1;
|
|
for(i=0; i<6; i++)
|
|
{
|
|
const SCreatureInfo* pInfo = m_CreatureSlotMgr.GetCreatureInfoByCardHandle( m_hCreatureCard[i] ); // 2011.05.24 - servantes
|
|
if( pInfo == NULL )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
char str[256]={};
|
|
sprintf(str, "static_slot_number%02d", i);
|
|
KUIWnd* pWnd = GetChild( str );
|
|
if(NULL == pWnd) return ;
|
|
|
|
KRect rt = pWnd->GetRect();
|
|
rt.top -= 7;
|
|
|
|
if(nForceIndex == -1) // 메인 크리처 선택 처리
|
|
{
|
|
AR_HANDLE hCreature = m_CreatureSlotMgr.GetEquipedCreature( m_hCreatureCard[i] );
|
|
if(hMainCreture == hCreature || (!hMainCreture && i == 0)) // 2011.05.24 - servantes
|
|
{
|
|
m_pFormation[ 0 ]->MovePos(rt.left, rt.top);
|
|
m_pFormation[ 0 ]->SetShow( true );
|
|
nMainCretureIndex = i;
|
|
}
|
|
else
|
|
{
|
|
if(ni >= 6)
|
|
break;
|
|
m_pFormation[ ni ]->MovePos(rt.left, rt.top);
|
|
m_pFormation[ ni ]->SetShow( true );
|
|
ni++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(0 == i) // 2011.05.24 - servantes
|
|
{
|
|
m_pFormation[ 0 ]->MovePos(rt.left, rt.top);
|
|
m_pFormation[ 0 ]->SetShow( true );
|
|
nMainCretureIndex = i;
|
|
}
|
|
else
|
|
{
|
|
if(ni >= 6)
|
|
break;
|
|
m_pFormation[ ni ]->MovePos(rt.left, rt.top);
|
|
m_pFormation[ ni ]->SetShow( true );
|
|
ni++;
|
|
}
|
|
}
|
|
}
|
|
|
|
// if(nMainCretureIndex != -1) // 2011.05.24 - servantes
|
|
// RequestSelectCreature( nMainCretureIndex ); // 2011.05.23 - servantes
|
|
}
|
|
|
|
/// 2011.06.07 - prodongi
|
|
int SUICreatureWnd::findCreatureCardIndex(AR_HANDLE equipedCardHandle) const
|
|
{
|
|
for (int i = 0; i < c_nMaxCard; ++i)
|
|
{
|
|
if (m_hCreatureCard[i] == equipedCardHandle)
|
|
return i;
|
|
}
|
|
return -1;
|
|
} |