#pragma once //#include "SUIWnd.h" #define FARM_SLOT_CNT 3 class KUIControl3DStatic; class KUIControlEdit; class SUIDisplayInfo; class SGameAvatarEx; class KUIControlScrollBase; class SUICreatureFarmWnd; //=============================================================================================================== // SCreatureAssignState //=============================================================================================================== struct SCreatureAssignState { SCreatureAssignState(); void Clear(); bool bUse; bool bKeep30; DWORD keep_elasped_time; // 보관 30일 기간까지 흘러긴 시간 DWORD duration; // 맡기는 기간 DWORD duration_elasped; // 맡기는 기간 경과시간 DWORD elasped_time; // 경과 시간 - 크리처 맡긴 이후 흘러간 시간 DWORD refresh_time; // 돌보기 할 수 있는 시점까지 남은 시간 DWORD refresh_elasped_time; // 돌보기 할 수 있는 시점까지 남은 시간 - 돌보기 활성화를 위해 흘러간 시간 DWORD temp_keep_elasped_10m; // 정보 갱신을 위한 시간 }; class SCreatureAssignStateMgr { private: SUICreatureFarmWnd* m_pParent; BOOL m_bWork; SCreatureAssignState m_aAssignState[3]; public: void SetParent(SUICreatureFarmWnd* pParent); void SetWorkFlag(BOOL bWork); SCreatureAssignState* GetInfo(int _id) { return &m_aAssignState[_id]; } void SetInfo(int _id, bool _bUse, int _duration, int _duration_elasped, int _elasped_time, int _refresh_time, int _refresh_elasped_time); void ClearInfo(int _id); void ClearInfoAll(); void CheckState(int _id, DWORD dwFrameTick); virtual void Process( DWORD dwTime ); public: SCreatureAssignStateMgr(); virtual ~SCreatureAssignStateMgr(); }; //=============================================================================================================== // SUICreatureFarmWnd //=============================================================================================================== class SUICreatureFarmWnd : public SUIWnd { public: struct SAssignData { SAssignData(); SUICreatureFarmWnd::SAssignData& operator = (SUICreatureFarmWnd::SAssignData* p); void Clear(); BOOL IsEanbleAssign(); BOOL bKeep30; // 30일 보관중 BOOL bUse; // 사용중인지 여부 int nTicketType; // 티켓 종류 int nTicketTermType; // 티켓 사용기간 int nTicketCount; // 티켓 개수 int nCrackerCount; // 크래커 개수 std::string strFaceIconFileName; // 얼굴 아이콘 파일 이름 std::string strTicketIconFileName; // 티켓 아이콘 파일 이름 std::string strCrackerIconFileName; // 크래커 아이콘 파일 이름 int codeCreature; // 크리처 코드 ( DB에 이 코드 번호로 저장되어있다 ) AR_HANDLE idCard; // 크리처 카드의 디비 아이디 int nIndex; // 농장슬롯 char name[19]; // 이름 int duration; // 맡기는 기간 int duration_elasped; // 맡기는 기간 경과시간 int elasped_time; // 경과 시간 - 크리처 맡긴 이후 흘러간 시간 int refresh_time; // 돌보기 할 수 있는 시점까지 남은 시간 int refresh_elasped_time; // 돌보기 할 수 있는 시점까지 남은 시간 - 돌보기 활성화를 위해 흘러간 시간 char using_cash; // char using_cracker; // char evolution_grade; // 진화 단계 int idEvolutionTypeName; // 진화 종류의 이름 __int64 exp; // 경험치 TS_ITEM_BASE_INFO card_info; // 크리처 카드의 아이템 정보 }; public: SUICreatureFarmWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ); virtual ~SUICreatureFarmWnd(); virtual void* Perform( KID id, KArg& msg ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void Process( DWORD dwTime ); virtual bool InitData( bool bReload = false ); virtual bool InitControls( KPoint kPos ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); void SetAdvertiseState(int _state); int GetAdvertiseState() { return m_nAdvertiseState; } public: // insert caption funtion void InsertCaption_remain_time(const char* pContents); // 맡긴 기간 표시 - 상단 void InsertCaption_remain_time_slot(int nSlot, const char* pContents); // 맡긴 기간 표시 - 슬롯 void InsertCaption_cracker(const char* pContents); // 크래커 표시 - 상단 void InsertCaption_cracker_count(const char* pContents); // 크래커 개수 표시 - 상단 void InsertCaption_ticket_count(const char* pContents); // 티켓 개수 표시 - 상단 void InsertCaption_LV_slot(int nSlot, const char* pContentsLV); // 레벨 표시 - 슬롯 void InsertCaption_current_level(const char* pLVString); // 현재 레벨 void InsertCaption_start_level(const char* pLVString); // 시작 레벨 void InsertCaption_goal_level(const char* pLVString); // 목표 레벨 void InsertCaption_enhance(const char* pEnhanceString); // 강화단계표시 void InsertCaption_name_slot(int nSlot, const char* name); // 이름 표시 - 슬롯 void InsertCaption_kind_slot(int nSlot, const char* pKindString); // 종류 표시 - 슬롯 void InsertCaption_ad(const char* pKindString, const char* pColor); // 광고판 void InsertCaption_name(const char* pNameString); // 이름 public: BOOL CalculateEXP_ex_slot(int nSlot, int nSummonID, int nCurrentLevel, int nCreatureCode, int* pSocket, BOOL bUseCracker, int nEvolveType, int nTicketTerm, int nTicketType); BOOL CalculateEXP_ex(int nCurrentLevel, int nSummonID, int nCreatureCode, int* pSocket, BOOL bUseCracker, int nEvolveType, int nTicketTerm, int nTicketType ); // 경험치를 계산 적용한다 BOOL CalculateEXP(int nSlotID); // 경험치를 계산 적용한다 void SetAdvertise(int _state); // 현재 광고판 상태를 변경한다 int SelectEmptySlotIndex(); // 현재 비어있는 슬롯의 인덱스를 찾는다 void ChangeItemSlot(int nTicketType); // 크래커 존재 여부와 티켓의 종류에 따라 슬롯상태를 변경한다 BOOL SetShowCreature3DModel(AR_HANDLE hCreature, int nEnhance, KUIControl3DStatic* pCtrl); // 크리처 모델을 UI에 보인다 const char* GetTicketItemIconName(int nSelectSlotID); // 티켓 아이템의 아이콘 파일 이름을 얻는다 const char* GetCrackerItemIconName(BOOL bCrackerExist); // 크래커 아이템의 아이콘 파일 이름을 얻는다 int SetElapsedTime(int nSlotID, DWORD dwTime, BOOL bReset=FALSE);// 시간 설정 - 게이지 컨트롤 갱신시칸다 void SetCreatureTime(int nSlotID, const char* pContents); // 크리처 맡기기 남은 시간 설정 int SetCreatureInfo( void* pPacket ); // 크리처 정보 설정 int SetCreatureInfo( int nSlotID ); // 크리처 정보 설정 int SetCreatureInfoDisplay( int nSlotID ); // 크리처 정보 설정 int SetCreatureSlotState( BOOL bUserCashItem ); // 슬롯 상태 변경한다 - 캐쉬아이템 void SetCreatureSlotStateEdit( int nSlotID, BOOL bEnable ); // 슬롯 상태 변경한다 - 활성 / 비활성 void SetCreatureSlotCoverStateEdit( bool bEnable ); // 슬롯 커버 상태 변경한다 - 활성 / 비활성 void ClearUIDisplay(); // 현재 크리처 정보 표기를 삭제한다 int CheckEvolve(int* pSocket, int nID_Evolve_target, int& nOutLevel, int& nOutEvolveType, int& nOutEvolveCreatureID, int& nOutEvolveCreatureNameID, int& nOutOverBreed); // 진화여부 검사 int Regain(int nSlotID); // 되찾기 void PostMsgAtDynamic(SGameMessage* pMsg); BOOL IsEnaleAssin(); // 맡기기가 가능한지 최종 검사함수 BOOL IsEnaleRegain(); // 되찾기가 가능한지 최종 검사함수 BOOL IsExistAssignCreature(); // 맡겨진 크리처가 있는지 검사 BOOL OnSendPacket_AssignCreature(AR_HANDLE hSelectCreatureCardHandle); // 서버에게 크리처를 맡긴다고 알린다 BOOL OnSendPacket_RegainCreature(AR_HANDLE hSelectCreatureCardHandle); // 서버에게 크리처를 되찾는다고 알린다 BOOL OnSendPacket_RequestCreatureFarmInfo(); // 서버에게 크리처농장 정보 요청한다 BOOL OnSendPacket_Nurse(AR_HANDLE hSelectCreatureCardHandle); // 서버에게 크리처를 돌본다고 알린다 BOOL OnSendPacket_OpenMarket(); // 서버에게 마켓 창을 열어 달라 요청한다 //2011.06.16 - servantes protected: bool isAssignedCreature(int cardHandle) const; /// 2011.03.29 현재 슬롯에 할당되어 있는 넘인지 아닌지 - prodongi int GetExpPerHour(int nGrowType, int nTicketType ) ; // nTicketType == 2라면 프리미어 private: SCreatureAssignStateMgr m_CreatureAssignStateMgr; // 크리처 슬롯 상태 관리자 AR_HANDLE m_hCreature_display; // 보여주기용 크리처 핸들 SGameAvatarEx* m_pDisplayCreature; int m_nDisplayCreatureLevel; int m_nDisplayCreatureID; int m_nDisplayCreatureObjectType; int m_nDisplayCreatureContentID; BOOL m_bFaceCutSet; BOOL m_bCrackerSet; int m_nTicketType; BOOL m_bEnableAssign; int m_nAdvertiseState; // 광고판 상태 int m_nAdvertiseStateOld; // 광고판 상태 private: SUIDisplayInfo* m_pDisplayInfo; int m_nSelectCreatureSlot; // 현재 선택한 크리처 슬롯 AR_HANDLE m_nTicketHandle; // 현재 선택한 티켓 핸들 AR_HANDLE m_nCrackerHandle; // 현재 선택한 크래커 핸들 AR_HANDLE m_nSelectCreatureCardHandle; // 현재 선택한 크리처 카드 핸들 AR_HANDLE m_nOldSelectCreatureCardHandle; // 먼저 선택했던 크리처 카드 핸들 int m_selectCreatureCurLevel; /// 2011.03.29 현재 선택한 크리처의 레벨 BOOL m_bEnableCashItem; // 캐쉬아이템 사용 여부 SAssignData m_aAssignData[FARM_SLOT_CNT]; // 크리처 맡기기 위한 데이타 / 티켓 종류 / 티켓 사용기간 / 티켓 개수 / 크래커 개수 private: KUIControlStatic* m_pEdit_Advertise; KUIControl3DStatic* m_p3DStatic_Creature; KUIControlStatic* m_pStatic_SelectSlot; KUIControlStatic* m_pStatic_DragNDrop; KUIControlStatic* m_pStatic_CurrentLevel; KUIControlStatic* m_pStatic_Enhance; KUIControlStatic* m_pStatic_StartLevel; KUIControlStatic* m_pStatic_GoalLevel; KUIControlStatic* m_pStatic_Name; KUIControlStatic* m_pStatic_Type; KUIControlStatic* m_pStatic_Time; KUIControlStatic* m_pStatic_Food; KUIControlStatic* m_pStatic_KhrooShopMarkZone; KUIControlStatic* m_pStatic_lbx_select; KUIControlStatic* m_pStatic_lbx_cover_txt[FARM_SLOT_CNT-1]; KUIControlStatic* m_pStatic_lbx_cover[FARM_SLOT_CNT]; KUIControlIconStatic* m_pIconStatic_mark_khroo[FARM_SLOT_CNT]; KUIControlStatic* m_pIconStatic_letter_mark_khroo[FARM_SLOT_CNT-1]; KUIControlButton* m_pBtn_list_item[FARM_SLOT_CNT]; KUIControlIconStatic* m_pStaticIcon_assign_food[FARM_SLOT_CNT]; KUIControlIconStatic* m_pStaticIcon_assign_ticket[FARM_SLOT_CNT]; KUIControlStatic* m_pStatic_lbx_Level[FARM_SLOT_CNT]; KUIControlStatic* m_pStatic_lbx_Name[FARM_SLOT_CNT]; KUIControlStatic* m_pStatic_lbx_Type[FARM_SLOT_CNT]; KUIControlStatic* m_pStatic_lbx_Time[FARM_SLOT_CNT]; // * 2]; KUIControlSimpleButton* m_pBtn_lbx_Assign[FARM_SLOT_CNT]; KUIControlSimpleButton* m_pBtn_Assign; KUIControlSimpleButton* m_pBtn_Regain; KUIControlMultiIcon* m_pStaticIcon_card; KUIControlIconStatic* m_pStaticIcon_food; KUIControlIconStatic* m_pStaticIcon_ticket; KUIControlStatic* m_pStaticIcon_ticket_count; KUIControlStatic* m_pStaticIcon_cracker_count; }; //=============================================================================================================== // SUICreatureFarmHelpWnd //=============================================================================================================== class SUICreatureFarmHelpWnd : public SUIWnd { private: SUIDisplayInfo* m_pDisplayInfo; KUIControlScrollBase* m_pScrollBar; public: SUICreatureFarmHelpWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo ); virtual void* Perform( KID id, KArg& msg ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual void ProcMsgAtStatic( SGameMessage* pMsg ); virtual void Process( DWORD dwTime ); virtual bool InitData( bool bReload = false ); virtual bool InitControls( KPoint kPos ); virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true ); };