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

274 lines
14 KiB
C++

#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 );
};