Files
Leviathan/Client/Game/game/Interface/CreatureFarm/SUICreatureFarmWnd.cpp
T
2026-06-01 12:46:52 +02:00

3909 lines
131 KiB
C++

#include "stdafx.h"
#include "SGameSystem.h"
#include "KUIControlButton.h"
#include "KUIControlGauge.h"
#include "KUIControlStatic.h"
#include "KUIControlClockBox.h"
#include "KUIControlQuickEffect.h"
#include "KUIControl3DStatic.h"
#include "KUIControlEdit.h"
#include "SGameManager.h"
//#include "SGameMessageUI.h"
#include "SUICreatureFarmWnd.h"
#include "SUIDisplayInfo.h"
#include "SGameMessage.h"
#include "SSummonSlotMgr.h"
#include "SInventoryMgr.h"
#include "SCreatureDB.h"
#include "SSkillDB.h"
#include "SStringDB.h"
#include "SSkillSlot.h"
#include "SUIDisplayInfo.h"
#include "KUIDragAndDrop.h"
#include "SGameAvatarEx.h"
#include "SGame.h"
#include "SGameWorld.h"
#include "SCommandSystem.h"
#include "SAvatarProperty.h"
#include "SPlayerInfoMgr.h" // 2011.03.29 - servantes
#include "string.h"
//#include "SUIUtil.h"
#include "SExpDB.h"
#include "SCobManager.h"
#include "SItemDB.h"
#include "SCreatureFarmDB.h"
#include "SGameOtherCreature.h"
#include "SUILazyTooltip.h"
#include "SUIEquipCreatureWnd.h"
#include "SGameInterface.h" // 2011.05.17 - servantes
using namespace rp;
#define OPEN_MARKET_STRING "/run open_market('creature_farm')"
#define KEEP_TIME (30*24*60*60) // 30일
#define CALCULATE_KEEP_TIME(date) (date * 60 * 60 * 24) // 들어온 날짜만큼 시간을 구한다 1초단위
#define TIME_CALCULATE_DATE(second) (second / (60 * 60 * 24)) // 초 단위
#define TIME_CALCULATE_HOUR(second) (second / (60 * 60))
#define TIME_CALCULATE_HOUR_REMAIN(second) ((second / (60 * 60)) % 24)
#define TIME_CALCULATE_MINUTE_REMAIN(second) ((second % (24 * 60)) % 60)
//#define COST_CALCULATE_EXP_LV1 (137700)
//#define COST_CALCULATE_EXP_LV2 (347264)
#define COST_CALCULATE_EXP_NORMAL_LV1 ( 145764 )
#define COST_CALCULATE_EXP_NORMAL_LV2 ( 1118030 )
#define COST_CALCULATE_EXP_NORMAL_LV3 ( 3708800 )
#define COST_CALCULATE_EXP_PRIMIER_LV1 ( 728815 )
#define COST_CALCULATE_EXP_PRIMIER_LV2 ( 13975357 )
#define COST_CALCULATE_EXP_PRIMIER_LV3 ( 37087983 )
#define CFARM_MAXLEVEL_LV1 ( 60 )
#define CFARM_MAXLEVEL_LV2 ( 115 )
#define CFARM_MAXLEVEL_LV3 ( 150 )
#define THREAD_FRAME_TICK (1000)
#define FARM_TICKET_STRING_NORMAL_3 "icon_commerce_farmticket_junior"
#define FARM_TICKET_STRING_NORMAL_7 "icon_commerce_farmticket_senior"
#define FARM_TICKET_STRING_PRIMIUM_3 "icon_commerce_farmticket_junior_premium"
#define FARM_TICKET_STRING_PRIMIUM_7 "icon_commerce_farmticket_senior_premium"
#define FARM_CRACKER_STRING "icon_item_food_5gok"
#define EMPTY_ICON_STRING_VISIBLE "static_common_itemslot"
#define EMPTY_ICON_STRING ""
enum CREATURE_FARM_UI_STATE
{
REQ_CREATURE_ASSIGN = 0, // 크리처 맡기기 도움말 출력
REQ_CREATURE_TICKET, // 농장이용권 도움말 출력
REQ_CREATURE_CRACKER, // 크래커 도움말 출력
REQ_CREATURE_ASSIGN_AFTER, // 크리처 맡긴 후 도움말 출력
REQ_CREATURE_MAX
};
extern SGameSystem* g_pCurrentGameSystem;
SUICreatureFarmWnd* g_ptrCreatureFarmWnd;
SInventorySlot* g_pTempCreatureCardSlot = NULL;
int g_nEvolveType = -1; // 진화 형태 임시 저장
std::string g_strTmpIconName_cracker; // 크래커 이름
#ifdef _COUNTRY_ME_
float g_fAdvertiseTime = 0.1f;
#else
float g_fAdvertiseTime = 0.03f;
#endif
int g_nTmpTicketMaxCount=0;
int g_nTmpCrackerMaxCount=0;
int g_nTmpTicketCount=0;
int g_nTmpCrackerCount=0;
int g_nTmpFarmUsingCardType=0;
int g_nTmpFarmUsingCardTerm=0;
int g_nNurseCreatureSlotID = -1;
DWORD g_Ad_tick = 0;
DWORD g_Ad_tick_old = 0;
int g_Ad_text_id = 0;
// 인벤토리에서 선택한 아이템의 코드 값(디비번호)
int g_nTempCodeItem = 0;
BOOL g_bDisplayAssignningCreature = FALSE; // 맡기고 있는 크리처를 보여주느냐
BOOL g_bChangeAD = 0; // 광고문구를 바꿀것인가?
SUICreatureFarmWnd::SAssignData::SAssignData()
{
Clear();
}
void SUICreatureFarmWnd::SAssignData::Clear()
{
nTicketType = nTicketTermType = nCrackerCount = nTicketCount = 0;
strTicketIconFileName = "";
strCrackerIconFileName = "";
bUse = FALSE;
codeCreature = NULL;
idCard = 0;
nIndex = 0;
duration = 0;
duration_elasped = 0;
elasped_time = 0;
refresh_time = 0;
refresh_elasped_time = 0;
using_cash = 0;
using_cracker = 0;
evolution_grade = 0;
exp = 0;
idEvolutionTypeName = 0;
memset(&name, 0, sizeof(card_info));
memset(&card_info, 0, sizeof(card_info));
}
BOOL SUICreatureFarmWnd::SAssignData::IsEanbleAssign()
{
if(nTicketType == 0 || nTicketType >= 3)
return FALSE;
if(nTicketTermType != 3 || nTicketTermType != 7)
return FALSE;
if(nTicketCount < 3 )
return FALSE;
if(nCrackerCount < 3 )
return FALSE;
if(codeCreature == NULL)
return FALSE;
return TRUE;
}
SUICreatureFarmWnd::SAssignData& SUICreatureFarmWnd::SAssignData::operator = (SUICreatureFarmWnd::SAssignData* p)
{
nTicketType = p->nTicketType;
nTicketTermType = p->nTicketTermType;
nCrackerCount = p->nCrackerCount;
nTicketCount = p->nTicketCount;
strTicketIconFileName = p->strTicketIconFileName;
strCrackerIconFileName = p->strCrackerIconFileName;
bUse = p->bUse;
codeCreature = p->codeCreature;
nIndex = p->nIndex;
idCard = p->idCard;
duration = p->duration;
duration_elasped = p->duration_elasped;
elasped_time = p->elasped_time;
refresh_time = p->refresh_time;
refresh_elasped_time = p->refresh_elasped_time;
using_cash = p->using_cash;
using_cracker = p->using_cracker;
evolution_grade = p->evolution_grade;
exp = p->exp;
idEvolutionTypeName = p->idEvolutionTypeName;
strcpy(name, p->name);
memcpy(&card_info, &p->card_info, sizeof(p->card_info));
return *this;
}
SUICreatureFarmWnd::SUICreatureFarmWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo )
: SUIWnd( pGameManager )
, m_pDisplayInfo( pDisplayInfo )
{
g_ptrCreatureFarmWnd = this;
g_strTmpIconName_cracker = "";
m_nSelectCreatureSlot = 0;
m_bEnableCashItem = FALSE;
m_nCrackerHandle = 0;
m_nTicketHandle = 0;
m_nDisplayCreatureLevel = 0;
m_nSelectCreatureCardHandle = 0;
m_nOldSelectCreatureCardHandle = 0;
m_pStatic_CurrentLevel = NULL;
m_pStatic_StartLevel = NULL;
m_pStatic_GoalLevel = NULL;
m_pStatic_Name = NULL;
m_pStatic_Type = NULL;
m_pStatic_Time = NULL;
m_p3DStatic_Creature = NULL;
m_pStatic_DragNDrop = NULL;
m_pStatic_Enhance = NULL;
m_pStatic_Food = NULL;
m_pStatic_lbx_select = NULL;
for(int k=0; k < FARM_SLOT_CNT; k++)
{
m_pStatic_lbx_cover[k] = NULL;
m_pStatic_lbx_Level[k] = NULL;
m_pStatic_lbx_Name[k] = NULL;
m_pStatic_lbx_Type[k] = NULL;
m_pStatic_lbx_Time[k] = NULL;
m_pBtn_lbx_Assign[k] = NULL;
m_pIconStatic_mark_khroo[k] = NULL;
m_pBtn_list_item[k] = NULL;
m_pStaticIcon_assign_food[k] = NULL;
m_pStaticIcon_assign_ticket[k] = NULL;
}
m_pStatic_lbx_cover_txt[0] = NULL;
m_pStatic_lbx_cover_txt[1] = NULL;
m_pIconStatic_letter_mark_khroo[0] = NULL;
m_pIconStatic_letter_mark_khroo[1] = NULL;
m_pBtn_Assign = NULL;
m_pBtn_Regain = NULL;
m_pStaticIcon_card = NULL;
m_pStaticIcon_food = NULL;
m_pStaticIcon_ticket = NULL;
m_pEdit_Advertise = NULL;
m_pStatic_SelectSlot = NULL;
m_pStatic_KhrooShopMarkZone = NULL;
m_pStaticIcon_ticket_count = NULL;
m_pStaticIcon_cracker_count = NULL;
m_hCreature_display = 0xfffffffc;
m_pDisplayCreature = NULL;
m_nDisplayCreatureID = 0;
m_bFaceCutSet = FALSE;
m_bCrackerSet = FALSE;
m_nTicketType = 0;
m_bEnableAssign = FALSE;
m_nAdvertiseState = 0;
m_nAdvertiseStateOld = -1;
m_CreatureAssignStateMgr.SetParent(this);
}
SUICreatureFarmWnd::~SUICreatureFarmWnd()
{
if(m_pDisplayCreature)
{
SAFE_DELETE(m_pDisplayCreature);
SGameWorld* pGameWorld = dynamicCast<SGameWorld*>(m_pGameManager->GetActiveGame());
if(pGameWorld)
{
pGameWorld->GetCommandSystem()->DeleteAvatar(m_hCreature_display);
}
}
}
void SUICreatureFarmWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd )
{
SUIWnd::OnNotifyUIWindowOpen(bOpen);
//파티 윈도우 위치 조정
if( !bOpen )
{
ClearUIDisplay(); // 현재 크리처 정보창의 내용을 삭제한다
m_pBtn_Assign->Disable();
m_pBtn_Regain->Disable();
m_pStatic_SelectSlot->SetShow(false);
m_CreatureAssignStateMgr.SetWorkFlag(FALSE); // add
m_pEdit_Advertise->Disable(); // 2011.09.14 servantes : 크리처 농장 ui닫을 때 광고판 비활성
}
else
{
m_pGameManager->StartSound( "ui_popup_window01.wav" );
m_CreatureAssignStateMgr.SetWorkFlag(TRUE); // add
OnSendPacket_RequestCreatureFarmInfo(); // add
m_pEdit_Advertise->Enable(); // 2011.09.14 servantes : 크리처 농장 ui열때 광고판 활성
m_pEdit_Advertise->ResetUVScrollEndFlag(); // 2011.09.14 servantes : uv ani 초기화
}
g_Ad_tick = GetSafeTickCount();
}
bool SUICreatureFarmWnd::InitData( bool bReload )
{
return SUIWnd::InitData(bReload);
}
bool SUICreatureFarmWnd::InitControls( KPoint kPos )
{
std::string strFontName;
std::string strCaption;
std::string strContents;
// 커스텀 윈도우 move 영역 설정
SetCustomMovingRect( GetChild( "titlebar" )->GetRect() );
m_pStatic_DragNDrop = dynamicCast< KUIControlStatic* > (GetChild( "outframe" )); // 드래그 앤 드랍 가능 지역 - 2011.05.13 - servantes : 컨트롤 이름 변경
if(m_pStatic_DragNDrop == NULL)
return false;
m_pStatic_SelectSlot = dynamicCast< KUIControlStatic* > (GetChild( "tab_select_cyan_01" )); // 선택한 슬롯 표시
if(m_pStatic_SelectSlot == NULL)
return false;
m_pStatic_KhrooShopMarkZone = dynamicCast< KUIControlStatic* > (GetChild( "inframe" )); // 크루샵 마크 선택 검사지역
if(m_pStatic_KhrooShopMarkZone == NULL)
return false;
//-------------------------------------------------------------------------------------------------------------------------------
KUIControlStatic* pStatic_CreatureName = dynamicCast< KUIControlStatic* > (GetChild( "text_table_01" )); // 크리처 이름 명판
if(pStatic_CreatureName == NULL)
return false;
pStatic_CreatureName->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
//-------------------------------------------------------------------------------------------------------------------------------
KUIControlStatic* pStatic_CreatureType = dynamicCast< KUIControlStatic* > (GetChild( "text_table_02" )); // 크리처 종류 명판
if(pStatic_CreatureType == NULL)
return false;
pStatic_CreatureType->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_Name = dynamicCast< KUIControlStatic* > (GetChild( "text_table_10" )); // 크리처 이름
if(m_pStatic_Name == NULL)
return false;
m_pStatic_Name->SetEnableOption(true);
m_pStatic_Name->SetEnableColor( "<#ffffff>" );
m_pStatic_Name->Enable();
m_pStatic_Name->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_Type = dynamicCast< KUIControlStatic* > (GetChild( "text_table_11" )); // 크리처 종류
if(m_pStatic_Type == NULL)
return false;
m_pStatic_Type->SetEnableOption(true);
m_pStatic_Type->SetEnableColor( "<#876b4a>" );
m_pStatic_Type->Enable();
m_pStatic_Type->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_CurrentLevel = dynamicCast< KUIControlStatic* > (GetChild( "text_table_12" )); //현재 레벨
if(m_pStatic_CurrentLevel == NULL)
return false;
m_pStatic_CurrentLevel->SetEnableOption(true);
m_pStatic_CurrentLevel->SetEnableColor( "<#fff200>" );
m_pStatic_CurrentLevel->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
m_pStatic_CurrentLevel->Enable();
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_Enhance = dynamicCast< KUIControlStatic* > (GetChild( "text_table_13" )); // 강화 단계
if(m_pStatic_Enhance == NULL)
return false;
m_pStatic_Enhance->SetEnableOption(true);
m_pStatic_Enhance->SetEnableColor( "<#ffffff>" );
m_pStatic_Enhance->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
m_pStatic_Enhance->Enable();
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_StartLevel = dynamicCast< KUIControlStatic* > (GetChild( "text_table_14" )); // 시작레벨
if(m_pStatic_StartLevel == NULL)
return false;
m_pStatic_StartLevel->SetEnableOption(true);
m_pStatic_StartLevel->SetEnableColor( "<#ffffff>" );
m_pStatic_StartLevel->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
m_pStatic_StartLevel->Enable();
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_GoalLevel = dynamicCast< KUIControlStatic* > (GetChild( "text_table_15" )); // 목표레벨
if(m_pStatic_GoalLevel == NULL)
return false;
m_pStatic_GoalLevel->SetEnableOption(true);
m_pStatic_GoalLevel->SetEnableColor( "<#39b44a>" );
m_pStatic_GoalLevel->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
m_pStatic_GoalLevel->Enable();
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_Time = dynamicCast< KUIControlStatic* > (GetChild( "text_table_16" )); // 맡기기 남은 시간
if(m_pStatic_Time == NULL)
return false;
m_pStatic_Time->SetEnableOption(true);
m_pStatic_Time->SetEnableColor( "<#ffffff>" );
m_pStatic_Time->Enable();
m_pStatic_Time->SetCaptionAlign( KTextRender::KTALIGN_RIGHT | KTextRender::KTALIGN_VCENTER );
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_Food = dynamicCast< KUIControlStatic* > (GetChild( "text_table_17" )); // 크래커 이름판
if(m_pStatic_Food == NULL)
return false;
m_pStatic_Food->SetEnableOption(true);
m_pStatic_Food->SetEnableColor( "<#ffffff>" );
m_pStatic_Food->Enable();
m_pStatic_Food->SetCaptionAlign( KTextRender::KTALIGN_RIGHT | KTextRender::KTALIGN_VCENTER );
InsertCaption_cracker( " " );
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_lbx_cover[0] = dynamicCast< KUIControlStatic* > (GetChild( "list_box_00" ));
if(m_pStatic_lbx_cover[0] == NULL)
return false;
m_pStatic_lbx_cover[0]->SetShow(true);
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_lbx_cover[1] = dynamicCast< KUIControlStatic* > (GetChild( "list_box_unable_01" )); // 크루샵 전용
if(m_pStatic_lbx_cover[1] == NULL)
return false;
m_pStatic_lbx_cover[1]->SetShow(true);
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_lbx_cover[2] = dynamicCast< KUIControlStatic* > (GetChild( "list_box_unable_02" )); // 크루샵 전용
if(m_pStatic_lbx_cover[2] == NULL)
return false;
m_pStatic_lbx_cover[2]->SetShow(true);
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_lbx_cover_txt[0] = dynamicCast< KUIControlStatic* > (GetChild( "text_advertise_02" )); // 크루샵 전용
if(m_pStatic_lbx_cover_txt[0] == NULL)
return false;
m_pStatic_lbx_cover_txt[0]->SetShow(true);
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_lbx_cover_txt[1] = dynamicCast< KUIControlStatic* > (GetChild( "text_advertise_03" )); // 크루샵 전용
if(m_pStatic_lbx_cover_txt[1] == NULL)
return false;
m_pStatic_lbx_cover_txt[1]->SetShow(true);
//-------------------------------------------------------------------------------------------------------------------------------
m_pStatic_lbx_select = dynamicCast< KUIControlStatic* > (GetChild( "tab_select_cyan_01" )); // 크리처 리스트 아이템 선택시 보여질 컨트롤
if(m_pStatic_lbx_select == NULL)
return false;
m_pStatic_lbx_select->SetShow(false);
//-------------------------------------------------------------------------------------------------------------------------------
m_pIconStatic_mark_khroo[0] = dynamicCast< KUIControlIconStatic* > (GetChild( "mark_khroo_01" )); // 크루샵 아이콘 표시 1
if(m_pIconStatic_mark_khroo[0] == NULL)
return false;
m_pIconStatic_mark_khroo[0]->SetShow(true);
//-------------------------------------------------------------------------------------------------------------------------------
m_pIconStatic_mark_khroo[1] = dynamicCast< KUIControlIconStatic* > (GetChild( "mark_khroo_02" )); // 크루샵 아이콘 표시 2
if(m_pIconStatic_mark_khroo[1] == NULL)
return false;
m_pIconStatic_mark_khroo[1]->SetShow(true);
//-------------------------------------------------------------------------------------------------------------------------------
m_pIconStatic_mark_khroo[2] = dynamicCast< KUIControlIconStatic* > (GetChild( "mark_khroo_03" )); // 크루샵 아이콘 표시 / 선택시 표시용
if(m_pIconStatic_mark_khroo[2] == NULL)
return false;
m_pIconStatic_mark_khroo[2]->SetShow(false);
m_pIconStatic_mark_khroo[2]->SetTooltip(S(1148));
//-------------------------------------------------------------------------------------------------------------------------------
m_pBtn_list_item[0] = dynamicCast< KUIControlButton* > (GetChild( "button_list_01" )); // 크리처 맡기기 슬롯 1
if(m_pBtn_list_item[0] == NULL)
return false;
//-------------------------------------------------------------------------------------------------------------------------------
m_pBtn_list_item[1] = dynamicCast< KUIControlButton* > (GetChild( "button_list_02" )); // 크리처 맡기기 슬롯 2
if(m_pBtn_list_item[1] == NULL)
return false;
//-------------------------------------------------------------------------------------------------------------------------------
m_pBtn_list_item[2] = dynamicCast< KUIControlButton* > (GetChild( "button_list_03" )); // 크리처 맡기기 슬롯 3
if(m_pBtn_list_item[2] == NULL)
return false;
//-------------------------------------------------------------------------------------------------------------------------------
m_pBtn_lbx_Assign[0] = dynamicCast< KUIControlSimpleButton* > (GetChild( "button_ministration_01" )); // 맡기기 버튼1
if(m_pBtn_lbx_Assign[0] == NULL)
return false;
m_pBtn_lbx_Assign[0]->Enable();
//-------------------------------------------------------------------------------------------------------------------------------
m_pBtn_lbx_Assign[1] = dynamicCast< KUIControlSimpleButton* > (GetChild( "button_ministration_02" )); // 맡기기 버튼2
if(m_pBtn_lbx_Assign[1] == NULL)
return false;
m_pBtn_lbx_Assign[1]->Disable();
//-------------------------------------------------------------------------------------------------------------------------------
m_pBtn_lbx_Assign[2] = dynamicCast< KUIControlSimpleButton* > (GetChild( "button_ministration_03" )); // 맡기기 버튼3
if(m_pBtn_lbx_Assign[2] == NULL)
return false;
m_pBtn_lbx_Assign[2]->Disable();
//-------------------------------------------------------------------------------------------------------------------------------
//m_pStaticIcon_card = dynamicCast< KUIControlIconStatic* >(GetChild( "creature_card_icon_slot_01" )); // 크리처 아이콘
m_pStaticIcon_card = dynamicCast< KUIControlMultiIcon* >(GetChild( "creature_card_icon_slot_01" )); // 크리처 아이콘
if( m_pStaticIcon_card == NULL )
return false;
m_pStaticIcon_card->SetIconLayer( 8 );
//-------------------------------------------------------------------------------------------------------------------------------
m_pStaticIcon_food = dynamicCast< KUIControlIconStatic* >(GetChild( "food_icon_slot_01" )); // 크래커 아이콘
if( m_pStaticIcon_food == NULL )
return false;
//-------------------------------------------------------------------------------------------------------------------------------
m_pStaticIcon_ticket = dynamicCast<KUIControlIconStatic*>(GetChild( "tiket_icon_slot_01" )); // 농장이용권
if( m_pStaticIcon_ticket == NULL )
return false;
//-------------------------------------------------------------------------------------------------------------------------------
m_pStaticIcon_ticket_count = dynamicCast< KUIControlStatic* > (GetChild( "text_table_18" )); // 티켓 개수 표시
if(m_pStaticIcon_ticket_count == NULL)
return false;
m_pStaticIcon_ticket_count->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
InsertCaption_ticket_count("");
//-------------------------------------------------------------------------------------------------------------------------------
m_pStaticIcon_cracker_count = dynamicCast< KUIControlStatic* > (GetChild( "text_table_19" )); // 크래커 개수 표시
if(m_pStaticIcon_cracker_count == NULL)
return false;
m_pStaticIcon_cracker_count->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
InsertCaption_cracker_count("");
//-------------------------------------------------------------------------------------------------------------------------------
m_pBtn_Assign = dynamicCast< KUIControlSimpleButton* > (GetChild( "button_leave_01" )); // 맡기기 버튼
if(m_pBtn_Assign == NULL)
return false;
m_pBtn_Assign->SetEnableColor( "<#ffffff>" ); // #a0a0a0
m_pBtn_Assign->SetDisableColor( "<#a0a0a0>" );
m_pBtn_Assign->Disable();
//-------------------------------------------------------------------------------------------------------------------------------
m_pBtn_Regain = dynamicCast< KUIControlSimpleButton* > (GetChild( "button_regain_01" )); // 되찾기 버튼
if(m_pBtn_Regain == NULL)
return false;
m_pBtn_Regain->SetEnableColor( "<#e17278>" );
m_pBtn_Regain->SetDisableColor( "<#a0a0a0>" );
m_pBtn_Regain->Disable();
int id=0;
char aCtrlName[128]={0};
for(int k=1; k < FARM_SLOT_CNT + 1; k++)
{
id = k-1;
//-------------------------------------------------------------------------------------------------------------------------------
sprintf(aCtrlName, "lv_box_%02d", k);
m_pStatic_lbx_Level[id] = dynamicCast< KUIControlStatic* > (GetChild( aCtrlName ));
if(m_pStatic_lbx_Level[id] == NULL)
return false;
m_pStatic_lbx_Level[id]->SetEnableOption(true);
m_pStatic_lbx_Level[id]->SetEnableColor("<#fff200>");
m_pStatic_lbx_Level[id]->SetDisableColor("<#876b4a>");
m_pStatic_lbx_Level[id]->Enable();
// m_pStatic_lbx_Level[id]->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
InsertCaption_LV_slot( id, "" );
//-------------------------------------------------------------------------------------------------------------------------------
sprintf(aCtrlName, "creature_name_box_%02d", k);
m_pStatic_lbx_Name[id] = dynamicCast< KUIControlStatic* > (GetChild( aCtrlName ));
if(m_pStatic_lbx_Name[id] == NULL)
return false;
m_pStatic_lbx_Name[id]->SetEnableOption(true);
m_pStatic_lbx_Name[id]->SetEnableColor("<#ffffff>");
m_pStatic_lbx_Name[id]->SetDisableColor("<#876b4a>");
m_pStatic_lbx_Name[id]->Enable();
m_pStatic_lbx_Name[id]->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
InsertCaption_name_slot( id, "" );
//-------------------------------------------------------------------------------------------------------------------------------
sprintf(aCtrlName, "creature_type_box_%02d", k);
m_pStatic_lbx_Type[id] = dynamicCast< KUIControlStatic* > (GetChild( aCtrlName ));
if(m_pStatic_lbx_Type[id] == NULL)
return false;
m_pStatic_lbx_Type[id]->SetEnableOption(true);
m_pStatic_lbx_Type[id]->SetEnableColor("<#876b4a>");
m_pStatic_lbx_Type[id]->SetDisableColor("<#626262>");
m_pStatic_lbx_Type[id]->Enable();
m_pStatic_lbx_Type[id]->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
InsertCaption_kind_slot( id, "" );
//-------------------------------------------------------------------------------------------------------------------------------
sprintf(aCtrlName, "creature_time_%02d", k);
m_pStatic_lbx_Time[id] = dynamicCast< KUIControlStatic* > (GetChild( aCtrlName ));
if(m_pStatic_lbx_Time[id] == NULL)
return false;
m_pStatic_lbx_Time[id]->SetEnableOption(true);
m_pStatic_lbx_Time[id]->SetEnableColor("<#ffffff>");
m_pStatic_lbx_Time[id]->SetDisableColor("<#876b4a>");
m_pStatic_lbx_Time[id]->Enable();
m_pStatic_lbx_Time[id]->SetCaptionAlign( KTextRender::KTALIGN_HCENTER | KTextRender::KTALIGN_VCENTER );
m_pStatic_lbx_Time[id]->SetCaption("<font:font_01><#ffffff><size:9><hcenter>");
//-------------------------------------------------------------------------------------------------------------------------------
sprintf(aCtrlName, "food_icon_slot_%02d", k+1);
m_pStaticIcon_assign_food[id] = dynamicCast< KUIControlIconStatic* > (GetChild( aCtrlName ));
if(m_pStaticIcon_assign_food[id] == NULL)
return false;
//-------------------------------------------------------------------------------------------------------------------------------
sprintf(aCtrlName, "tiket_icon_slot_%02d", k+1);
m_pStaticIcon_assign_ticket[id] = dynamicCast< KUIControlIconStatic* > (GetChild( aCtrlName ));
if(m_pStaticIcon_assign_ticket[id] == NULL)
return false;
}
//-------------------------------------------------------------------------------------------------------------------------------
m_pIconStatic_letter_mark_khroo[0] = dynamicCast< KUIControlStatic* > (GetChild( "text_advertise_02" ));
if(m_pIconStatic_letter_mark_khroo[0] == NULL)
return false;
m_pIconStatic_letter_mark_khroo[0]->SetShow(true);
//-------------------------------------------------------------------------------------------------------------------------------
m_pIconStatic_letter_mark_khroo[1] = dynamicCast< KUIControlStatic* > (GetChild( "text_advertise_03" ));
if(m_pIconStatic_letter_mark_khroo[1] == NULL)
return false;
m_pIconStatic_letter_mark_khroo[1]->SetShow(true);
//-------------------------------------------------------------------------------------------------------------------------------
m_p3DStatic_Creature = dynamicCast< KUIControl3DStatic* > (GetChild( "box_creature_3dbox" ));
if(m_p3DStatic_Creature == NULL)
return false;
InsertCaption_goal_level("");
InsertCaption_start_level("");
m_pBtn_lbx_Assign[0]->Disable(); // 첫번째 돌보기 버튼 비활성화
InsertCaption_current_level("");
InsertCaption_LV_slot( 0, "" );
SetChildAsTop("mark_khroo_03");
//-------------------------------------------------------------------------------------------------------------------------------
m_pEdit_Advertise = dynamicCast<KUIControlStatic*>(GetChild( "text_advertise_01" ));
if(NULL == m_pEdit_Advertise)
return false;
m_pEdit_Advertise->SetEnableOption(true);
m_pEdit_Advertise->SetEnableColor( "<#b92c36>" );
SetElapsedTime(0, 0, 1); // 돌보기 지난 시간을 크리처 정보 인터페이스에 표시한다
return SUIWnd::InitControls( kPos );
}
void SUICreatureFarmWnd::Process( DWORD dwTime )
{
SUIWnd::Process( dwTime );
m_CreatureAssignStateMgr.Process( dwTime );
if(true == m_pEdit_Advertise->GetUVScrollEndFlag())
{
g_bChangeAD = TRUE;
SetAdvertise(m_nAdvertiseState);
m_pEdit_Advertise->ResetUVScrollEndFlag();
}
g_Ad_tick_old = dwTime;
if(m_bFaceCutSet)
return ;
if(m_pDisplayCreature == NULL)
return ;
if(m_pDisplayCreature->IsLoadComplete() )
{
KSeqAvatarEx* pSeq = m_pDisplayCreature->GetSeqForm();
if(NULL == pSeq)
return ;
const KRect& rt = m_p3DStatic_Creature->GetRect();
K3DVertex pos = K3DVertex(0, -8, 13);
m_p3DStatic_Creature->setFullScene(true);
if (m_p3DStatic_Creature->isFullScene())
{
std::string cobName = CStringUtil::StringFormat("%s.cob", m_pDisplayCreature->GetCobFileName());
std::vector<COBSET *>* coblist = COBManager::GetManager()->Load(cobName.c_str());
if (coblist)
{
std::vector<COBSET *>::iterator it = coblist->begin();
m_p3DStatic_Creature->setFullSceneSize((*it)->fVisibleCube);
}
}
m_p3DStatic_Creature->SetSeqForm( pSeq, KSize( rt.GetWidth(), rt.GetHeight() ), m_nDisplayCreatureObjectType, pos );
m_p3DStatic_Creature->SetShow(true);
m_bFaceCutSet = TRUE;
}
}
// 맡기기 기간 표시 - 상단
void SUICreatureFarmWnd::InsertCaption_remain_time(const char* pContents)
{
if(NULL == pContents || NULL == m_pStatic_Time)
return ;
std::string strCaption = "<font:font_01><right><size:9>";
strCaption += pContents;
m_pStatic_Time->SetCaption(strCaption.c_str());
}
// 맡긴 기간 표시 - 슬롯
void SUICreatureFarmWnd::InsertCaption_remain_time_slot(int nSlot, const char* pContents)
{
if(NULL == pContents)
return ;
if(nSlot < 0 || nSlot >= 6)
return ;
std::string strCaption = "<font:font_01><#ffffff><size:9><hcenter>";
strCaption += pContents;
m_pStatic_lbx_Time[ nSlot ]->SetEnableOption(true);
m_pStatic_lbx_Time[ nSlot ]->SetCaption(strCaption.c_str());
}
// 크래커 표시 - 상단
void SUICreatureFarmWnd::InsertCaption_cracker(const char* pContents)
{
if(NULL == pContents)
return ;
std::string strCaption = "<font:font_01><right><size:9>";
strCaption += pContents;
m_pStatic_Food->SetCaption(strCaption.c_str());
}
// 크래커 개수 표시 - 상단
void SUICreatureFarmWnd::InsertCaption_cracker_count(const char* pContents)
{
if(NULL == pContents)
return ;
std::string strCaption = "<font:font_01><right><size:9>";
strCaption += pContents;
m_pStaticIcon_cracker_count->SetCaption(strCaption.c_str());
}
// 티켓 개수 표시 - 상단
void SUICreatureFarmWnd::InsertCaption_ticket_count(const char* pContents)
{
if(NULL == pContents)
return ;
std::string strCaption = "<font:font_01><right><size:9>";
strCaption += pContents;
m_pStaticIcon_ticket_count->SetCaption(strCaption.c_str());
}
// 레벨 표시 - 슬롯
void SUICreatureFarmWnd::InsertCaption_LV_slot(int nSlot, const char* pContentsLV)
{
if(nSlot < 0 || nSlot >= 3)
return ;
if(NULL == pContentsLV)
return ;
std::string strCaption = "<font:font_01><#fff200><size:9><hcenter><vcenter>";
strCaption += pContentsLV;
m_pStatic_lbx_Level[ nSlot ]->SetEnableOption(true);
m_pStatic_lbx_Level[ nSlot ]->SetCaption(strCaption.c_str());
}
// 현재 레벨
void SUICreatureFarmWnd::InsertCaption_current_level(const char* pLVString)
{
if(NULL == pLVString)
return ;
std::string strCaption = "<font:font_01><#fff200><size:9><hcenter><vcenter>";
strCaption += pLVString;
m_pStatic_CurrentLevel->SetEnableOption(true);
m_pStatic_CurrentLevel->SetCaption(strCaption.c_str());
}
// 시작 레벨 설정
void SUICreatureFarmWnd::InsertCaption_start_level(const char* pLVString)
{
if(NULL == pLVString)
return ;
std::string strCaption = "<font:font_01><#ffffff><size:9><right>";
strCaption += pLVString;
m_pStatic_StartLevel->SetEnableOption(true);
m_pStatic_StartLevel->SetCaption(strCaption.c_str());
}
// 목표 레벨 설정
void SUICreatureFarmWnd::InsertCaption_goal_level(const char* pLVString)
{
if(NULL == pLVString)
return ;
std::string strCaption = "<font:font_01><#39b44a><size:9><left>";
strCaption += pLVString;
m_pStatic_GoalLevel->SetEnableOption(true);
m_pStatic_GoalLevel->SetCaption(strCaption.c_str());
}
// 강화단계 표시
void SUICreatureFarmWnd::InsertCaption_enhance(const char* pEnhanceString)
{
if(NULL == pEnhanceString)
return ;
std::string strCaption = "<font:font_01><#ffffff><size:9><vcenter><hcenter>";
strCaption += pEnhanceString;
m_pStatic_Enhance->SetEnableOption(true);
m_pStatic_Enhance->SetCaption(strCaption.c_str());
}
// 이름 표시 - 슬롯
void SUICreatureFarmWnd::InsertCaption_name_slot(int nSlot, const char* name)
{
if(nSlot < 0 || nSlot >= 3)
return ;
if(NULL == name)
return ;
std::string strCaption = "<font:font_01><#ffffff><size:9><vcenter><hcenter>";
strCaption += name;
m_pStatic_lbx_Name[ nSlot ]->SetEnableOption(true);
m_pStatic_lbx_Name[ nSlot ]->SetCaption(strCaption.c_str());
}
// 종류 표시 - 슬롯
void SUICreatureFarmWnd::InsertCaption_kind_slot(int nSlot, const char* pKindString)
{
if(nSlot < 0 || nSlot >= 3)
return ;
if(NULL == pKindString)
return ;
std::string strCaption = "<font:font_01><#876b4a><size:9><vcenter><hcenter>";
strCaption += pKindString;
m_pStatic_lbx_Type[ nSlot ]->SetCaption(strCaption.c_str());
}
// 광고판
void SUICreatureFarmWnd::InsertCaption_ad(const char* pADString, const char* pADColor)
{
if(NULL == pADString || NULL == pADColor)
return ;
std::string strCaption = "<font:font_01>";
std::string strCaptionColor = pADColor;
strCaption += pADString;
// strCaption += pADColor;
// strCaption += "<left>";
m_pEdit_Advertise->SetCaption(strCaption.c_str());
}
// 이름
void SUICreatureFarmWnd::InsertCaption_name(const char* pNameString)
{
if(NULL == pNameString)
return ;
std::string strCaption = "<font:font_01><#ffffff><size:9><vcenter><hcenter>";
strCaption += pNameString;
m_pStatic_Name->SetCaption(strCaption.c_str());
}
// 티켓 아이템의 아이콘 파일 이름을 얻는다
const char* SUICreatureFarmWnd::GetTicketItemIconName(int nSelectSlotID)
{
if(nSelectSlotID < 0 || nSelectSlotID >= 3)
return NULL;
SAssignData* pSlotData = &m_aAssignData[nSelectSlotID];
if(pSlotData->nTicketType == 1)
{
if (pSlotData->nTicketTermType == 3)
{
pSlotData->strTicketIconFileName = FARM_TICKET_STRING_PRIMIUM_3;
return pSlotData->strTicketIconFileName.c_str();
}
else if(pSlotData->nTicketTermType == 7)
{
pSlotData->strTicketIconFileName = FARM_TICKET_STRING_PRIMIUM_7;
return pSlotData->strTicketIconFileName.c_str();
}
}
else
{
if (pSlotData->nTicketTermType == 2)
{
pSlotData->strTicketIconFileName = FARM_TICKET_STRING_NORMAL_3;
return pSlotData->strTicketIconFileName.c_str();
}
else if(pSlotData->nTicketTermType == 7)
{
pSlotData->strTicketIconFileName = FARM_TICKET_STRING_NORMAL_7;
return pSlotData->strTicketIconFileName.c_str();
}
}
return NULL;
}
// 크래커 아이템의 아이콘 파일 이름을 얻는다
const char* SUICreatureFarmWnd::GetCrackerItemIconName(BOOL bCrackerExist)
{
if(bCrackerExist)
{
return FARM_CRACKER_STRING;
}
return NULL;
}
void SUICreatureFarmWnd::ChangeItemSlot(int nTicketType)
{
if (nTicketType == 0) // 사용권이 아님
{
SetCreatureSlotState(FALSE);
m_pIconStatic_mark_khroo[0]->SetShow(true);
m_pIconStatic_mark_khroo[1]->SetShow(true);
m_pIconStatic_mark_khroo[2]->SetShow(false);
m_bEnableAssign = FALSE;
}
else if(nTicketType == 1) // 일반 사용권
{
if (m_aAssignData[1].bUse == 0 && m_aAssignData[2].bUse == 0)
{
SetCreatureSlotState(FALSE);
m_pIconStatic_mark_khroo[0]->SetShow(true);
m_pIconStatic_mark_khroo[1]->SetShow(true);
m_pIconStatic_mark_khroo[2]->SetShow(false);
}
else if(m_aAssignData[1].bUse == 0 && m_aAssignData[2].bUse == 1)
{
SetCreatureSlotStateEdit(1, FALSE);
m_pIconStatic_mark_khroo[0]->SetShow(true);
m_pIconStatic_mark_khroo[1]->SetShow(false);
m_pIconStatic_mark_khroo[2]->SetShow(false);
}
else if(m_aAssignData[1].bUse == 1 && m_aAssignData[2].bUse == 0)
{
SetCreatureSlotStateEdit(2, FALSE);
m_pIconStatic_mark_khroo[0]->SetShow(false);
m_pIconStatic_mark_khroo[1]->SetShow(true);
m_pIconStatic_mark_khroo[2]->SetShow(false);
}
m_bEnableAssign = TRUE;
}
else if(nTicketType == 2) // 프리미엄 사용권
{
SetCreatureSlotState(TRUE);
m_pIconStatic_mark_khroo[0]->SetShow(false);
m_pIconStatic_mark_khroo[1]->SetShow(false);
m_pIconStatic_mark_khroo[2]->SetShow(false);
m_bEnableAssign = TRUE;
}
else // error
{
SetCreatureSlotState(FALSE);
m_bEnableAssign = FALSE;
}
}
// 현재 비어있는 슬롯의 인덱스를 찾는다
int SUICreatureFarmWnd::SelectEmptySlotIndex()
{
if (m_nTicketType == 0) // 사용권을 갖고 있지 않음
{
return -1;
}
else if(m_nTicketType == 1) // 일반 사용권
{
return 0;
}
else if(m_nTicketType == 2) // 프리미엄 사용권
{
if(m_aAssignData[1].bUse == FALSE)
return 1;
if(m_aAssignData[2].bUse == FALSE)
return 2;
}
return -1;
}
// 현재 크리처 정보 표기를 삭제한다
void SUICreatureFarmWnd::ClearUIDisplay()
{
InsertCaption_ticket_count(""); // 티켓 개수 표시
InsertCaption_cracker_count(""); // 크래커 개수 표시
InsertCaption_remain_time(""); // 맡기기 남은 시간
InsertCaption_cracker(""); // 먹이 이름
ResetMultiIcon( m_pStaticIcon_card, 0, 8 );
m_pStaticIcon_card->SetIcon( 0,"ui_frame.spr", EMPTY_ICON_STRING ); // 얼굴 아이콘
m_pStaticIcon_card->SetTooltip(""); // 툴팁 초기화
InsertCaption_name(""); // 크리처 이름
m_pStatic_Type->SetCaption(" "); // 크리처 타입
m_pStaticIcon_ticket->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 티켓 아이콘
m_pStaticIcon_food->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 크래커 아이콘
InsertCaption_enhance(""); // 강화단계 표시
InsertCaption_current_level(""); // 현재 레벨 표시
InsertCaption_start_level(""); // 시작 레벨
InsertCaption_goal_level(""); // 목표 레벨
g_strTmpIconName_cracker = ""; // 크래커 이름 초기화
m_nTicketType = 0; // 티켓 상태 초기화
g_nTmpFarmUsingCardTerm = 0; // 티켓 기간 초기화
SetElapsedTime(0, 0, 1); // 시간 게이지 리셋
if(m_pDisplayCreature)
{
SAFE_DELETE(m_pDisplayCreature);
SGameWorld* pGameWorld = dynamicCast<SGameWorld*>(m_pGameManager->GetActiveGame());
if(pGameWorld)
{
pGameWorld->GetCommandSystem()->DeleteAvatar(m_hCreature_display);
}
}
m_p3DStatic_Creature->SetShow( false ); // 3D 모델 그리는 창 숨김
m_pIconStatic_mark_khroo[0]->SetShow(true);
m_pIconStatic_mark_khroo[1]->SetShow(true);
if(m_aAssignData[1].bUse == 0)
m_pStatic_lbx_cover[1]->SetShow(true);
else
m_pStatic_lbx_cover[1]->SetShow(false);
if(m_aAssignData[2].bUse == 0)
m_pStatic_lbx_cover[2]->SetShow(true);
else
m_pStatic_lbx_cover[2]->SetShow(false);
g_nTmpCrackerCount = g_nTmpCrackerMaxCount = 0; // 크래커 개수
g_pTempCreatureCardSlot = NULL;
g_nEvolveType = -1;
}
void* SUICreatureFarmWnd::Perform( KID id, KArg& msg )
{
_CID( UI_BEGIN_DRAG );
_CID( UI_SEND_DROP );
_CID( UI_RECV_DROP );
_CID( UI_CALLBACK );
if( id == id_UI_BEGIN_DRAG )
{
if( g_bDisplayAssignningCreature ) //보관중인 크리쳐를 보여줄때는 드래그 금지.
return NULL;
KUIBeginDragMessage* pBeginMsg = static_cast<KUIBeginDragMessage*>( &msg );
const char* szControlID = pBeginMsg->sDragControlID.c_str();
KUIWnd* pWnd = GetChild( szControlID );
if( NULL == pWnd )
return NULL;
LPCSTR pAniName = pWnd->GetAniName();
if(NULL == pAniName)
return NULL;
if( ::_stricmp( pAniName, EMPTY_ICON_STRING_VISIBLE) == 0 )
return NULL;
if( ::_stricmp( pBeginMsg->sDragControlID.c_str(), "creature_card_icon_slot_01" ) == 0 )
{
m_pDisplayInfo->SetUIDragInfo( new SUICreatureFarmDragInfo( m_nSelectCreatureCardHandle, IMSG_UI_CREATURE_REMOVE_CARD ) ); // 크리처 카드
}
else
{
//gmpbigsun( 20130625 ) : 너무 많은 버그로 인하여, 메인카드 이외엔 드래그(빼기) 금지
return NULL;
}
//else if( ::_stricmp( pBeginMsg->sDragControlID.c_str(), "tiket_icon_slot_01" ) == 0 )
//{
// m_pDisplayInfo->SetUIDragInfo( new SUICreatureFarmDragInfo( m_nSelectCreatureCardHandle, IMSG_UI_CREATURE_REMOVE_TICKET ) ); // 티켓 아이콘
//}
//else if( ::_stricmp( pBeginMsg->sDragControlID.c_str(), "food_icon_slot_01" ) == 0 )
//{
// m_pDisplayInfo->SetUIDragInfo( new SUICreatureFarmDragInfo( m_nSelectCreatureCardHandle, IMSG_UI_CREATURE_REMOVE_CARCKER ) ); // 크래커 아이콘
//}
//else // error
//{
// return NULL;
//}
m_pDragAndDropIcon->SetStateIcon( pWnd->GetSprName(), pWnd->GetAniName(), pWnd->GetFrameIndex(), STATE_NORMAL );
pBeginMsg->pDragAndDropRenderer = m_pDragAndDropIcon;
return NULL;
}
else if ( id == id_UI_SEND_DROP )
{
KUISendRecvDropMessage* pSendMsg = static_cast<KUISendRecvDropMessage*>( &msg );
SUIDragInfo* pUIDragInfo = m_pDisplayInfo->GetUIDragInfo();
if( NULL != pUIDragInfo && SUIDragInfo::DRAGTYPE_INVENITEM == pUIDragInfo->m_type )
{
int jj=0;
}
// Drag & Drop 정보 제거
m_pDisplayInfo->SetUIDragInfo();
return NULL;
}
else if ( id == id_UI_RECV_DROP )
{
KUISendRecvDropMessage* pRecvMsg = static_cast<KUISendRecvDropMessage*>( &msg );
/// 2011.03.29 영역은 항상 절대 영역 입니다. - prodongi
KRect rtChild = m_pStatic_DragNDrop->GetRect();
if( !rtChild.IsInRect( pRecvMsg->ptDropPos.x, pRecvMsg->ptDropPos.y ) )
return NULL;
SUIDragInfo* pUIDragInfo = m_pDisplayInfo->GetUIDragInfo();
if( pUIDragInfo == NULL )
return NULL;
SUIInvenItemDragInfo* pItemDragInfo = (SUIInvenItemDragInfo*)pUIDragInfo;
if( pUIDragInfo->m_type == SUIDragInfo::DRAGTYPE_INVENITEM ) // ★ 인벤토리에서 Drag 를 시작한 경우.
{
SInventorySlot* pSlot = m_InventoryMgr.GetItemInfo( pItemDragInfo->m_hItem );
if(NULL == pSlot)
return NULL;
if(true == m_CreatureSlotMgr.IsExistSummonedCreatureByCard(pItemDragInfo->m_hItem)) // 소환되어 있다면 등록 안됌
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN2, 0, -1, S(1160)); // 2011.05.23 - servantes
return NULL;
}
if(true == m_CreatureSlotMgr.IsExistCreatureCard(pItemDragInfo->m_hItem)) // 크리처 편성된 놈이면 등록 안됌
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN3, 0, -1, S(1161)); // 2011.05.16 - servantes
return NULL;
}
const ItemBaseEx_info* pItem = GetItemDB().GetItemData( pSlot->GetItemCode() );
if(NULL == pItem)
return NULL;
if( pSlot->GetEnhance() ) // 강화된 카드이면 // 2011.05.16 - servantes
{
if(pSlot->GetEtherealDurability() <= 0) // 내구도 0이면 등록 못함
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4, 0, -1, S(1159));
return 0;
}
}
/// 2011.03.29 벨트에 등록되어 있는 넘 일 때 - prodongi
if (pItemDragInfo->m_bFromBeltSlot)
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN3, 0, -1, S(1161)); // 2011.05.16 - servantes
return NULL;
}
int iType = pItem->nType; // 아이템 대분류
if(iType == ItemBase::ITEM_TYPE::TYPE_CARD) // 카드 / 아이템 대분류
{
int nGroup = pItem->nGroup; // 아이템 그룹
if(nGroup != ItemBase::ITEM_GROUP::GROUP_SUMMONCARD) // 소환수 카드가 아니면 리턴
{
ResetMultiIcon( m_pStaticIcon_card, 0, 8 );
m_pStaticIcon_card->SetIcon( 0, "ui_frame.spr", EMPTY_ICON_STRING );
return NULL;
}
m_nDisplayCreatureID = 0;
m_nSelectCreatureCardHandle = 0;
m_nDisplayCreatureLevel = 0;
XFlag<int> xflg = pSlot->GetXFlag(); // 2011.06.23 - servantes
int _cost = *(int*)xflg.GetRawData();
if(_cost == 0) // 빈카드라면
return NULL;
char buffer[128]={0};
g_nTempCodeItem = pSlot->GetItemCode(); // 아이템 코드 임시 저장
const _SUMMON_INFO_FILE* pSummonInfo = GetCreatureDB().GetCreatureData( pSlot->GetSummonID() );
if( pSummonInfo == NULL )
{
return NULL;
}
if(true == m_CreatureSlotMgr.IsExistSummonedCreatureByCard(pItemDragInfo->m_hItem)) // 소환되어 있다면 등록 안됌
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN2, 0, -1, S(1160)); // 2011.05.23 - servantes
return NULL;
}
const SCreatureInfo* pInfo = m_CreatureSlotMgr.GetCreatureInfoByCardHandle( pItemDragInfo->m_hItem ); // 편성된적이 적이 없다면 등록 안됌
if(pInfo == NULL)
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN3, 0, -1, S(1160)); // 2011.05.16 - servantes
return 0;
}
SGameAvatarEx* pLocalPlayer = g_pCurrentGameSystem->GetLocalPlayer(); // 2011.05.16 - servantes
if(NULL == pLocalPlayer)
return 0;
//gmpbigsun( 20130530 ) : 조건 제거댐
//if(pLocalPlayer->GetLevel() < pInfo->GetLevel()) // 내 캐릭터의 레벨보다 크리처 레벨이 높으면 맡길 수 없다
//{
// m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4, 0, -1, S(1162)); // 2011.05.16 - servantes
// return 0;
//}
//if(pInfo->GetLevel() >= 100)
//{
// m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4, 0, -1, S(1162)); // 2011.05.16 - servantes
// return 0; // 레벨이 100이상되는 크리처는 맡길 수 없다!!
//}
m_nDisplayCreatureID = pSummonInfo->uid;
m_nSelectCreatureCardHandle = pItemDragInfo->m_hItem; // 현재 선택한 크리처 카드 핸들
m_nOldSelectCreatureCardHandle = m_nSelectCreatureCardHandle;
m_nDisplayCreatureLevel = pInfo->GetLevel();
int nCreatureNameID = 0;
int nEvolveType = 0;
int* pLevel = pSlot->GetItem()->socket;
int nOutLevel = 0;
int nOutEvolveType = 0;
int nOutEvolveCreatureID = 0;
int nOutEvolveCreatureNameID = 0;
int nOutOverBreed = 0;
int nEvolve = CheckEvolve( pSlot->GetItem()->socket, pSummonInfo->nEvolve_target, nOutLevel, nOutEvolveType, nOutEvolveCreatureID, nOutEvolveCreatureNameID, nOutOverBreed );
if(nEvolve == 1) // 진화했다면
{
nCreatureNameID = nOutEvolveCreatureNameID;
m_nDisplayCreatureID = nOutEvolveCreatureID;
nEvolveType = nOutEvolveType;
}
else
{
nCreatureNameID = pSummonInfo->name_id;
m_nDisplayCreatureID = pSummonInfo->uid;
nEvolveType = nOutEvolveType;
}
g_nEvolveType = nEvolveType; // 진화형태 임시 저장
if(g_nEvolveType == SummonBase::EVOLVE_NORMAL)
{
if(nOutLevel >= CFARM_MAXLEVEL_LV1 )
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4, 0, -1, S(1162)); // 2011.05.16 - servantes
return 0;
}
}
if(g_nEvolveType == SummonBase::EVOLVE_GROWTH)
{
if(nOutLevel >= CFARM_MAXLEVEL_LV2 )
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4, 0, -1, S(1162)); // 2011.05.16 - servantes
return 0;
}
}
if(g_nEvolveType == SummonBase::EVOLVE_EVOLVE)
{
if( nOutLevel >= CFARM_MAXLEVEL_LV3 )
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4, 0, -1, S(1162)); // 2011.05.16 - servantes
return 0;
}
}
sprintf(buffer, "%d", m_nDisplayCreatureLevel);
InsertCaption_current_level(buffer); // 레벨
_CREATURE_FARM_INFO* pFarmInfo = GetCreatureFarmDB().GetCreatureFarmData(pSummonInfo->rate, pSlot->GetEnhance(), nEvolveType );
if(pFarmInfo == NULL)
{
return 0;
}
sprintf(buffer, "%d", pSlot->GetEnhance());
InsertCaption_enhance(buffer); //강화 단계 표시
g_nTmpCrackerMaxCount = g_nTmpTicketMaxCount = pFarmInfo->ticket_count; // 농장 이용권 개수, 크래커 최대
// 소환수 카드 아이콘을 찾는다
ResetMultiIcon( m_pStaticIcon_card, 0, 8 );
if( false == setSummonCardIcon( m_pStaticIcon_card, pSlot ) )
{
std::string iconName;
getIconNameAtDurability(pSlot, iconName);
m_pStaticIcon_card->SetIcon( 0, "ui_frame.spr", iconName.c_str() );
}
m_pStaticIcon_card->SetShow( true );
m_pStaticIcon_card->SetLazyTooltip( new KLazyItemTooltip( *m_pDisplayInfo, pSlot, true ) );
// 크리처 3D모델을 컨트롤에 그린다
if( SetShowCreature3DModel(m_nDisplayCreatureID, pSlot->GetEnhance(),m_p3DStatic_Creature) == FALSE )
{
m_pStaticIcon_card->SetIcon( 0, "ui_frame.spr", EMPTY_ICON_STRING );
return NULL;
}
sprintf(buffer, "%s", pInfo->GetName());
InsertCaption_name(buffer); // 이름
sprintf(buffer, "%s", GetStringDB().GetString( nCreatureNameID )); // 타입
m_pStatic_Type->SetCaption(buffer);
g_nTmpTicketCount = 0;
g_nTmpCrackerCount = 0;
sprintf(buffer, "%d / %d", g_nTmpTicketCount, g_nTmpTicketMaxCount);
InsertCaption_ticket_count(buffer); // 티켓 개수 표시
sprintf(buffer, "%d / %d", g_nTmpCrackerCount, g_nTmpCrackerMaxCount);
InsertCaption_cracker_count(buffer); // 크래커 개수 표시
m_pStaticIcon_ticket->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 티켓 아이콘
m_pStaticIcon_food->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 크래커 아이콘
SetElapsedTime(0, 0, 1); // 돌보기 지난 시간을 크리처 정보 인터페이스에 표시한다
sprintf(buffer, "0%s 0%s", S(9103), S(7023));
InsertCaption_remain_time(buffer); // 크리처 돌보기 남은 시간
g_pTempCreatureCardSlot = pSlot; // 크리처 카드 슬롯 임시 저장
//gmpbigsun(20130625) : 제거댐
//CalculateEXP_ex(m_nDisplayCreatureLevel, g_nTempCodeItem, pLevel, FALSE, nEvolveType, 0, 0); // 크리처 시작레벨부터 키운 후 레벨 표기
unsigned char byItemLevel = (ItemBase::TYPE_ARMOR == pItem->nType) ? pItem->level : 0;
ItemBase::BaseFlag baseFlag;
baseFlag.CopyFrom( &pItem->status_flag );
m_pStaticIcon_card->SetTooltip( m_pDisplayInfo->GetItemTooltipText(pSlot, true).c_str() );
if(FALSE == IsEnaleAssin())
m_pBtn_Assign->Disable();
else
m_pBtn_Assign->Enable();
m_pBtn_Regain->Disable();
SetAdvertiseState( REQ_CREATURE_TICKET ); // 농장이용권 도움말 출력
g_bDisplayAssignningCreature = FALSE; // 보관중인 크리처를 보여주는게 아니고 새로운 크리처를 보여준다
}
else
{
if(NULL == m_pDisplayCreature) // 렌더링되는 크리처가 없다면 리턴
return NULL;
if(m_nSelectCreatureCardHandle <= 0) // 카드 넣기 전엔 크래커, 티켓 넣지 못한다
{
InsertCaption_cracker_count(""); // 크래커 개수 표시
InsertCaption_ticket_count(""); // 티켓 개수 표시
InsertCaption_remain_time("");
InsertCaption_cracker("");
return NULL;
}
if(g_bDisplayAssignningCreature) // 보관중인 크리처를 보여주고 있다면
return NULL; // 크래커 등록할 수 없다
ItemBase::ItemClass nClass = GetItemDB().GetClassID( pSlot->GetItemCode() ); // 아이템 계열
if(nClass == ItemBase::ItemClass::CLASS_CRACKER) // 크래커
{
g_nTmpCrackerCount = 0;
m_nCrackerHandle = pItemDragInfo->m_hItem; // 크래커 핸들
count_t tCnt = pSlot->GetItemCount();
if(g_nTmpCrackerCount + tCnt.getAmount() < g_nTmpCrackerMaxCount) // 아이템 개수가 3개보다 작으면
{
g_nTmpCrackerCount += tCnt.getAmount();
m_bCrackerSet = FALSE;
}
else if(g_nTmpCrackerCount + tCnt.getAmount() >= g_nTmpCrackerMaxCount) // 아이템 개수가 3개 이상일 때만 ( 크래커 )
{
g_nTmpCrackerCount = g_nTmpCrackerMaxCount;
if(ItemBase::CLASS_CRACKER != GetItemDB().GetClassID(pSlot->GetItemCode())) // 어떤 종류의 아이템인가 검사
{
m_bCrackerSet = FALSE;
return NULL; // 크래커 종류가 아니면 m_bCrackerSet = FALSE;
}
m_bCrackerSet = TRUE;
}
g_strTmpIconName_cracker = GetItemDB().GetIconName( pSlot->GetItemCode() );
if(g_strTmpIconName_cracker.size())
{
m_pStaticIcon_food->SetShow( true );
m_pStaticIcon_food->SetIcon( "ui_frame.spr", g_strTmpIconName_cracker.c_str() );
}
if(g_nTmpCrackerCount > 0)
{
char aName[64]={0};
sprintf(aName, "%d / %d", g_nTmpCrackerCount, g_nTmpCrackerMaxCount);
InsertCaption_cracker_count(aName); // 크래커 개수 표시
const char* szCrackerName = GetStringDB().GetString( GetItemDB().GetTextID( pSlot->GetItemCode() ) );
InsertCaption_cracker( szCrackerName ); //S(12902161) );
}
BOOL bUseCracker = FALSE;
if(g_nTmpCrackerCount == g_nTmpCrackerMaxCount)
bUseCracker = TRUE;
if(NULL == g_pTempCreatureCardSlot)
return NULL;
int* pLevel = g_pTempCreatureCardSlot->GetItem()->socket; // 크리처 카드 슬롯 임시 저장했던 것에서 소켓을 꺼낸다
if(NULL == pLevel)
return NULL;
CalculateEXP_ex(m_nDisplayCreatureLevel, g_pTempCreatureCardSlot->GetSummonID(), g_nTempCodeItem, pLevel, bUseCracker, g_nEvolveType, g_nTmpFarmUsingCardTerm, g_nTmpFarmUsingCardType); // 크리처 시작레벨부터 키운 후 레벨 표기
if(FALSE == IsEnaleAssin())
m_pBtn_Assign->Disable();
else
m_pBtn_Assign->Enable();
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER );
}
else if(nClass == ItemBase::ItemClass::CLASS_FARM_TICKET) // 농장이용권
{
if(NULL == m_pDisplayCreature) // 렌더링되는 크리처가 없다면 리턴
return NULL;
if(g_bDisplayAssignningCreature) // 보관중인 크리처를 보여주고 있다면
return NULL; // 농장이용권 등록할 수 없다
m_nTicketHandle = pItemDragInfo->m_hItem; // 티켓 핸들
m_nTicketType = 0; // 티켓 넣지 않은 상태
g_nTmpTicketCount = 0;
count_t tCnt = pSlot->GetItemCount();
if(g_nTmpTicketCount + tCnt.getAmount() < g_nTmpTicketMaxCount) // 아이템 개수가 3개보다 작으면
{
g_nTmpTicketCount += tCnt.getAmount();
m_nTicketType = 0;
}
else if(g_nTmpTicketCount + tCnt.getAmount() >= g_nTmpTicketMaxCount) // 아이템 개수가 3개 이상일 때만 ( 티켓 )
{
g_nTmpTicketCount = g_nTmpTicketMaxCount;
double opv1, opv2;
if(false == GetItemDB().GetOptionVar( pSlot->GetItemCode(), 0, iType, opv1, opv2)) // 아이템의 추가성능을 얻는다
{
m_nTicketType = 0;
return NULL;
}
int nTermType = int( (float)opv1 / ((float)(60.0f * 60.0f * 24.0f)) );
g_nTmpFarmUsingCardTerm = nTermType; // 몇일 짜리 티켓인지 설정
if((float)opv2 == 1.0f) // 캐쉬 아이템이면 캐쉬 아이템 모드로 UI 변경
{
m_nTicketType = 2; // 프리미엄 사용권
g_nTmpFarmUsingCardType = m_nTicketType; // 농장이용권의 타입 : 프리미엄 / 일반
char strTerm[128]={0}; // 일:9103 / 시간:7023
sprintf(strTerm, "%d%s 0%s", nTermType, S(9103), S(7023));
InsertCaption_remain_time(strTerm);
ChangeItemSlot( m_nTicketType );
m_pIconStatic_letter_mark_khroo[0]->SetShow(false);
m_pIconStatic_letter_mark_khroo[1]->SetShow(false);
m_pStatic_lbx_cover[1]->SetShow(false);
m_pStatic_lbx_cover[2]->SetShow(false);
}
else
{
m_nTicketType = 1; // 일반 사용권
g_nTmpFarmUsingCardType = m_nTicketType; // 농장이용권의 타입 : 프리미엄 / 일반
//gmpbigsun( 20130619 ) : 일반사용권의 경우 레벨검사
SGameAvatarEx* pLocalPlayer = g_pCurrentGameSystem->GetLocalPlayer(); // 2011.05.16 - servantes
if(NULL == pLocalPlayer)
return NULL;
if(NULL == g_pTempCreatureCardSlot)
return NULL;
const SCreatureInfo* pInfo = m_CreatureSlotMgr.GetCreatureInfoByCardHandle( g_pTempCreatureCardSlot->GetHandle() ); // 편성된적이 적이 없다면 등록 안됌
if(pInfo == NULL)
return 0;
if(pLocalPlayer->GetLevel() < pInfo->GetLevel()) // 내 캐릭터의 레벨보다 크리처 레벨이 높으면 맡길 수 없다
{
m_pGameManager->GetGameInterface()->OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4, 0, -1, S(1162)); // 2011.05.16 - servantes
return NULL;
}
char strTerm[128]={0}; // 일:9103 / 시간:7023
sprintf(strTerm, "%d%s 0%s", nTermType, S(9103), S(7023));
InsertCaption_remain_time(strTerm);
ChangeItemSlot( m_nTicketType );
if(m_aAssignData[1].bUse)
{
m_pIconStatic_letter_mark_khroo[0]->SetShow(false);
m_pStatic_lbx_cover[1]->SetShow(false);
}
else
{
m_pIconStatic_letter_mark_khroo[0]->SetShow(true);
m_pStatic_lbx_cover[1]->SetShow(true);
}
if(m_aAssignData[2].bUse)
{
m_pIconStatic_letter_mark_khroo[1]->SetShow(false);
m_pStatic_lbx_cover[2]->SetShow(false);
}
else
{
m_pIconStatic_letter_mark_khroo[1]->SetShow(true);
m_pStatic_lbx_cover[2]->SetShow(true);
}
}
}
// 아이템 개수 관련 처리 - 서버에 패킷 보낸다
m_pIconStatic_mark_khroo[0]->SetShow(true);
m_pIconStatic_mark_khroo[1]->SetShow(true);
std::string strIconName_ticket = GetItemDB().GetIconName( pSlot->GetItemCode() );
if(strIconName_ticket.size())
{
m_pStaticIcon_ticket->SetShow( true );
m_pStaticIcon_ticket->SetIcon( "ui_frame.spr", strIconName_ticket.c_str() );
}
if(g_nTmpTicketCount > 0)
{
char aName[64]={0};
sprintf(aName, "%d / %d", g_nTmpTicketCount, g_nTmpTicketMaxCount);
InsertCaption_ticket_count(aName); // 티켓 개수 표시
}
BOOL bUseCracker = FALSE;
if(g_nTmpCrackerCount == g_nTmpCrackerMaxCount)
bUseCracker = TRUE;
if(NULL == g_pTempCreatureCardSlot)
return NULL;
int* pLevel = g_pTempCreatureCardSlot->GetItem()->socket; // 크리처 카드 슬롯 임시 저장했던 것에서 소켓을 꺼낸다
if(NULL == pLevel)
return NULL;
//!gmpbigsun: pSlot->GetSummonID() ==> g_pTempCreatureCardSlot->GetSummonID()
CalculateEXP_ex(m_nDisplayCreatureLevel, g_pTempCreatureCardSlot->GetSummonID(), g_nTempCodeItem, pLevel, bUseCracker, g_nEvolveType, g_nTmpFarmUsingCardTerm, g_nTmpFarmUsingCardType ); // 크리처 시작레벨부터 키운 후 레벨 표기
if(FALSE == IsEnaleAssin())
m_pBtn_Assign->Disable();
else
m_pBtn_Assign->Enable();
SetAdvertiseState( REQ_CREATURE_CRACKER ); // 크래커 도움말 출력
}
else
{
m_pBtn_Assign->Disable();
return NULL;
}
}
}
} // id_UI_RECV_DROP
return SUIWnd::Perform( id, msg );
}
void SUICreatureFarmWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam )
{
switch(nMessage)
{
case KUI_MESSAGE::KICON_DBLCLK:
{
if( ::_stricmp( lpszControlID, "creature_card_icon_slot_01" ) == 0 ) // 크리처 카드 슬롯
{
ClearUIDisplay(); // 크리처 정보창의 내용 삭제
m_pBtn_Assign->Disable();
m_pBtn_Regain->Disable();
m_pStatic_SelectSlot->SetShow(false); // 선택한 슬롯 표시
if(m_aAssignData[1].bUse == 0)
m_pStatic_lbx_cover_txt[0]->SetShow(true);
else
m_pStatic_lbx_cover_txt[0]->SetShow(false);
if(m_aAssignData[2].bUse == 0)
m_pStatic_lbx_cover_txt[1]->SetShow(true);
else
m_pStatic_lbx_cover_txt[1]->SetShow(false);
SetAdvertiseState( REQ_CREATURE_ASSIGN );
}
//gmpbigsun( 20130625 ) : 더블클릭으로 티켓과 크래커 빼는기능 막음.
//else if( ::_stricmp( lpszControlID, "tiket_icon_slot_01" ) == 0 ) // 티켓 슬롯
//{
// if(g_bDisplayAssignningCreature) // 2011.05.27 - servantes // 보관중인 크리처를 보여주는 경우엔 티켓 초기화하지 못함
// return ;
// m_pStaticIcon_ticket->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 티켓 아이콘
// char str[64]={0};
// sprintf(str, "0 / %d", g_nTmpTicketMaxCount);
// InsertCaption_ticket_count(str); // 티켓 개수 표시
// //added by gmpbigsun
// SetElapsedTime(0, 0, 1); // 돌보기 지난 시간을 크리처 정보 인터페이스에 표시한다
// sprintf(str, "0%s 0%s", S(9103), S(7023));
// InsertCaption_remain_time(str); // 크리처 돌보기 남은 시간
// g_nTmpTicketCount = 0; // 티켓 개수 초기화
// m_nTicketType = 0; // 티켓 상태 초기화
// g_nTmpFarmUsingCardTerm = 0; // 티켓 기간 초기화
//
// m_pIconStatic_mark_khroo[0]->SetShow(true);
// m_pIconStatic_mark_khroo[1]->SetShow(true);
// if(m_aAssignData[1].bUse == 0)
// m_pStatic_lbx_cover[1]->SetShow(true);
// else
// m_pStatic_lbx_cover[1]->SetShow(false);
// if(m_aAssignData[2].bUse == 0)
// m_pStatic_lbx_cover[2]->SetShow(true);
// else
// m_pStatic_lbx_cover[2]->SetShow(false);
// if(FALSE == IsEnaleAssin())
// m_pBtn_Assign->Disable();
// else
// m_pBtn_Assign->Enable();
// m_pStatic_SelectSlot->SetShow(false); // 선택한 슬롯 표시
// SetAdvertiseState( REQ_CREATURE_TICKET );
//}
//else if( ::_stricmp( lpszControlID, "food_icon_slot_01" ) == 0 ) // 크래커 슬롯
//{
// if(g_bDisplayAssignningCreature) // 2011.05.27 - servantes // 보관중인 크리처를 보여주는 경우엔 크래커 초기화하지 못함
// return ;
// g_strTmpIconName_cracker = ""; // 크래커 이름 초기화
// m_pStaticIcon_food->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 크래커 아이콘
// char str[64]={0};
// sprintf(str, "0 / %d", g_nTmpCrackerMaxCount);
// InsertCaption_cracker_count(str); // 크래커 개수 표시
// InsertCaption_cracker( "" );
// g_nTmpCrackerCount = 0; // 넣었던 크래커 개수 초기화
// if(FALSE == IsEnaleAssin())
// m_pBtn_Assign->Disable();
// else
// m_pBtn_Assign->Enable();
// m_pStatic_SelectSlot->SetShow(false); // 선택한 슬롯 표시
// SetAdvertiseState( REQ_CREATURE_CRACKER );
//}
break;
}
case KUI_MESSAGE::KICON_RCLICK:
{
if( ::_stricmp( lpszControlID, "creature_card_icon_slot_01" ) == 0 ) // 크리처 카드
{
const char* pStr = m_pStaticIcon_card->GetAniName();
if(NULL == pStr)
break;
if( ::_stricmp( pStr, EMPTY_ICON_STRING ) == 0 )
break;
if (isAssignedCreature(m_nSelectCreatureCardHandle))
{
SMSG_SUMMON_CARD_ITEM_INFO msg;
msg.level = m_selectCreatureCurLevel;
memcpy(&msg.item_info, &m_aAssignData[m_nSelectCreatureSlot].card_info, sizeof (msg.item_info));
m_pGameManager->ProcMsgAtStatic(&msg);
}
else
{
SMSG_SUMMON_CARD creatureCardMsg;
creatureCardMsg.card_handle = m_nSelectCreatureCardHandle;
m_pGameManager->ProcMsgAtStatic( &creatureCardMsg );
}
}
break;
}
case KUI_MESSAGE::KBUTTON_PRESSING:
{
if( (::_stricmp( lpszControlID, "button_close" ) == 0 ) || (::_stricmp( lpszControlID, "button_close_01" ) == 0) )
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_FRAM_WND, false ) );
}
else if( ::_stricmp( lpszControlID, "button_list_01" ) == 0 ) // 크리처 슬롯 1 / 일반 티켓만 사용가능
{
if(SetCreatureInfoDisplay( 0 ))
g_bDisplayAssignningCreature = TRUE; // 보관중인 크리처를 보여주고 있다
else
{
g_bDisplayAssignningCreature = FALSE; //
}
KRect rtParent = m_pBtn_list_item[0]->GetRect();
m_pStatic_SelectSlot->SetShow(true);
m_pStatic_SelectSlot->MovePos(rtParent.left, rtParent.top);
if(m_aAssignData[0].bUse == FALSE)
{
ClearUIDisplay(); // 크리처 정보창의 내용 삭제
m_pBtn_Assign->Disable();
m_pBtn_Regain->Disable();
SetAdvertiseState( REQ_CREATURE_ASSIGN );
}
else // 기간 만료되지 않았을 경우
{
m_pBtn_Regain->Enable();
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER );
}
// 광고판 출력
if(IsExistAssignCreature())
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER ); // 크리처 맡긴 후 도움말 출력
else
SetAdvertiseState( REQ_CREATURE_ASSIGN ); // 크리처 맡기기 도움말 출력
m_pBtn_Assign->Disable();
}
else if( ::_stricmp( lpszControlID, "button_list_02" ) == 0 ) // 크리처 슬롯 2
{
KRect rtParent = m_pBtn_list_item[1]->GetRect();
m_pStatic_SelectSlot->SetShow(true);
m_pStatic_SelectSlot->MovePos(rtParent.left, rtParent.top);
if(m_aAssignData[1].bUse == FALSE) // 기간 만료 안됐고 사용하지 않을 경우
{
ClearUIDisplay(); // 크리처 정보창의 내용 삭제
m_pBtn_Assign->Disable();
m_pBtn_Regain->Disable();
SetAdvertiseState( REQ_CREATURE_ASSIGN );
}
if(m_bEnableCashItem == FALSE)
break;
if(SetCreatureInfoDisplay( 1 ))
g_bDisplayAssignningCreature = TRUE; // 보관중인 크리처를 보여주고 있다
else
{
g_bDisplayAssignningCreature = FALSE; //
}
if(m_aAssignData[1].bUse == FALSE) // 기간 만료 안됐고 사용하지 않을 경우
{
ClearUIDisplay(); // 크리처 정보창의 내용 삭제
m_pBtn_Assign->Disable();
m_pBtn_Regain->Disable();
SetAdvertiseState( REQ_CREATURE_ASSIGN );
}
else // 기간 만료되지 않았을 경우
{
m_pBtn_Regain->Enable();
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER );
}
// 광고판 출력
if(IsExistAssignCreature())
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER ); // 크리처 맡긴 후 도움말 출력
else
SetAdvertiseState( REQ_CREATURE_ASSIGN ); // 크리처 맡기기 도움말 출력
m_pBtn_Assign->Disable();
}
else if( ::_stricmp( lpszControlID, "button_list_03" ) == 0 ) // 크리처 슬롯 3
{
KRect rtParent = m_pBtn_list_item[2]->GetRect();
m_pStatic_SelectSlot->SetShow(true);
m_pStatic_SelectSlot->MovePos(rtParent.left, rtParent.top);
if(m_aAssignData[2].bUse == FALSE) // 기간 만료 안됐고 사용하지 않을 경우
{
ClearUIDisplay(); // 크리처 정보창의 내용 삭제
m_pBtn_Assign->Disable();
m_pBtn_Regain->Disable();
SetAdvertiseState( REQ_CREATURE_ASSIGN );
}
if(m_bEnableCashItem == FALSE)
break;
if(SetCreatureInfoDisplay( 2 ))
g_bDisplayAssignningCreature = TRUE; // 보관중인 크리처를 보여주고 있다
else
{
g_bDisplayAssignningCreature = FALSE; //
}
if(m_aAssignData[2].bUse == FALSE) // 기간 만료 안됐고 사용하지 않을 경우
{
ClearUIDisplay(); // 크리처 정보창의 내용 삭제
m_pBtn_Assign->Disable();
m_pBtn_Regain->Disable();
SetAdvertiseState( REQ_CREATURE_ASSIGN );
}
else // 기간 만료되지 않았을 경우
{
m_pBtn_Regain->Enable();
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER );
}
// 광고판 출력
if(IsExistAssignCreature())
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER ); // 크리처 맡긴 후 도움말 출력
else
SetAdvertiseState( REQ_CREATURE_ASSIGN ); // 크리처 맡기기 도움말 출력
m_pBtn_Assign->Disable();
}
else if( ::_stricmp( lpszControlID, "button_tiket_buy_01" ) == 0 ) // 크리처 농장 이용권 버튼
{
OnSendPacket_OpenMarket(); //2011.06.16 - servantes
}
else if( ::_stricmp( lpszControlID, "button_leave_01" ) == 0 ) // 크리처 맡기기 버튼
{
if(m_bEnableAssign == FALSE)
break;
if(FALSE == IsEnaleAssin())
break;
/// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi
m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_CREATURE_FARM_ASSIGN_OKCANCEL, S(1137), true) );
}
else if( ::_stricmp( lpszControlID, "button_regain_01" ) == 0 ) // 크리처 되찾기 버튼
{
/// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi
m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_CREATURE_FARM_REGAIN_OKCANCEL, S(1152), true) );
}
else if( ::_stricmp( lpszControlID, "button_ministration_01" ) == 0 ) // 크리처 돌보기 버튼1
{
// 맡기기 기간보다 맡기 후 지난 시간이 더 길면 이 크리처는 보관 30일 기간중에 있는 크리처 임으로
// 돌보기 동작이 되지 않도록 기능을 비활성화 시킨다
if(m_aAssignData[0].duration < m_aAssignData[0].elasped_time)
break;
if(m_aAssignData[0].bUse == FALSE || m_aAssignData[0].codeCreature == 0 || m_aAssignData[0].refresh_time > 0)
break;
g_nNurseCreatureSlotID = 0;
OnSendPacket_Nurse( m_aAssignData[0].card_info.handle ); // 서버에게 크리처 돌본다고 알린다
}
else if( ::_stricmp( lpszControlID, "button_ministration_02" ) == 0 ) // 크리처 돌보기 버튼2
{
// 맡기기 기간보다 맡기 후 지난 시간이 더 길면 이 크리처는 보관 30일 기간중에 있는 크리처 임으로
// 돌보기 동작이 되지 않도록 기능을 비활성화 시킨다
if(m_aAssignData[1].duration < m_aAssignData[1].elasped_time)
break;
if(m_aAssignData[1].bUse == FALSE || m_bEnableCashItem == FALSE || m_aAssignData[1].codeCreature == 0 || m_aAssignData[1].refresh_time > 0)
break;
g_nNurseCreatureSlotID = 1;
OnSendPacket_Nurse( m_aAssignData[1].card_info.handle ); // 서버에게 크리처 돌본다고 알린다
}
else if( ::_stricmp( lpszControlID, "button_ministration_03" ) == 0 ) // 크리처 돌보기 버튼3
{
// 맡기기 기간보다 맡기 후 지난 시간이 더 길면 이 크리처는 보관 30일 기간중에 있는 크리처 임으로
// 돌보기 동작이 되지 않도록 기능을 비활성화 시킨다
if(m_aAssignData[2].duration < m_aAssignData[2].elasped_time)
break;
if(m_aAssignData[2].bUse == FALSE || m_bEnableCashItem == FALSE || m_aAssignData[2].codeCreature == 0 || m_aAssignData[2].refresh_time > 0)
break;
g_nNurseCreatureSlotID = 2;
OnSendPacket_Nurse( m_aAssignData[2].card_info.handle ); // 서버에게 크리처 돌본다고 알린다
}
else if(::_stricmp( lpszControlID, "button_help" ) == 0) // 도움말 버튼
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_FRAM_HELP_WND, true ) );
}
break;
}
case KUI_MESSAGE::KGENWND_MOVE: // 윈도우 이동
{
LimitMoveWnd(); // 게임 외부로 나가지 못하게 제한
break;
}
}
SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam );
}
void SUICreatureFarmWnd::ProcMsgAtStatic( SGameMessage* pMsg )
{
switch(pMsg->nType)
{
case IMSG_UI_CREATURE_DATA:
{
SIMSG_UI_CREATURE_DATA* pRMsg = (SIMSG_UI_CREATURE_DATA*)pMsg;
if(pRMsg->type == IMSG_UI_CREATURE_DATA_TAKECARE_BTN)
{
if(pRMsg->id_string == 0)
m_pBtn_lbx_Assign[ pRMsg->index ]->Disable(); // 돌보기 버튼 비활성화
else if(pRMsg->id_string == 1)
m_pBtn_lbx_Assign[ pRMsg->index ]->Enable(); // 돌보기 버튼 활성화
}
break;
}
case IMSG_UI_CREATURE: // 2011.03.15
{
SIMSG_UI_CREATURE* pRMsg = (SIMSG_UI_CREATURE*)pMsg;
if (pRMsg->nMsg == IMSG_UI_CREATURE_REMOVE_CARD)
{
ClearUIDisplay(); // 크리처 정보창의 내용 삭제
m_pBtn_Assign->Disable();
SetAdvertiseState( REQ_CREATURE_ASSIGN );
}
else if(pRMsg->nMsg == IMSG_UI_CREATURE_REMOVE_TICKET)
{
m_pStaticIcon_ticket->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 티켓 아이콘
char str[64]={0};
sprintf(str, "0 / %d", g_nTmpTicketMaxCount);
InsertCaption_ticket_count(str); // 티켓 개수 표시
InsertCaption_goal_level(""); // 목표 레벨 표시
InsertCaption_start_level(""); // 시작 레벨 표시
m_nTicketType = 0; // 티켓 상태 초기화
g_nTmpFarmUsingCardTerm = 0; // 티켓 기간 초기화
m_pIconStatic_mark_khroo[0]->SetShow(true);
m_pIconStatic_mark_khroo[1]->SetShow(true);
if(m_aAssignData[1].bUse == 0)
m_pStatic_lbx_cover[1]->SetShow(true);
else
m_pStatic_lbx_cover[1]->SetShow(false);
if(m_aAssignData[2].bUse == 0)
m_pStatic_lbx_cover[2]->SetShow(true);
else
m_pStatic_lbx_cover[2]->SetShow(false);
if(FALSE == IsEnaleAssin())
m_pBtn_Assign->Disable();
else
m_pBtn_Assign->Enable();
SetAdvertiseState( REQ_CREATURE_TICKET );
}
else if(pRMsg->nMsg == IMSG_UI_CREATURE_REMOVE_CARCKER)
{
g_strTmpIconName_cracker = ""; // 크래커 이름 초기화
m_pStaticIcon_food->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 크래커 아이콘
char str[64]={0};
sprintf(str, "0 / %d", g_nTmpCrackerMaxCount);
InsertCaption_cracker_count(str); // 크래커 개수 표시
g_nTmpCrackerCount = 0; // 넣었던 크래커 개수 초기화
if(FALSE == IsEnaleAssin())
m_pBtn_Assign->Disable();
else
m_pBtn_Assign->Enable();
SetAdvertiseState( REQ_CREATURE_CRACKER );
}
break;
}
case IMSG_UI_SEND_DATA:
{
SIMSG_UI_SEND_DATA* pRMsg = (SIMSG_UI_SEND_DATA*)pMsg;
if(0 == ::_strcmpi(pRMsg->m_strString.c_str(), "assign") )
{
if(pRMsg->m_nNumber == 0)
{
OnSendPacket_AssignCreature( m_nSelectCreatureCardHandle ); // 서버에 크리처 맡기기 패킷을 보낸다
}
}
else if(0 == ::_strcmpi(pRMsg->m_strString.c_str(), "regain") )
{
if(pRMsg->m_nNumber == 0)
{
OnSendPacket_RegainCreature( m_nSelectCreatureCardHandle ); // 서버에 크리처 되찾기 패킷을 보낸다
}
}
break;
}
case MSG_RESULT_RETRIEVE: // 크리처 되찾기 결과
{
SMSG_RESULT_REGAIN* pRMsg = (SMSG_RESULT_REGAIN*)pMsg;
if(pRMsg->result) // 서버로부터 크리처 맡기기 성공 답변옴
{
Regain( m_nSelectCreatureSlot ); // UI상에서의 되찾기 처리
// 광고판 출력
if(IsExistAssignCreature())
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER ); // 크리처 맡긴 후 도움말 출력
else
SetAdvertiseState( REQ_CREATURE_ASSIGN ); // 크리처 맡기기 도움말 출력
if( (m_aAssignData[0].bUse == 1 && m_aAssignData[1].bUse == 0 && m_aAssignData[2].bUse == 0) ||
(m_aAssignData[0].bUse == 0 && m_aAssignData[1].bUse == 0 && m_aAssignData[2].bUse == 0) )
{
SetCreatureSlotState(FALSE); // 크리처 슬롯 상태를 변경한다 FALSE = 캐쉬아이템 사용하지 않음 / TRUE = 캐쉬 아이템 사용
}
}
break;
}
case MSG_RESULT_NURSE:
{
SMSG_RESULT_NURSE* pRMsg = (SMSG_RESULT_NURSE*)pMsg;
if(pRMsg->result) // 서버로부터 크리처 맡기기 성공 답변옴
{
m_pBtn_lbx_Assign[ g_nNurseCreatureSlotID ]->Disable(); // 돌보기 버튼 비활성화
if(pRMsg->result == 1) // 그냥 성공
{
/// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi
//m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GENERAL, S(91000382), true) );
m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GENERAL, S(91000382), true) );
OnSendPacket_RequestCreatureFarmInfo();
}
else if(pRMsg->result == 2) // 선물 받으며 성공
{
/// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi
//m_pGameManager->ProcMsgAtStatic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GENERAL, S(91000383), true) );
m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GENERAL, S(91000383), true) );
OnSendPacket_RequestCreatureFarmInfo();
}
}
break;
}
case MSG_RESULT_FOSTER: // 2011.02.25 - servantes
{
SMSG_RESULT_FOSTER* pFMsg = (SMSG_RESULT_FOSTER*)pMsg;
if(pFMsg->result) // 서버로부터 크리처 맡기기 성공 답변옴
{
OnSendPacket_RequestCreatureFarmInfo(); // 크리처 농장 정보 요청
}
break;
}
case MSG_CREATURE_FARM_INFO: // 2011.02.23 - servantes
{
SMSG_CREATURE_FARM_INFO* pFMsg = (SMSG_CREATURE_FARM_INFO*)pMsg;
ClearUIDisplay(); // 현재 크리처 정보 표기를 삭제한다
m_aAssignData[ 0 ].Clear();
m_aAssignData[ 1 ].Clear();
m_aAssignData[ 2 ].Clear();
Regain( 0 );
Regain( 1 );
Regain( 2 );
#ifdef _COUNTRY_ME_
m_pEdit_Advertise->setCaptionScroll(true, true, sSpritePrimitiveScrollType::RIGHT, g_fAdvertiseTime, 0.1f);
#else
m_pEdit_Advertise->setCaptionScroll(true, true, sSpritePrimitiveScrollType::LEFT, g_fAdvertiseTime, 0.1f);
#endif
if(pFMsg->creature_count <= 0)
break;
SAssignData* pTData = new SAssignData;
int nInsertID = 0;
int nPacketDataIndex=0;
for(int k=0; k<3; k++)
{
if(k != pFMsg->pInfoList[ nPacketDataIndex ].index)
continue;
if(pFMsg->pInfoList[ nPacketDataIndex ].using_cash) // 캐쉬 아이템 사용했는가
nInsertID = k;
if(pFMsg->pInfoList[ nPacketDataIndex ].elasped_time > KEEP_TIME)
{
nPacketDataIndex++;
continue;
}
pTData->bUse = TRUE; // 사용여부
pTData->nIndex = pFMsg->pInfoList[ nPacketDataIndex ].index; // 인덱스
pTData->duration = pFMsg->pInfoList[ nPacketDataIndex ].duration; // 돌보는 기간
pTData->idCard = pFMsg->pInfoList[ nPacketDataIndex ].card_info.Code; // 카드의 디비 아이디
pTData->elasped_time = pFMsg->pInfoList[ nPacketDataIndex ].elasped_time; // 맡기기 한 후 지난 시간
pTData->refresh_time = pFMsg->pInfoList[ nPacketDataIndex ].refresh_time; // 돌보기 할 수 있는 시점까지 남은 시간
pTData->using_cash = pFMsg->pInfoList[ nPacketDataIndex ].using_cash; // 캐쉬 아이템 사용했는가
pTData->using_cracker = pFMsg->pInfoList[ nPacketDataIndex ].using_cracker; // 크래커 아이템 사용했는가
pTData->exp = pFMsg->pInfoList[ nPacketDataIndex ].exp; // 경험치
strcpy( pTData->name, pFMsg->pInfoList[ nPacketDataIndex ].name); // 크리처 이름
const ItemBaseEx_info* pItemData = GetItemDB().GetItemData( pTData->idCard );
if( pItemData == NULL )
break ;
pTData->codeCreature = pFMsg->pInfoList[ nPacketDataIndex ].card_info.summon_id; // 크리처 디비 아이디
_SUMMON_INFO_FILE* pSummon = GetCreatureDB().GetCreatureData( pTData->codeCreature );
if( pSummon == NULL )
break ;
memcpy(&pTData->card_info, &pFMsg->pInfoList[ nPacketDataIndex ].card_info, sizeof(pFMsg->pInfoList[ nPacketDataIndex ].card_info)); // 카드 정보 복사
m_aAssignData[ nInsertID ] = pTData;
m_aAssignData[ nInsertID ].idEvolutionTypeName = pSummon->name_id; // 진화 형태 이름
m_aAssignData[ nInsertID ].evolution_grade = SummonBase::EVOLVE_NORMAL; // 진화하지 않은 상태
InsertCaption_enhance(""); // 강화단계 표시
InsertCaption_current_level(""); // 현재 레벨 표시
if(pTData->using_cash) // 캐쉬아이템을 사용한다면
{
ChangeItemSlot( 2 ); // 프리미엄 사용권
m_aAssignData[ nInsertID ].nTicketType = 2;
}
else
{
ChangeItemSlot( 1 ); // 일반 사용권
m_aAssignData[ nInsertID ].nTicketType = 1;
}
if(pTData->elasped_time >= pTData->duration) // 기간 만료
{
m_pBtn_lbx_Assign[ nInsertID ]->Disable();
}
else // 기간 남아 있음
{
if(pTData->refresh_time == 0) // 돌보기 활성화 시간이 0이면 돌보기 가능
m_pBtn_lbx_Assign[ nInsertID ]->Enable();
else
m_pBtn_lbx_Assign[ nInsertID ]->Disable();
}
char aName[64]={0};
sprintf(aName, "tiket_icon_slot_%02d", nInsertID + 2);
KUIControlIconStatic* pICS = dynamicCast< KUIControlIconStatic* > (GetChild( aName )); // 크루샵 아이콘 표시 2
if(pICS == NULL)
break ;
if(pTData->using_cash)
{
int nDurationType = TIME_CALCULATE_DATE(pTData->duration);
// if(nDurationType == 3)
pICS->SetIcon( "ui_frame.spr",FARM_TICKET_STRING_PRIMIUM_3 ); // 티켓 아이콘
// else if(nDurationType == 7)
// pICS->SetIcon( "ui_frame.spr",FARM_TICKET_STRING_PRIMIUM_7 );
m_aAssignData[ nInsertID ].nTicketTermType = nDurationType;
}
else
{
int nDurationType = TIME_CALCULATE_DATE(pTData->duration);
// if(nDurationType == 3)
pICS->SetIcon( "ui_frame.spr", FARM_TICKET_STRING_NORMAL_3 );
// else if(nDurationType == 7)
// pICS->SetIcon( "ui_frame.spr",FARM_TICKET_STRING_NORMAL_7 ); // 티켓 아이콘
m_aAssignData[ nInsertID ].nTicketTermType = nDurationType;
}
sprintf(aName, "food_icon_slot_%02d", nInsertID + 2);
pICS = dynamicCast< KUIControlIconStatic* > (GetChild( aName )); // 크루샵 아이콘 표시 2
if(pICS == NULL)
break;
if(pTData->using_cracker)
pICS->SetIcon( "ui_frame.spr", FARM_CRACKER_STRING ); // 크래커 아이콘
else
pICS->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING_VISIBLE );
const ItemBaseEx_info* rItemBase = GetItemDB().GetItemData( m_aAssignData[ nInsertID ].card_info.Code );
if(rItemBase == NULL)
return ;
int _cost = pTData->card_info.Flag; // 2011.06.23 - servantes
if(_cost == 0) // 빈카드라면
return ;
const _SUMMON_INFO_FILE* pSummonInfo = GetCreatureDB().GetCreatureData( pTData->codeCreature );
if( pSummonInfo == NULL )
return ;
int nOutLevel = 0;
int nOutEvolveType = 0;
int nOutEvolveCreatureID = 0;
int nOutEvolveCreatureNameID = 0;
int nOutOverBreed = 0;
// int nEvolve = CheckEvolve( pTData->card_info.socket, pSummonInfo->nEvolve_target, nOutLevel, nOutEvolveType, nOutEvolveCreatureID, nOutEvolveCreatureNameID, nOutOverBreed );
int nEvolve = CheckEvolve( pTData->card_info.socket, pSummonInfo->uid, nOutLevel, nOutEvolveType, nOutEvolveCreatureID, nOutEvolveCreatureNameID, nOutOverBreed );
if(nEvolve == 1) // 진화했다면
{
m_aAssignData[ nInsertID ].idEvolutionTypeName = nOutEvolveCreatureNameID;
m_aAssignData[ nInsertID ].evolution_grade = nOutEvolveType;
m_aAssignData[ nInsertID ].codeCreature = nOutEvolveCreatureID;
}
else if( nEvolve == 2 )
{
m_aAssignData[ nInsertID ].idEvolutionTypeName = pSummonInfo->name_id;
m_aAssignData[ nInsertID ].evolution_grade = nOutEvolveType;
m_aAssignData[ nInsertID ].codeCreature = pSummonInfo->uid;
}
sprintf(aName, "%d", nOutLevel);
InsertCaption_LV_slot( nInsertID, aName ); // 현재 레벨
SetCreatureInfo( nInsertID ); // 슬롯에 크리처 정보 설정
// 슬롯에 현재 성장중인 레벨 표시
CalculateEXP_ex_slot(nInsertID, pTData->codeCreature, pTData->card_info.level, pTData->card_info.Code, pTData->card_info.socket, pTData->using_cracker,
m_aAssignData[ nInsertID ].evolution_grade, m_aAssignData[ nInsertID ].nTicketTermType, m_aAssignData[ nInsertID ].nTicketType );
m_pStatic_lbx_Time[nInsertID ]->SetShow(true);
m_CreatureAssignStateMgr.SetInfo(nInsertID, m_aAssignData[ nInsertID ].bUse,
m_aAssignData[ nInsertID ].duration, m_aAssignData[ nInsertID ].duration_elasped,
m_aAssignData[ nInsertID ].elasped_time, m_aAssignData[ nInsertID ].refresh_time, m_aAssignData[ nInsertID ].refresh_elasped_time);
nPacketDataIndex++;
pTData->Clear();
}
m_pIconStatic_mark_khroo[ 0 ]->SetShow(true);
m_pIconStatic_mark_khroo[ 1 ]->SetShow(true);
if(m_aAssignData[1].bUse)
{
m_pIconStatic_letter_mark_khroo[0]->SetShow(false);
m_pStaticIcon_assign_food[1]->SetShow(true);
m_pStaticIcon_assign_ticket[1]->SetShow(true);
m_pStatic_lbx_cover[1]->SetShow(false);
}
else
{
m_pIconStatic_letter_mark_khroo[0]->SetShow(true);
m_pStaticIcon_assign_food[1]->SetShow(true);
m_pStaticIcon_assign_ticket[1]->SetShow(true);
m_pStatic_lbx_cover[1]->SetShow(true);
}
if(m_aAssignData[2].bUse)
{
m_pIconStatic_letter_mark_khroo[1]->SetShow(false);
m_pStaticIcon_assign_food[2]->SetShow(true);
m_pStaticIcon_assign_ticket[2]->SetShow(true);
m_pStatic_lbx_cover[2]->SetShow(false);
}
else
{
m_pIconStatic_letter_mark_khroo[1]->SetShow(true);
m_pStaticIcon_assign_food[2]->SetShow(true);
m_pStaticIcon_assign_ticket[2]->SetShow(true);
m_pStatic_lbx_cover[2]->SetShow(true);
}
g_bChangeAD = TRUE;
m_pStatic_SelectSlot->SetShow(false); // 선택한 슬롯 표시 숨기기
// 광고판 출력
if(IsExistAssignCreature())
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER ); // 크리처 맡긴 후 도움말 출력
else
SetAdvertiseState( REQ_CREATURE_ASSIGN ); // 크리처 맡기기 도움말 출력
SAFE_DELETE(pTData);
m_pBtn_Assign->Disable();
m_pBtn_Regain->Disable();
break;
}
case IMSG_UI_MOVE:
{
SIMSG_UI_MOVE* pMoveMsg = (SIMSG_UI_MOVE*)pMsg;
MovePos( pMoveMsg->m_nX - GetRect().GetWidth(), pMoveMsg->m_nY - GetRect().GetHeight() );
pMsg->bUse = true;
break;
}
case IMSG_UI_CREATURE_SEQFORM_INFO:
{
SIMSG_UI_CREATURE_SEQFORM_INFO* pInfoMsg = (SIMSG_UI_CREATURE_SEQFORM_INFO*)pMsg;
const KRect& rt = m_p3DStatic_Creature->GetRect();
K3DVertex pos = K3DVertex(0, -8, 13);
m_p3DStatic_Creature->setFullScene(true);
if (m_p3DStatic_Creature->isFullScene())
{
std::string cobName = CStringUtil::StringFormat("%s.cob", pInfoMsg->pCobName);
std::vector<COBSET *>* coblist = COBManager::GetManager()->Load(cobName.c_str());
if (coblist)
{
std::vector<COBSET *>::iterator it = coblist->begin();
m_p3DStatic_Creature->setFullSceneSize((*it)->fVisibleCube);
}
}
m_p3DStatic_Creature->SetSeqForm( pInfoMsg->pSeqForm, KSize( rt.GetWidth(), rt.GetHeight() ), pInfoMsg->nObjectType, pos );
pInfoMsg->bUse = true;
break;
}
case IMSG_MOUSEMOVE:
{
if(IsShow() == false)
break;
SIMSG_MOUSEMOVE* pMouseMove = (SIMSG_MOUSEMOVE* )pMsg;
int x = ((int)(short)LOWORD(pMouseMove->lParam));
int y = ((int)(short)HIWORD(pMouseMove->lParam));
KRect rt = m_pStatic_KhrooShopMarkZone->GetRect();
if(FALSE == rt.IsInRect(x, y))
break;
KRect rtChild;
BOOL bSelect = FALSE;
int nSelectID = -1;
int k=0;
for(k=0; k<2; k++)
{
rtChild = m_pStaticIcon_assign_ticket[k+1]->GetRect();
if(rtChild.IsInRect(x, y))
{
bSelect = TRUE;
nSelectID = k;
break;
}
}
m_pIconStatic_mark_khroo[ 0 ]->SetShow(true);
m_pIconStatic_mark_khroo[ 1 ]->SetShow(true);
m_pIconStatic_mark_khroo[ 2 ]->SetShow(false);
if(bSelect) // 선택이 되었을 경우
{
m_pIconStatic_mark_khroo[ nSelectID ]->SetShow(false);
m_pIconStatic_mark_khroo[2]->SetShow(true); // 크루샵 표기 아이콘 보임
m_pIconStatic_mark_khroo[2]->MovePos(rtChild.left, rtChild.top); // 선택된 곳으로 위치를 옮긴다
}
break;
}
}
}
// 진화여부 검사
int SUICreatureFarmWnd::CheckEvolve(int* pSocket, int nID_Evolve_target,
int& nOutLevel, int& nOutEvolveType, int& nOutEvolveCreatureID, int& nOutEvolveCreatureNameID, int& nOutOverBreed
)
{
if(NULL == pSocket)
return -1;
//gmpbigsun( 20130618 ) : 리뉴얼, 제거댐
//if(nID_Evolve_target <= 0)
// return -1;
int nResultEvolve = -1; // error
int* pLevel = pSocket;
//오버 브리드 계산
//50, 70, 100 : 진화 레벨 상수
int nOverBreed = 0;
if( pLevel[0+1] > SCreatureDB::EVOLUTION_LV2 )
nOverBreed = pLevel[0+1] - SCreatureDB::EVOLUTION_LV2;
if( pLevel[1+1] > SCreatureDB::EVOLUTION_LV3 )
nOverBreed += pLevel[1+1] - SCreatureDB::EVOLUTION_LV3;
int nCreatureNameID = 0;
int nEvolveType = 0;
int nLevel = 0;
if( pLevel[2+1] || pLevel[1+1] || pLevel[0+1] )
{
if( pLevel[2+1] > 0 ) //2에 진화 레벨 // 진화형태 : 진화형
{
nOutLevel = pLevel[2+1];
nOutEvolveType = 3;
const _SUMMON_INFO_FILE* pEvolveSummonInfo = GetCreatureDB().GetCreatureData( nID_Evolve_target ); // 진화된 크리처 정보
if( pEvolveSummonInfo )
{
// pEvolveSummonInfo = GetCreatureDB().GetCreatureData( pEvolveSummonInfo->nEvolve_target );
// if( pEvolveSummonInfo )
{
nOutEvolveCreatureID = pEvolveSummonInfo->uid; // 진화한 크리처 디비 아이디 // 성장 단계 -> 진화 단계
nOutEvolveCreatureNameID = pEvolveSummonInfo->name_id;
nResultEvolve = 1; // 진화했음
}
}
else
{
nOutEvolveCreatureID = 0;
nOutEvolveCreatureNameID = 88; //무엇인가로 표시
nResultEvolve = 2; //gmpbigsun: Error아님, Error로 리턴할경우 작업이 무시되는 현상때문, 201306현재 3단계가 끝이며 3단계의 경우 Target값이 0임
}
}
else if( pLevel[1+1] ) //1에 성장 레벨 // 진화형태 : 성장형
{
nOutLevel = pLevel[1+1];
nOutEvolveType = 2;
const _SUMMON_INFO_FILE* pEvolveSummonInfo = GetCreatureDB().GetCreatureData( nID_Evolve_target );
if( pEvolveSummonInfo )
{
nOutEvolveCreatureID = pEvolveSummonInfo->uid; // 진화한 크리처 디비 아이디 // 기본 단계 -> 성장 단계
nOutEvolveCreatureNameID = pEvolveSummonInfo->name_id;
nResultEvolve = 1; // 진화했음
}
else
{
nOutEvolveCreatureID = 0;
nOutEvolveCreatureNameID = 88; //무엇인가로 표시
nResultEvolve = 2;
}
}
else if( pLevel[0+1] ) //0에 기본 레벨
{
nOutLevel = pLevel[0+1];
nOutEvolveType = 1; // 진화형태 : 기본형
nResultEvolve = 0; // 진화안했음
}
}
return nResultEvolve;
}
// 크리처 정보 설정
int SUICreatureFarmWnd::SetCreatureInfo( int nSlotID )
{
if(nSlotID < 0 || nSlotID >= FARM_SLOT_CNT)
return -1;
SAssignData* pData = &m_aAssignData[ nSlotID ];
DWORD dwTime=0, dwDate=0, dwHour=0;
DWORD dwRemainTime = pData->duration - pData->elasped_time;
if(dwRemainTime > 0)
{
dwDate = TIME_CALCULATE_DATE(dwRemainTime);
dwHour = TIME_CALCULATE_HOUR_REMAIN(dwRemainTime);
}
else
{
if (pData->nTicketTermType == 3) // 3일권
dwTime = CALCULATE_KEEP_TIME( 3 );
else if(pData->nTicketTermType == 7) // 7일권
dwTime = CALCULATE_KEEP_TIME( 7 );
dwDate = TIME_CALCULATE_DATE(dwRemainTime);
dwHour = TIME_CALCULATE_HOUR_REMAIN(dwRemainTime);
}
char buf[64]={0};
sprintf(buf, "%d%s %d%s", dwDate, S(9103), dwHour, S(7023));
InsertCaption_remain_time_slot(nSlotID, buf); // 기간
sprintf(buf, "%s", pData->name);
InsertCaption_name_slot( nSlotID, buf ); // 크리처 이름
sprintf(buf, "%s", GetStringDB().GetString( pData->idEvolutionTypeName ));
InsertCaption_kind_slot( nSlotID, buf ); // 크리처 타입
return 1;
}
// 크리처 정보 설정
int SUICreatureFarmWnd::SetCreatureInfoDisplay( int nSlotID )
{
if(nSlotID < 0 || nSlotID >= 3)
return 0;
m_nSelectCreatureSlot = nSlotID;
int id = m_nSelectCreatureSlot;
SAssignData* pData = &m_aAssignData[ id ];
if(pData->bUse == FALSE)
return 0;
m_nSelectCreatureCardHandle = pData->card_info.handle; // 선택한 카드 핸들
int re = SetCreatureInfo( id ); // 크리처 정보를 UI에 표시해준다
if(re == 0)
return 0;
char buffer[128]={0};
sprintf(buffer, "%d", pData->card_info.enhance);
InsertCaption_enhance(buffer); // 강화 단계 표시
// SetEnhance(nSlotID, pData->card_info.enhance);
// 크리처 3D모델을 컨트롤에 그린다
if( SetShowCreature3DModel(pData->codeCreature, pData->card_info.enhance, m_p3DStatic_Creature) == FALSE )
return 0;
InsertCaption_ticket_count(""); // 티켓 개수 표시 // 2011.05.27 - servantes // 맡겨진 크리처의 티켓 개수 알 수 없다
InsertCaption_cracker_count(""); // 크래커 개수 표시 // 2011.05.27 - servantes // 맡겨진 크리처의 크래커 개수 알 수 없다
const ItemBaseEx_info* rItemBase = GetItemDB().GetItemData( pData->card_info.Code );
if(rItemBase == NULL)
return 0;
const _SUMMON_INFO_FILE* pSummonInfo = GetCreatureDB().GetCreatureData( pData->codeCreature );
if( pSummonInfo == NULL )
return 0;
m_nDisplayCreatureID = pData->codeCreature;
//sun20130411
ResetMultiIcon( m_pStaticIcon_card, 0, 8 );
std::string iconName;
getIconNameAtDurability(pData->card_info.Code, pData->card_info.enhance, pData->card_info.ethereal_durability, iconName, pData->card_info.Flag, pData->card_info.summon_id );
m_pStaticIcon_card->SetIcon( 0, "ui_frame.spr", iconName.c_str() );
getIconNameSummonCard_BORDER( iconName, pData->codeCreature, pData->card_info.enhance, pData->card_info.ethereal_durability );
m_pStaticIcon_card->SetIcon( 1, "ui_frame.spr", iconName.c_str() );
//getIconNameSummonCard_ENHANCE( iconName, pData->card_info.enhance );
//m_pStaticIcon_card->SetIcon( 2, "ui_frame.spr", iconName.c_str() );
getIconNameSummonCard_STAGE( iconName, pData->codeCreature, pData->card_info.enhance );
m_pStaticIcon_card->SetIcon( 3, "ui_frame.spr", iconName.c_str() );
m_pStaticIcon_card->SetShow( true );
unsigned char byItemLevel = (ItemBase::TYPE_ARMOR == rItemBase->nType) ? rItemBase->level : 0;
ItemBase::BaseFlag baseFlag;
baseFlag.CopyFrom( &rItemBase->status_flag );
baseFlag.On( ItemInstance::ITEM_FLAG_SUMMON );
int soket[ ItemBase::MAX_SOCKET_NUMBER ];
::memset( soket, 0, sizeof( soket ) );
m_pStaticIcon_card->SetTooltip(
m_pDisplayInfo->GetItemTooltipText(
pData->card_info.Code,
true,
pData->card_info.enhance,
byItemLevel,
baseFlag,
rItemBase->available_time,
pData->card_info.socket,
0,
0,
0,
0,
0,
0,
0,
true,
pData->card_info.ethereal_durability, //
0,
0,
pData->card_info.summon_id,
0
).c_str()
);
sprintf(buffer, "%s", pData->name);
InsertCaption_name(buffer); // 크리처 이름
sprintf(buffer, "%s", GetStringDB().GetString( pData->idEvolutionTypeName ));
m_pStatic_Type->SetCaption(buffer); // 크리처 타입
if(pData->using_cash)
{
// int nDurationType = TIME_CALCULATE_DATE(pData->duration);
// if(nDurationType == 3)
{
m_pStaticIcon_ticket->SetShow( true );
m_pStaticIcon_ticket->SetIcon( "ui_frame.spr",FARM_TICKET_STRING_PRIMIUM_3 ); // 티켓 아이콘
}
// else if(nDurationType == 7)
// {
// m_pStaticIcon_ticket->SetShow( true );
// m_pStaticIcon_ticket->SetIcon( "ui_frame.spr",FARM_TICKET_STRING_PRIMIUM_7 );
// }
}
else
{
// int nDurationType = TIME_CALCULATE_DATE(pData->duration);
// if(nDurationType == 3)
{
m_pStaticIcon_ticket->SetShow( true );
m_pStaticIcon_ticket->SetIcon( "ui_frame.spr", FARM_TICKET_STRING_NORMAL_3 );
}
// else if(nDurationType == 7)
// {
// m_pStaticIcon_ticket->SetShow( true );
// m_pStaticIcon_ticket->SetIcon( "ui_frame.spr",FARM_TICKET_STRING_NORMAL_7 ); // 티켓 아이콘
// }
}
if(pData->using_cracker)
{
m_pStaticIcon_food->SetShow( true );
m_pStaticIcon_food->SetIcon( "ui_frame.spr", FARM_CRACKER_STRING ); // 크래커 아이콘
}
else
{
m_pStaticIcon_food->SetShow( true );
m_pStaticIcon_food->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING_VISIBLE );
}
DWORD dwRemainTime = 0;
DWORD dwDate = 0;
DWORD dwHour = 0;
if(pData->bKeep30 == TRUE) //2011.08.22 - servantes 코드 추가 (== TRUE)
dwRemainTime = KEEP_TIME - ( m_aAssignData[nSlotID].elasped_time - m_aAssignData[nSlotID].duration );
else
dwRemainTime = m_aAssignData[nSlotID].duration - m_aAssignData[nSlotID].elasped_time;
dwDate = TIME_CALCULATE_DATE(dwRemainTime);
dwHour = TIME_CALCULATE_HOUR_REMAIN(dwRemainTime);
if(pData->bKeep30 == TRUE) //2011.08.22 - servantes 코드 추가 (== TRUE)
sprintf(buffer, "%s %d%s %d%s", S(1155), dwDate, S(9103), dwHour, S(7023));
else
sprintf(buffer, "%d%s %d%s", dwDate, S(9103), dwHour, S(7023));
// m_pStatic_lbx_Time[nSlotID+3]->SetTooltip(buffer);
InsertCaption_remain_time(buffer); // 크리처 돌보기 남은 시간
if(pData->bKeep30 == TRUE) //2011.08.22 - servantes 코드 추가 (== TRUE)
SetElapsedTime(nSlotID, pData->duration, 0); // 남은 시간 크리처 정보 인터페이스에 표시
else
SetElapsedTime(nSlotID, pData->elasped_time, 0); // 남은 시간 크리처 정보 인터페이스에 표시
// 경험치에 따른 레벨 계산후 표시
CalculateEXP( nSlotID );
m_nOldSelectCreatureCardHandle = m_nSelectCreatureCardHandle;
return 1;
}
// 크리처 모델을 UI에 보인다
BOOL SUICreatureFarmWnd::SetShowCreature3DModel(AR_HANDLE hSummonID, int nEnhance, KUIControl3DStatic* pCtrl)
{
if(pCtrl == NULL || hSummonID < 0)
return FALSE;
SIMSG_UI_CREATURE_SEQFORM_INFO msg( hSummonID );
m_pGameManager->ProcMsgAtStatic( &msg );
if(msg.pSeqForm == NULL) // 그릴려는 크리처의 메쉬 정보들이 없어서 새로 만들경우
{
SGameWorld* pGameWorld = dynamicCast<SGameWorld*>(m_pGameManager->GetActiveGame());
if(NULL == pGameWorld)
return FALSE;
pGameWorld->GetCommandSystem()->DeleteAvatar(m_hCreature_display);
SAFE_DELETE(m_pDisplayCreature);
m_pDisplayCreature = new SGameOtherCreature( m_hCreature_display, nEnhance );
AR_HANDLE hMaster = pGameWorld->GetCommandSystem()->GetLocalPlayer()->GetArID();
m_pDisplayCreature->SetMaster( hMaster, pGameWorld->GetCommandSystem()->GetLocalPlayer() );
m_pDisplayCreature->SetArID( m_hCreature_display );
m_pDisplayCreature->SetInnObjType(TS_ENTER::GAME_SUMMON);
m_pDisplayCreature->GetAvatarProperty()->SetInnContentID( hSummonID );
m_pDisplayCreature->SetVisibility( 0.f );
pGameWorld->GetCommandSystem()->InsertAvatarEX( m_hCreature_display, m_pDisplayCreature );
pGameWorld->GetCommandSystem()->InsertPendLoading( m_pDisplayCreature );
m_nDisplayCreatureContentID = msg.nObjectType;
m_bFaceCutSet = FALSE;
pCtrl->SetShow(false);
}
else // 그릴려는 크리처의 메쉬 정보들이 이미 있는 경우
{
const KRect& rt = pCtrl->GetRect();
K3DVertex pos = K3DVertex(0, -8, 13);
pCtrl->setFullScene(true);
if (pCtrl->isFullScene())
{
std::string cobName = CStringUtil::StringFormat("%s.cob", msg.pCobName);
std::vector<COBSET *>* coblist = COBManager::GetManager()->Load(cobName.c_str());
if (coblist)
{
std::vector<COBSET *>::iterator it = coblist->begin();
m_p3DStatic_Creature->setFullSceneSize((*it)->fVisibleCube);
}
}
pCtrl->SetSeqForm( msg.pSeqForm, KSize( rt.GetWidth(), rt.GetHeight() ), m_nDisplayCreatureObjectType, pos );
pCtrl->SetShow(true);
}
return TRUE;
}
// 시간 설정 - 게이지 컨트롤 갱신시칸다
int SUICreatureFarmWnd::SetElapsedTime(int nSlotID, DWORD dwElapsedTime, BOOL bReset)
{
if(bReset == FALSE)
{
if(nSlotID < 0 || nSlotID >= FARM_SLOT_CNT)
return 0;
if(m_aAssignData[nSlotID].duration < dwElapsedTime)
return 0;
if(0 > dwElapsedTime)
return 0;
}
KUIWnd* pGauge = GetChild( "guage_time_01" );
if(pGauge == NULL)
return -2;
KRect rt = pGauge->GetRect();
int w = rt.GetWidth();
rt.right = rt.left + w;
KUIWnd* pFrame = GetChild( "inframe_select_creatuer_01" );
if(pFrame == NULL)
return -3;
int nWidthMax = pFrame->GetRect().GetWidth() - 2;
int nResizeW = 0;
if(bReset == FALSE)
{
nResizeW = int( ((float)nWidthMax * (float)dwElapsedTime) / (float)m_aAssignData[nSlotID].duration );
if(nResizeW >= nWidthMax)
nResizeW = nWidthMax;
}
nResizeW += rt.left;
KRect rtResize(rt.left, rt.top, nResizeW, rt.bottom);
pGauge->Resize(rtResize);
return 1;
}
// 크리처 맡기기 남은 시간 설정
void SUICreatureFarmWnd::SetCreatureTime(int nSlotID, const char* pContents)
{
if(nSlotID < 0 || nSlotID >= FARM_SLOT_CNT)
return ;
if(NULL == pContents)
return ;
InsertCaption_remain_time_slot( nSlotID, pContents);
}
// 크리처 정보 설정 -
int SUICreatureFarmWnd::SetCreatureInfo( void* pPacket )
{
return 1;
}
// 슬롯 상태 변경한다 - 캐쉬아이템
int SUICreatureFarmWnd::SetCreatureSlotState( BOOL bUserCashItem )
{
if(bUserCashItem) // 캐쉬아이템을 사용할 경우
{
m_bEnableCashItem = bUserCashItem;
SetCreatureSlotStateEdit(1, TRUE);
SetCreatureSlotStateEdit(2, TRUE);
SetCreatureSlotCoverStateEdit(true);
}
else // 캐쉬아이템을 사용하지 않을 경우
{
m_bEnableCashItem = bUserCashItem;
SetCreatureSlotStateEdit(1, FALSE);
SetCreatureSlotStateEdit(2, FALSE);
SetCreatureSlotCoverStateEdit(false);
}
return 1;
}
// 슬롯 상태 변경한다 - 활성 / 비활성
void SUICreatureFarmWnd::SetCreatureSlotStateEdit( int nSlotID, BOOL bEnable )
{
if(nSlotID < 0 || nSlotID >= FARM_SLOT_CNT)
return ;
if(bEnable) // 활성화시킨다
{
m_pStatic_lbx_Level[nSlotID]->Enable();
m_pStatic_lbx_Name[nSlotID]->Enable();
m_pStatic_lbx_Type[nSlotID]->Enable();
m_pStatic_lbx_Time[nSlotID]->Enable();
}
else // 비활성화시킨다
{
m_pStatic_lbx_Level[nSlotID]->Disable();
m_pStatic_lbx_Name[nSlotID]->Disable();
m_pStatic_lbx_Type[nSlotID]->Disable();
m_pStatic_lbx_Time[nSlotID]->Disable();
}
}
// 슬롯 커버 상태 변경한다 - 활성 / 비활성
void SUICreatureFarmWnd::SetCreatureSlotCoverStateEdit( bool bEnable )
{
m_pStatic_lbx_cover_txt[0]->SetShow(!bEnable);
m_pStatic_lbx_cover_txt[1]->SetShow(!bEnable);
}
// 되찾기
int SUICreatureFarmWnd::Regain(int nSlotID)
{
if(nSlotID < 0 || nSlotID >= FARM_SLOT_CNT)
return 0;
m_pBtn_lbx_Assign[nSlotID]->Disable();
m_aAssignData[nSlotID].Clear();
char buf[64]={0};
ResetMultiIcon( m_pStaticIcon_card, 0, 8 );
m_pStaticIcon_card->SetIcon( 0, "ui_frame.spr", EMPTY_ICON_STRING );
m_pStaticIcon_card->SetTooltip(""); // 툴팁 초기화
m_pStaticIcon_assign_food[nSlotID]->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING_VISIBLE );
m_pStaticIcon_assign_ticket[nSlotID]->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING_VISIBLE );
InsertCaption_ticket_count("" ); // 티켓 개수 표시
InsertCaption_cracker_count("" ); // 크래커 개수 표시
m_pStaticIcon_ticket->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 티켓 아이콘
m_pStaticIcon_food->SetIcon( "ui_frame.spr", EMPTY_ICON_STRING ); // 크래커 아이콘
InsertCaption_kind_slot( nSlotID, "" );
InsertCaption_name_slot( nSlotID, "" );
InsertCaption_LV_slot( nSlotID, "" );
InsertCaption_name("");
m_pStatic_Type->SetCaption(" ");
InsertCaption_remain_time(" ");
InsertCaption_goal_level("");
InsertCaption_start_level("");
InsertCaption_current_level("");
InsertCaption_enhance("");
InsertCaption_remain_time_slot( nSlotID, "" );
SetElapsedTime(nSlotID, 0, 1);
if(m_pDisplayCreature)
{
SAFE_DELETE(m_pDisplayCreature);
SGameWorld* pGameWorld = dynamicCast<SGameWorld*>(m_pGameManager->GetActiveGame());
if(pGameWorld)
{
pGameWorld->GetCommandSystem()->DeleteAvatar(m_hCreature_display);
}
m_p3DStatic_Creature->SetShow(false);
}
BOOL bUse = FALSE;
for(int k=0; k<FARM_SLOT_CNT; k++)
{
if(m_aAssignData[k].bUse)
{
bUse = TRUE;
break;
}
}
m_pIconStatic_mark_khroo[0]->SetShow(true);
m_pIconStatic_mark_khroo[1]->SetShow(true);
if(m_aAssignData[1].bUse == 0)
m_pStatic_lbx_cover[1]->SetShow(true);
else
m_pStatic_lbx_cover[1]->SetShow(false);
if(m_aAssignData[2].bUse == 0)
m_pStatic_lbx_cover[2]->SetShow(true);
else
m_pStatic_lbx_cover[2]->SetShow(false);
if(bUse)
{
SetAdvertiseState( REQ_CREATURE_ASSIGN_AFTER ); // 크리처 맡긴 후 도움말 출력
}
else
{
SetAdvertiseState( REQ_CREATURE_ASSIGN ); // 크리처 맡기기 도움말 출력
}
m_pBtn_Regain->Disable();
// m_pStatic_lbx_Time[nSlotID + 3]->SetShow(false);
m_pStaticIcon_assign_food[nSlotID]->SetShow(true);
m_pStaticIcon_assign_ticket[nSlotID]->SetShow(true);
if(nSlotID == 1)
{
m_pIconStatic_letter_mark_khroo[0]->SetShow(true);
m_pStatic_lbx_cover[1]->SetShow(true);
}
else if(nSlotID == 2)
{
m_pIconStatic_letter_mark_khroo[1]->SetShow(true);
m_pStatic_lbx_cover[2]->SetShow(true);
}
return 1;
}
void SUICreatureFarmWnd::PostMsgAtDynamic( SGameMessage* pMsg )
{
m_pGameManager->PostMsgAtDynamic(pMsg);
}
// 맡기기가 가능한지 최종 검사함수
BOOL SUICreatureFarmWnd::IsEnaleAssin()
{
if(m_nTicketType == 0) // 티켓 넣지 않은 상태
return FALSE;
if(m_nSelectCreatureCardHandle <= 0) // 카드 넣지 않은 상태
return FALSE;
if(g_strTmpIconName_cracker.size()) // 크래커를 넣으려 시도했다면 개수를 검사한다
{
if(g_nTmpCrackerCount != g_nTmpCrackerMaxCount) // 크래커 개수가 맞지 않으면 맡기기 불가능
return FALSE;
}
if(g_nTmpTicketCount != g_nTmpTicketMaxCount) // 티켓 개수가 맞지 않으면 맡기기 불가능
return FALSE;
BOOL bEmptySlot = FALSE;
if (m_nTicketType == 1) // 일반 사용권
{
if(m_aAssignData[0].bUse == FALSE)
bEmptySlot = TRUE;
}
else if(m_nTicketType == 2) // 프리미엄 사용권
{
if(m_aAssignData[1].bUse == FALSE)
bEmptySlot = TRUE;
if(m_aAssignData[2].bUse == FALSE)
bEmptySlot = TRUE;
}
if(bEmptySlot == FALSE)
return FALSE;
return TRUE; // 맡기기 가능함
}
// 되찾기가 가능한지 최종 검사함수
BOOL SUICreatureFarmWnd::IsEnaleRegain()
{
if(m_aAssignData[0].bUse == TRUE)
return TRUE;
if(m_aAssignData[1].bUse == TRUE)
return TRUE;
if(m_aAssignData[2].bUse == TRUE)
return TRUE;
return FALSE; // 되찾기 가능함
}
// 맡겨진 크리처가 있는지 검사
BOOL SUICreatureFarmWnd::IsExistAssignCreature()
{
if(m_aAssignData[0].bUse == TRUE)
return TRUE;
if(m_aAssignData[1].bUse == TRUE)
return TRUE;
if(m_aAssignData[2].bUse == TRUE)
return TRUE;
return FALSE;
}
// 경험치를 계산 적용한다
BOOL SUICreatureFarmWnd::CalculateEXP_ex_slot(int nSlot, int nSummonID, int nCurrentLevel, int nCreatureCode, int* pSocket, BOOL bUseCracker, int nEvolveType, int nTicketTerm, int nTicketType)
{
if(nCurrentLevel < 0 || nCurrentLevel > 300)
return 0;
if(nEvolveType < SummonBase::EVOLVE_NORMAL || nEvolveType > SummonBase::EVOLVE_EVOLVE)
return 0;
int nGrow_Type = nEvolveType;
const ItemBaseEx_info* rItemBase = GetItemDB().GetItemData( nCreatureCode );
if(rItemBase == NULL)
return 0;
const _SUMMON_INFO_FILE* pSummonInfo = GetCreatureDB().GetCreatureData( nSummonID );
if( pSummonInfo == NULL )
return 0;
int nOutLevel = 0;
int nOutEvolveType = 0;
int nOutEvolveCreatureID = 0;
int nOutEvolveCreatureNameID = 0;
int nOutOverBreed = 0;
int nEvolve = CheckEvolve( pSocket, pSummonInfo->nEvolve_target, nOutLevel, nOutEvolveType, nOutEvolveCreatureID, nOutEvolveCreatureNameID, nOutOverBreed );
if(nEvolve == -1) // 에러면 리턴
return 0;
int nRHour = 0;
if(m_aAssignData[ nSlot ].bKeep30 == TRUE) // 보관 상태일 경우 맡긴 기간의 경험치만 얻을 수 있다 //2011.08.22 - servantes 코드 추가 (== TRUE)
nRHour = m_aAssignData[ nSlot ].duration;
else
nRHour = m_aAssignData[ nSlot ].elasped_time;
if(m_aAssignData[ nSlot ].duration <= 0)
nRHour = 1;
// 크래커 사용시 경험치 1.5배
DOUBLE fRate = bUseCracker ? 1.5 : 1.0;
int nElaspedHour = TIME_CALCULATE_HOUR( nRHour );
int nLVGap=0;
int nLVMax=0;
int nGetExp=0;
switch( nGrow_Type )
{
case SummonBase::EVOLVE_NORMAL: // 기본형이면 최대 60까지
{
//nGetExp = COST_CALCULATE_EXP_LV1;
nGetExp = GetExpPerHour( nGrow_Type, nTicketType );
nLVMax = CFARM_MAXLEVEL_LV1;
if(nOutLevel > nLVMax)
nOutLevel = nLVMax;
nLVGap = nLVMax - nOutLevel;
}
break;
case SummonBase::EVOLVE_GROWTH: // 성장형이면 최대 100까지( 성장형의 최대 레벨은 115이지만 농장에 맡길 수 있는 레벨은 100까지이므로)
{
//nGetExp = COST_CALCULATE_EXP_LV2;
nGetExp = GetExpPerHour( nGrow_Type, nTicketType );
nLVMax = CFARM_MAXLEVEL_LV2;
if(nOutLevel > nLVMax)
nOutLevel = nLVMax;
nLVGap = nLVMax - nOutLevel;
}
break;
case SummonBase::EVOLVE_EVOLVE:
{
nGetExp = GetExpPerHour( nGrow_Type, nTicketType );
nLVMax = CFARM_MAXLEVEL_LV3;
if( nOutLevel > nLVMax )
nOutLevel = nLVMax;
nLVGap = nLVMax - nOutLevel;
}
break;
default:
return false;
}
// 경험치에 따른 레벨 계산
__int64 nExpResult = m_aAssignData[nSlot].exp + ((__int64) nGetExp * nElaspedHour * fRate);
int nLVResult = GetSummonExpDB().GetLevelByExp( nExpResult ) + 2;
if(nLVResult < 0)
return 0;
if(nLVResult < nOutLevel) //2011.08.22 - servantes 최소레벨 검사코드 추가
nLVResult = nOutLevel;
if(nLVResult > nLVMax)
nLVResult = nLVMax;
if(nLVResult == 0)
nLVResult = 1;
// 경험치에 따른 레벨 계산
int nGoalLevel=0, nCountHour=0;
if( nTicketTerm > 0 )
nCountHour = nTicketTerm * 24;
//if (m_aAssignData[ nSlot ].nTicketTermType == 3)
// nCountHour = 3 * 24;
//else if(m_aAssignData[ nSlot ].nTicketTermType == 7)
// nCountHour = 7 * 24;
nExpResult = m_aAssignData[nSlot].exp + ((__int64)nExpResult * nCountHour * fRate);
nGoalLevel = GetSummonExpDB().GetLevelByExp( nExpResult ) + 2;
if(nGoalLevel < 0)
return 0;
if(nGoalLevel > nLVMax) // 진화단계에 따라 성장할 수 있는 레벨을 제한한다
nGoalLevel = nLVMax;
if(nLVResult > nGoalLevel)
nLVResult = nGoalLevel;
char strBuf[32]={};
sprintf(strBuf, "%d", nLVResult);
InsertCaption_LV_slot(nSlot, strBuf); // 현재 레벨 표시
return 1;
}
// 경험치를 계산 적용한다
BOOL SUICreatureFarmWnd::CalculateEXP_ex(int nCurrentLevel, int nSummonID, int nCreatureCode, int* pSocket, BOOL bUseCracker, int nEvolveType, int nTicketTerm, int nTicketType)
{
// 이용권을 등록한경우
if(nCurrentLevel < 0 || nCurrentLevel > 300)
return 0;
if(nEvolveType < SummonBase::EVOLVE_NORMAL || nEvolveType > SummonBase::EVOLVE_EVOLVE)
return 0;
int nGrow_Type = nEvolveType;
const ItemBaseEx_info* rItemBase = GetItemDB().GetItemData( nCreatureCode );
if(rItemBase == NULL)
return 0;
const _SUMMON_INFO_FILE* pSummonInfo = GetCreatureDB().GetCreatureData( nSummonID );
if( pSummonInfo == NULL )
return 0;
int nOutLevel = 0;
int nOutEvolveType = 0;
int nOutEvolveCreatureID = 0;
int nOutEvolveCreatureNameID = 0;
int nOutOverBreed = 0;
int nEvolve = CheckEvolve( pSocket, pSummonInfo->nEvolve_target, nOutLevel, nOutEvolveType, nOutEvolveCreatureID, nOutEvolveCreatureNameID, nOutOverBreed );
if(nEvolve == -1) // 에러면 리턴
return 0;
// 크래커 사용시 경험치 1.5배
DOUBLE fRate = bUseCracker ? 1.5 : 1.0;
int nLVGap=0;
int nLVMax=0;
int nGetExp=0;
switch( nGrow_Type )
{
case SummonBase::EVOLVE_NORMAL: // 기본형이면 최대 60까지
{
nGetExp = GetExpPerHour( nGrow_Type, nTicketType );
//nGetExp = COST_CALCULATE_EXP_LV1;
nLVMax = CFARM_MAXLEVEL_LV1;
if(nOutLevel > nLVMax)
nOutLevel = nLVMax;
nLVGap = nLVMax - nOutLevel;
break;
}
case SummonBase::EVOLVE_GROWTH: // 성장형이면 최대 100까지( 성장형의 최대 레벨은 115이지만 농장에 맡길 수 있는 레벨은 100까지이므로)
{
nGetExp = GetExpPerHour( nGrow_Type, nTicketType );
//nGetExp = COST_CALCULATE_EXP_LV2;
nLVMax = CFARM_MAXLEVEL_LV2;
if(nOutLevel > nLVMax)
nOutLevel = nLVMax;
nLVGap = nLVMax - nOutLevel;
break;
}
case SummonBase::EVOLVE_EVOLVE:
{
nGetExp = GetExpPerHour( nGrow_Type, nTicketType );
nLVMax = CFARM_MAXLEVEL_LV3;
if( nOutLevel > nLVMax )
nOutLevel = nLVMax;
nLVGap = nLVMax - nOutLevel;
}
break;
default:
return false;
}
int nGoalLevel=0, nCountHour=0;
if( nTicketType > 0 )
nCountHour = nTicketTerm * 24;
//if (nTicketType == 3)
// nCountHour = 3 * 24;
//else if(nTicketType == 7)
// nCountHour = 7 * 24;
// 경험치에 따른 레벨 계산
__int64 nCurExp = GetSummonExpDB().GetNeedExp( nCurrentLevel, nEvolveType );
//__int64 nExpResult = nCurExp;
//int nLVResult = GetSummonExpDB().GetLevelByExp( nExpResult ) + 2;
//if(nLVResult < 0)
// return 0;
char strBuf[32]={};
sprintf(strBuf, "%d", nCurrentLevel);
InsertCaption_current_level(strBuf); // 현재 레벨 표시
sprintf(strBuf, "Lv %d", nOutLevel);
InsertCaption_start_level(strBuf); // 시작 레벨 표시
__int64 nExpResult = nCurExp + ((__int64)nGetExp * nCountHour * fRate);
nGoalLevel = GetSummonExpDB().GetLevelByExp( nExpResult ) + 2;
if(nGoalLevel < 0)
return 0;
if(nGoalLevel < nOutLevel)
nGoalLevel = nOutLevel;
if(nGoalLevel > nLVMax) // 진화단계에 따라 성장할 수 있는 레벨을 제한한다
nGoalLevel = nLVMax;
// gmpbigsun( 20130607 ) : 캐릭터 레벨 검사 제거됨
// if(nGoalLevel > m_PlayerInfoMgr.GetLevel()) // 캐릭터 레벨보다 크리처가 더 클수 없다 // 2011.03.29 - servantes
// nGoalLevel = m_PlayerInfoMgr.GetLevel();
sprintf(strBuf, "Lv %d", nGoalLevel);
InsertCaption_goal_level(strBuf); // 최종 레벨 표시
return 1;
}
// 경험치를 계산 적용한다
BOOL SUICreatureFarmWnd::CalculateEXP(int nSlotID)
{
if(nSlotID < 0 || nSlotID >= 3)
return 0;
int nGrow_Type = m_aAssignData[ nSlotID ].evolution_grade;
//if(nGrow_Type < SummonBase::EVOLVE_NORMAL || nGrow_Type >= SummonBase::EVOLVE_EVOLVE) // 크리처 자동 진화 불가로인한 경험치 획득 불가
if(nGrow_Type < SummonBase::EVOLVE_NORMAL || nGrow_Type > SummonBase::EVOLVE_EVOLVE) // 흠 왜 >= 지? 풀어버림.
return 0;
const ItemBaseEx_info* rItemBase = GetItemDB().GetItemData( m_aAssignData[ nSlotID ].card_info.Code );
if(rItemBase == NULL)
return 0;
const _SUMMON_INFO_FILE* pSummonInfo = GetCreatureDB().GetCreatureData( m_aAssignData[ nSlotID ].codeCreature );
if( pSummonInfo == NULL )
return 0;
int nOutLevel = 0;
int nOutEvolveType = 0;
int nOutEvolveCreatureID = 0;
int nOutEvolveCreatureNameID = 0;
int nOutOverBreed = 0;
int nEvolve = CheckEvolve( m_aAssignData[ nSlotID ].card_info.socket, pSummonInfo->nEvolve_target, nOutLevel, nOutEvolveType, nOutEvolveCreatureID, nOutEvolveCreatureNameID, nOutOverBreed );
if(nEvolve == -1) // 에러면 리턴
return 0;
int nRHour = 0;
if(m_aAssignData[ nSlotID ].bKeep30 == TRUE) // 보관 상태일 경우 맡긴 기간의 경험치만 얻을 수 있다 //2011.08.22 - servantes 코드 추가 (== TRUE)
nRHour = m_aAssignData[ nSlotID ].duration;
else
nRHour = m_aAssignData[ nSlotID ].elasped_time;
if(m_aAssignData[ nSlotID ].duration <= 0)
nRHour = 1;
// 크래커 사용시 경험치 1.5배
DOUBLE fRate = m_aAssignData[nSlotID].using_cracker ? 1.5 : 1.0;
int nElaspedHour = TIME_CALCULATE_HOUR( nRHour );
int nTicketTerm = m_aAssignData[nSlotID].nTicketTermType;
int nTicketType = m_aAssignData[nSlotID].nTicketType;
int nLVGap=0;
int nLVMax=0;
int nGetExp=0;
switch( nGrow_Type )
{
case SummonBase::EVOLVE_NORMAL: // 기본형이면 최대 60까지
{
nGetExp = GetExpPerHour( nGrow_Type, nTicketType );
//nGetExp = COST_CALCULATE_EXP_LV1;
nLVMax = CFARM_MAXLEVEL_LV1;
if(nOutLevel > nLVMax)
nOutLevel = nLVMax;
nLVGap = nLVMax - nOutLevel;
break;
}
case SummonBase::EVOLVE_GROWTH: // 성장형이면 최대 100까지( 성장형의 최대 레벨은 115이지만 농장에 맡길 수 있는 레벨은 100까지이므로)
{
nGetExp = GetExpPerHour( nGrow_Type, nTicketType );
//nGetExp = COST_CALCULATE_EXP_LV2;
nLVMax = CFARM_MAXLEVEL_LV2;
if(nOutLevel > nLVMax)
nOutLevel = nLVMax;
nLVGap = nLVMax - nOutLevel;
break;
}
case SummonBase::EVOLVE_EVOLVE:
{
nGetExp = GetExpPerHour( nGrow_Type, nTicketType );
nLVMax = CFARM_MAXLEVEL_LV3;
if( nOutLevel > nLVMax )
nOutLevel = nLVMax;
nLVGap = nLVMax - nOutLevel;
}
break;
default:
return false;
}
// 경험치에 따른 레벨 계산
int nGoalLevel=0, nCountHour=0;
if( nTicketTerm > 0 )
nCountHour = nTicketTerm * 24;
// if (m_aAssignData[ nSlotID ].nTicketTermType == 3)
// nCountHour = 3 * 24;
// else if(m_aAssignData[ nSlotID ].nTicketTermType == 7)
// nCountHour = 7 * 24;
__int64 nExpResult = m_aAssignData[nSlotID].exp + ((__int64)nGetExp * nElaspedHour* fRate);
int nLVResult = GetSummonExpDB().GetLevelByExp( nExpResult ) + 2;
if(nLVResult < 0)
return 0;
if(nLVResult > nLVMax)
nLVResult = nLVMax;
if(nLVResult < nOutLevel) //2011.08.22 - servantes 최소레벨 검사코드 추가
nLVResult = nOutLevel;
if(nLVResult == 0)
nLVResult = 1;
char strBuf[32]={0};
sprintf(strBuf, "%d", nLVResult);
InsertCaption_LV_slot(nSlotID, strBuf); // 현재 레벨 표시
if(nElaspedHour)
{
sprintf(strBuf, "%d", nLVResult);
InsertCaption_current_level(strBuf); // 현재 레벨 표시
m_selectCreatureCurLevel = nLVResult; /// 2011.03.29 - prodongi
}
else if(nElaspedHour == 0)
{
sprintf(strBuf, "Lv %d", nOutLevel);
InsertCaption_current_level(strBuf); // 현재 레벨 표시
m_selectCreatureCurLevel = nOutLevel; /// 2011.03.29 - prodongi
}
sprintf(strBuf, "Lv %d", nOutLevel);
InsertCaption_start_level(strBuf); // 시작 레벨 표시
nExpResult = m_aAssignData[nSlotID].exp + ((__int64)nGetExp * nCountHour * fRate);
nGoalLevel = GetSummonExpDB().GetLevelByExp( nExpResult ) + 2;
if(nGoalLevel < 0)
return 0;
if(nGoalLevel > nLVMax) // 진화단계에 따라 성장할 수 있는 레벨을 제한한다
nGoalLevel = nLVMax;
sprintf(strBuf, "Lv %d", nGoalLevel);
InsertCaption_goal_level(strBuf); // 최종 레벨 표시
return 1;
}
// 현재 광고판 상태를 변경한다
void SUICreatureFarmWnd::SetAdvertise(int _state)
{
if(g_bChangeAD == FALSE)
return ;
int _id_text = 0;
g_Ad_text_id++;
m_nAdvertiseState = _state;
switch(m_nAdvertiseState)
{
case REQ_CREATURE_ASSIGN: // 1127 크리쳐 맡기기를 하려면 크리쳐 카드를 먼저 넣어 주세요
{
_id_text = 1127;
m_pEdit_Advertise->SetEnableColor( "<#b92c36>" );
break;
}
case REQ_CREATURE_TICKET: // 농장이용권 도움말 출력
{
_id_text = 1128;
m_pEdit_Advertise->SetEnableColor( "<#b92c36>" );
break;
}
case REQ_CREATURE_CRACKER: // 크래커 도움말 출력
{
_id_text = 1129;
m_pEdit_Advertise->SetEnableColor( "<#00736a>" );
break;
}
case REQ_CREATURE_ASSIGN_AFTER: // 크리처 맡긴 후 도움말 출력
{
if(g_Ad_text_id > 5)
g_Ad_text_id = 0;
if (g_Ad_text_id == 0)
_id_text = 1130;
else if(g_Ad_text_id == 1)
_id_text = 1131;
else if(g_Ad_text_id == 2)
_id_text = 1132;
else if(g_Ad_text_id == 3)
_id_text = 1133;
else if(g_Ad_text_id == 4)
_id_text = 1134;
else if(g_Ad_text_id == 5)
_id_text = 1135;
m_pEdit_Advertise->SetEnableColor( "<#00736a>" );
break;
}
default:
{
_id_text = 0; // error
break;
}
}
if(_id_text == 0)
_id_text = 1127;
if(_id_text)
InsertCaption_ad( S(_id_text), "" );
#ifdef _COUNTRY_ME_
m_pEdit_Advertise->setCaptionScroll(true, true, sSpritePrimitiveScrollType::RIGHT, g_fAdvertiseTime, 0.1f);
#else
m_pEdit_Advertise->setCaptionScroll(true, true, sSpritePrimitiveScrollType::LEFT, g_fAdvertiseTime, 0.1f);
#endif
m_nAdvertiseStateOld = m_nAdvertiseState;
g_bChangeAD = FALSE;
}
// 서버에게 크리처를 되찾는다고 알린다
BOOL SUICreatureFarmWnd::OnSendPacket_RegainCreature(AR_HANDLE hSelectCreatureCardHandle)
{
if(hSelectCreatureCardHandle <= 0)
return 0;
TS_CS_RETRIEVE_CREATURE msg;
msg.creature_card_handle = hSelectCreatureCardHandle;
m_pGameManager->PendMessage( &msg );
return TRUE;
}
// 서버에게 크리처를 맡긴다고 알린다
BOOL SUICreatureFarmWnd::OnSendPacket_AssignCreature(AR_HANDLE hSelectCreatureCardHandle)
{
if(hSelectCreatureCardHandle <= 0)
return 0;
// 크리처 맡기기 요청
char buffer[1024];
TS_CS_FOSTER_CREATURE* pMsg = reinterpret_cast<TS_CS_FOSTER_CREATURE*>(buffer);
new (buffer) TS_CS_FOSTER_CREATURE();
pMsg->creature_card_handle = hSelectCreatureCardHandle;
if(g_nTmpTicketCount == g_nTmpTicketMaxCount)
pMsg->ticket_info_count = 1;
else
return 0;
if(g_nTmpCrackerCount == g_nTmpCrackerMaxCount)
pMsg->cracker_info_count = 1;
else
pMsg->cracker_info_count = 0;
int nTsz = 0;
int nCsz = 0;
TS_CS_FOSTER_CREATURE::TICKET_INFO* ticket_info = reinterpret_cast<TS_CS_FOSTER_CREATURE::TICKET_INFO*>(pMsg + 1);
if(pMsg->ticket_info_count)
{
ticket_info[0].ticket_count = g_nTmpTicketMaxCount;
ticket_info[0].ticket_handle = m_nTicketHandle;
nTsz = sizeof(TS_CS_FOSTER_CREATURE::TICKET_INFO) * 1;
}
if(pMsg->cracker_info_count)
{
TS_CS_FOSTER_CREATURE::CRACKER_INFO* cracker_info = reinterpret_cast<TS_CS_FOSTER_CREATURE::CRACKER_INFO*>(ticket_info + 1);
cracker_info[0].cracker_count = g_nTmpCrackerMaxCount;
cracker_info[0].cracker_handle = m_nCrackerHandle;
nCsz = sizeof(TS_CS_FOSTER_CREATURE::CRACKER_INFO) * 1;
}
pMsg->size = sizeof(TS_CS_FOSTER_CREATURE) + nTsz + nCsz;
pMsg->set_check_sum();
m_pGameManager->PendMessage( pMsg ); // 서버에 크리처 맡기기 패킷을 보낸다
return 1;
}
// 서버에게 크리처농장 정보 요청한다
BOOL SUICreatureFarmWnd::OnSendPacket_RequestCreatureFarmInfo()
{
TS_CS_REQUEST_FARM_INFO msg;
m_pGameManager->PendMessage( &msg );
return 1;
}
// 서버에게 크리처를 돌본다고 알린다
BOOL SUICreatureFarmWnd::OnSendPacket_Nurse(AR_HANDLE hSelectCreatureCardHandle)
{
if(hSelectCreatureCardHandle <= 0)
return 0;
TS_CS_NURSE_CREATURE msg;
msg.creature_card_handle = hSelectCreatureCardHandle;
m_pGameManager->PendMessage( &msg );
return 1;
}
// 서버에게 마켓 창을 열어 달라 요청한다 //2011.06.16 - servantes
BOOL SUICreatureFarmWnd::OnSendPacket_OpenMarket()
{
TS_CS_REQUEST_FARM_MARKET msg;
m_pGameManager->PendMessage( &msg );
return 1;
}
/// 2011.03.29 - prodongi
void SUICreatureFarmWnd::SetAdvertiseState(int _state)
{
m_nAdvertiseState = _state;
if(m_nAdvertiseStateOld == m_nAdvertiseState)
return ;
SetAdvertise(m_nAdvertiseState);
m_nAdvertiseStateOld = _state;
}
/// 2011.03.29 - prodongi
bool SUICreatureFarmWnd::isAssignedCreature(int cardHandle) const
{
for (int i = 0; i < FARM_SLOT_CNT; ++i)
{
if (cardHandle == m_aAssignData[i].card_info.handle)
{
return true;
}
}
return false;
}
int SUICreatureFarmWnd::GetExpPerHour( int nGrowType, int nTicketType )
{
static const int TICKET_TYPE_PRIMIER = 2;
int nResult = 0;
switch( nGrowType )
{
case SummonBase::EVOLVE_NORMAL:
nResult = ( nTicketType == TICKET_TYPE_PRIMIER ? COST_CALCULATE_EXP_PRIMIER_LV1 : COST_CALCULATE_EXP_NORMAL_LV1 );
break;
case SummonBase::EVOLVE_GROWTH:
nResult = ( nTicketType == TICKET_TYPE_PRIMIER ? COST_CALCULATE_EXP_PRIMIER_LV2 : COST_CALCULATE_EXP_NORMAL_LV2 );
break;
case SummonBase::EVOLVE_EVOLVE:
nResult = ( nTicketType == TICKET_TYPE_PRIMIER ? COST_CALCULATE_EXP_PRIMIER_LV3 : COST_CALCULATE_EXP_NORMAL_LV3 );
break;
}
return nResult;
}
//===============================================================================================================
// SUICreatureFarmHelpWnd
//===============================================================================================================
SUICreatureFarmHelpWnd::SUICreatureFarmHelpWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo )
: SUIWnd( pGameManager )
, m_pDisplayInfo( pDisplayInfo )
{
m_pScrollBar = NULL;
}
void* SUICreatureFarmHelpWnd::Perform( KID id, KArg& msg )
{
return SUIWnd::Perform( id, msg );
}
void SUICreatureFarmHelpWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam )
{
switch(nMessage)
{
case KUI_MESSAGE::KBUTTON_PRESSING:
{
if( ::strcmp(lpszControlID, "button_close_02") == 0 )
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_FRAM_HELP_WND, false ) );
}
break;
}
case KUI_MESSAGE::KSCROLL_SELECT: // 스크롤 선택
{
if( ::strcmp(lpszControlID, "scroll_bg_trim_01") == 0 )
{
int nPos = int(lparam);
nPos = max( nPos, 0 );
KRect rtParent = GetRect();
int nCtrlPosX=15, nCtrlPosY=30, nCtrlPosMax=250;
for( int k=1; k<10; k++ )
{
char aCtrlName[128]={0};
sprintf(aCtrlName, "creature_farm_help_text_%02d", k);
KUIWnd* pCtrl = GetChild( aCtrlName );
if(NULL == pCtrl)
continue;
if(k < nPos)
{
pCtrl->SetShow(0);
continue;
}
KRect rt = pCtrl->GetRect();
if(nCtrlPosY + rt.GetHeight() > nCtrlPosMax)
{
pCtrl->SetShow(0);
continue;
}
pCtrl->MovePos(rtParent.left + nCtrlPosX, rtParent.top + nCtrlPosY);
pCtrl->SetShow(1);
nCtrlPosY += rt.GetHeight();;
}
InvalidateWnd();
}
break;
}
case KUI_MESSAGE::KGENWND_MOVE: // 윈도우 이동
{
LimitMoveWnd(); // 게임 외부로 나가지 못하게 제한
break;
}
}
SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam );
}
void SUICreatureFarmHelpWnd::ProcMsgAtStatic( SGameMessage* pMsg )
{
}
void SUICreatureFarmHelpWnd::Process( DWORD dwTime )
{
SUIWnd::Process( dwTime );
}
bool SUICreatureFarmHelpWnd::InitData( bool bReload )
{
m_pScrollBar = dynamicCast<KUIControlScrollBase*>(GetChild( "scroll_bg_trim_01" ));
if(NULL == m_pScrollBar)
return SUIWnd::InitData(bReload);
m_pScrollBar->SetScrollRange(6, 9);
return SUIWnd::InitData(bReload);
}
bool SUICreatureFarmHelpWnd::InitControls( KPoint kPos )
{
return SUIWnd::InitControls( kPos );
}
void SUICreatureFarmHelpWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd )
{
int k=0;
k=0;
SUIWnd::OnNotifyUIWindowOpen(bOpen);
}
//===============================================================================================================
// SCreatureAssignState
//===============================================================================================================
DWORD g_SECOND_CHECK1 = (60 * 1000 * 60); // 1시간
#define SECOND_30DAYS ((DWORD)(30 * 24 * 60 * 60 * 1000)) // 30일
#define SECOND_CHECK1 ((DWORD)(60 * 1000 * 1)) // 1분
DWORD g_old_CreatureAssignState_frame_tick = 0;
SCreatureAssignState::SCreatureAssignState()
{
Clear();
}
void SCreatureAssignState::Clear()
{
bUse = false;
bKeep30 = false;
duration = 0; // 맡기는 기간
duration_elasped = 0; // 맡기는 기간 경과시간
elasped_time = 0; // 경과 시간 - 크리처 맡긴 이후 흘러간 시간
refresh_time = 0; // 돌보기 할 수 있는 시점까지 남은 시간
refresh_elasped_time = 0; // 돌보기 할 수 있는 시점까지 남은 시간 - 돌보기 활성화를 위해 흘러간 시간
keep_elasped_time = 0; // 돌보기 할 수 있는 시점까지 남은 시간 - 돌보기 활성화를 위해 흘러간 시간
temp_keep_elasped_10m = 0; // 맡기기기간 만료후 보관기간 표시 시간 (10분마다 갱신)
}
SCreatureAssignStateMgr::SCreatureAssignStateMgr()
{
g_old_CreatureAssignState_frame_tick = 0;
m_bWork = FALSE;
ClearInfoAll();
}
SCreatureAssignStateMgr::~SCreatureAssignStateMgr()
{
m_pParent = NULL;
m_bWork = FALSE;
ClearInfoAll();
g_old_CreatureAssignState_frame_tick = 0;
}
void SCreatureAssignStateMgr::SetParent(SUICreatureFarmWnd* pParent)
{
m_pParent = pParent;
}
void SCreatureAssignStateMgr::SetWorkFlag(BOOL bWork)
{
m_bWork = bWork;
if(bWork)
g_old_CreatureAssignState_frame_tick = GetSafeTickCount();
}
void SCreatureAssignStateMgr::SetInfo(int _id, bool _bUse, int _duration, int _duration_elasped, int _elasped_time, int _refresh_time, int _refresh_elasped_time)
{
m_aAssignState[_id].bUse = _bUse;
m_aAssignState[_id].duration = _duration * 1000;
m_aAssignState[_id].duration_elasped = _duration_elasped * 1000;
m_aAssignState[_id].elasped_time = _elasped_time * 1000;
m_aAssignState[_id].refresh_time = _refresh_time * 1000;
m_aAssignState[_id].refresh_elasped_time = _refresh_elasped_time * 1000;
m_aAssignState[_id].temp_keep_elasped_10m = 0;
}
void SCreatureAssignStateMgr::ClearInfo(int _id)
{
m_aAssignState[_id].bUse = false;
m_aAssignState[_id].duration = 0;
m_aAssignState[_id].duration_elasped = 0;
m_aAssignState[_id].elasped_time = 0;
m_aAssignState[_id].refresh_time = 0;
m_aAssignState[_id].refresh_elasped_time = 0;
m_aAssignState[_id].keep_elasped_time = 0;
m_aAssignState[_id].temp_keep_elasped_10m = 0;
}
void SCreatureAssignStateMgr::ClearInfoAll()
{
ClearInfo(0);
ClearInfo(1);
ClearInfo(2);
}
void SCreatureAssignStateMgr::CheckState(int _id, DWORD dwFrameTick)
{
if(m_aAssignState[_id].bUse == FALSE)
return ;
SCreatureAssignState* pData = &m_aAssignState[_id];
if( pData->duration * 1 > 0 ) // 맡긴 기간
{
pData->elasped_time += dwFrameTick;
if(pData->elasped_time >= pData->duration * 1)
{
// 초기화 한다
pData->duration = -1; // 맡긴 시간
pData->duration_elasped = 0; // 맡기기한 뒤 지난 시간
m_pParent->PostMsgAtDynamic( new SIMSG_UI_CREATURE_DATA( _id, IMSG_UI_CREATURE_DATA_KEEP30, 1154) ); // 기간만료 문자열 설정
}
}
if( pData->refresh_time * 1 > 0 ) // 돌보기 했던 경우 -
{
pData->refresh_elasped_time += dwFrameTick;
if(pData->refresh_elasped_time >= pData->refresh_time * 1)
{
// 초기화 한다
pData->refresh_time = -1; // 다시 돌보기할 때까지 남은 시간
pData->refresh_elasped_time = 0; // 돌보기한 뒤 지난 시간
m_pParent->PostMsgAtDynamic( new SIMSG_UI_CREATURE_DATA( _id, IMSG_UI_CREATURE_DATA_TAKECARE_BTN, 1) );
}
}
}
void SCreatureAssignStateMgr::Process( DWORD dwTime )
{
DWORD dwFrame = dwTime - g_old_CreatureAssignState_frame_tick;
CheckState(0, dwFrame);
CheckState(1, dwFrame);
CheckState(2, dwFrame);
g_old_CreatureAssignState_frame_tick = dwTime;
}