#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(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(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("<#ffffff>"); //------------------------------------------------------------------------------------------------------------------------------- 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(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* coblist = COBManager::GetManager()->Load(cobName.c_str()); if (coblist) { std::vector::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 = ""; 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 = "<#ffffff>"; 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 = ""; strCaption += pContents; m_pStatic_Food->SetCaption(strCaption.c_str()); } // 크래커 개수 표시 - 상단 void SUICreatureFarmWnd::InsertCaption_cracker_count(const char* pContents) { if(NULL == pContents) return ; std::string strCaption = ""; 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 = ""; 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 = "<#fff200>"; 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 = "<#fff200>"; 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 = "<#ffffff>"; 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 = "<#39b44a>"; 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 = "<#ffffff>"; 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 = "<#ffffff>"; 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 = "<#876b4a>"; 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 = ""; std::string strCaptionColor = pADColor; strCaption += pADString; // strCaption += pADColor; // strCaption += ""; m_pEdit_Advertise->SetCaption(strCaption.c_str()); } // 이름 void SUICreatureFarmWnd::InsertCaption_name(const char* pNameString) { if(NULL == pNameString) return ; std::string strCaption = "<#ffffff>"; 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(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( &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( &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( &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 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* coblist = COBManager::GetManager()->Load(cobName.c_str()); if (coblist) { std::vector::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(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* coblist = COBManager::GetManager()->Load(cobName.c_str()); if (coblist) { std::vector::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(m_pGameManager->GetActiveGame()); if(pGameWorld) { pGameWorld->GetCommandSystem()->DeleteAvatar(m_hCreature_display); } m_p3DStatic_Creature->SetShow(false); } BOOL bUse = FALSE; for(int k=0; kSetShow(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(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(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(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(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; }