Files
2022-10-26 12:25:11 +08:00

266 lines
7.1 KiB
C++

#pragma once
#if !defined(_NA_006802_20130704_REORGANIZATION_RANK_SYSTEM)
//------------------------------------------------------------------------------
//
// 작업자: 이지연
// uiMissionRankMan class
//------------------------------------------------------------------------------
#include "uiBaseMan.h"
#include "MapInfoParser.h"
#include "RankingManager.h"
#define MAX_WEEK_RANK 10
#define MAX_PREWEEK_RANK 3
#define MAX_FAME_RANK 1
#define MAX_RANK_MEMBER 10
#define MAX_PAGE 4
#define TEMP_STRING_LENGTH 64
#define GENERAL_MON 1
#define LEADER_MON 2
#include <time.h>
TYPEDEF_MAP(MISSION_GROUP, CODETYPE, MapGroup * );
typedef std::multimap<DWORD, sMAPINFO*> EVENTMAP_MULTIMAP;
typedef std::pair<DWORD, sMAPINFO*> EVENTMAP_PAIR;
typedef EVENTMAP_MULTIMAP::iterator EVENTMAP_ITER;
struct stMissionRankData
{
int iRank;
int iPartyNum;
int iLevel;
DWORD dwTime;
//util::_tstring strName;
TCHAR strName[MAX_CHARNAME_LENGTH + 1];
};
struct stMissionRankMemberData
{
int iLevel;
//util::_tstring strGuild;
//util::_tstring strName;
TCHAR strGuild[MAX_GUILDNAME_LENGTH + 1];
TCHAR strName[MAX_CHARNAME_LENGTH + 1];
};
struct stRqstMissionRankInfo
{
RANKINGNO no;
BYTE page;
};
struct stEventMapInfo
{
DWORD dwCategory;
int iGroup;
};
struct IM_MISSION_RANK_MANAGER
{
static const DWORD RankMenu;
static const DWORD MissionRankList;
static const DWORD PointRankList;
static const DWORD RankTimer;
static const DWORD RankEnding;
static const DWORD RankGamble;
};
class uiMissionRankTimer;
class uiMissionRankEnding;
class uiMissionRankList;
class uiMissionRankGamble;
class uiRankMenu;
class uiMissionRankMan : public uiBaseMan
{
public:
uiMissionRankMan(InterfaceManager *pUIMan);
//--------------------------------------------------------------------------
// init/release
//
public:
virtual void OnInitialize();
virtual void OnRelease();
private:
BOOL _LoadUI();
//--------------------------------------------------------------------------
// functions
//
public:
void InitMissionGroup();
void InitMission();
void ClearRankData();
void SetReceivedStartMissionTime(DWORD dwRecievedTime, DWORD dwMissionTime);
void SetReceivedUpdateMissionTime(DWORD dwRecievedTime, DWORD dwMissionTime);
void SetClearTime(DWORD dwClearTime);
void DisplayTime();
void DisplayEnding(int iRank, int iPartyNum, TCHAR* pMasterName);
void CloseEndingDlg();
void ShowRankList(int iType);
TCHAR* GetMemberName(RANKINGNO no, RANKINGKEY key, eRANKING_TYPE type);
int GetMemberLV(RANKINGNO no, RANKINGKEY key, eRANKING_TYPE type);
void ShowRankGamble();
void CloseMissionRunningDlg();
void CloseMissionRankingDlg();
void GetTimeString(DWORD dwTime, util::_tstring &strTime);
void SetRewardRank(int iRank) { m_dwMyRankForReward = iRank; }
void SetReceiveData(BYTE type, RANKINGNO no, BYTE page); // 서버로부터 받아온 데이터를 셋팅한다
bool IsRankData(RANKINGNO no, BYTE page);
void UpdateReceiveData(RANKINGNO no, BYTE page);
void SetMemberData(RANKINGNO no, RANKINGKEY key, eRANKING_TYPE type);
bool IsEnableReward();
void CheckEnableMissionRankingRecord();
bool IsEnableMissionRanking();
void Send_CG_MISSION_RANKING_INFO_SYN(BYTE byPendingRankingType, RANKINGNO PendingMissionNo, BYTE byPendingPage);
void Send_CG_MISSION_RANKING_REWARD_SYN();
void Send_CG_MISSION_RANKING_MEMBER_INFO_SYN(RANKINGNO no, int iIndex, eRANKING_TYPE type);
RANKINGKEY GetRewardRankKey() { return m_RewardRankKey; }
RANKINGNO GetRewardMissionNo() { return m_RewardMissionNo; }
void SetFinishDay(DWORD dwSettledDate);
bool DecPage();
bool IncPage();
bool IsMissionRanking(RANKINGNO no, int iRankSystemType = 1);
std::vector<stEventMapInfo> GetEventMapCategory() { return m_vecEventMapCategory; }
EVENTMAP_MULTIMAP GetEventMap() { return m_mapEventMap; }
int GetRankingSystemType() { return m_iRankingSystemType; }
void SetRankingSystemType(int iType) { m_iRankingSystemType = iType; }
void ShowRankMenu( BOOL bShow );
private:
bool m_bWaitRcvPacket;
void _addTestData();
void _processErrorCode(DWORD dwErrorCode, eOUTPUT_MSG_TYPE type = eOUTPUT_MSG_CHAT);
//--------------------------------------------------------------------------
// procedure
//
public:
virtual void NetworkProc( MSG_BASE * pMsg );
//--------------------------------------------------------------------------
// member vars
//
private:
uiMissionRankTimer* m_pUIRankTimer;
uiMissionRankEnding* m_pUIRankEnding;
uiMissionRankList* m_pUIRankList;
uiMissionRankList* m_pUIPointList;
uiRankMenu * m_pUIRankMenu;
uiMissionRankGamble* m_pUIRankGamble;
DWORD m_SettledDate;
RANKINGNO m_CurMissionNo; // 현재 리스트를 보여주고 있는 미션번호
bool m_bEnableMissionRanking; // 미션랭킹 적용가능한가
MISSION_RANK_MEMBER_INFO m_MissionPartyInfo[MAX_PARTYMEMBER_NUM];
EVENTMAP_MULTIMAP m_mapEventMap;
std::vector<stEventMapInfo> m_vecEventMapCategory;
public:
DWORD m_dwMissionTime;
DWORD m_dwStartMissionTime; // 미션시작을 받은시간 --;
DWORD m_dwUpdateMissionTime;
DWORD m_dwMissionClearTime; //서버로 부터 받은 미션 종료시간(최종 미션 종료시간)
DWORD m_dwResultMissionClear; //몬스터 kill 수 빼기 전 시간
DWORD m_dwTotalMonsterDecTimeSecond; //총 몬스터 단축 시간(초)
DWORD m_dwGeneralMonsterDecSecond; //일반 몬스터 단축 시간(초)
DWORD m_dwLeaderMonsterDecSecond; //리더 단축 시간(초)
DWORD m_dwTotalMonsterKillNum;
DWORD m_dwMaxMonsterKillNum;
DWORD m_dwMonsterKillNum_General;
DWORD m_dwMonsterKillNum_Leader;
bool m_bMissionCleared;
DWORD m_dwMissionBestTime; // 최고기록
DWORD m_dwElapsedTime;
int m_iMyRank;
int m_iMyPartyNum;
util::_tstring m_strMyPartyMasterName;
DWORD m_dwMyRankForReward; // 보상 받을 수 있는 등수인가
RANKINGKEY m_RewardRankKey; // 내가 보상받을 랭킹 key
RANKINGNO m_RewardMissionNo; // 내가 보상받을 미션 번호
stMissionRankData m_FameData; // 명예의 전당 목록
stMissionRankData m_PreWeekRank[MAX_PREWEEK_RANK]; // 지난주간 순위 목록
stMissionRankData m_CurWeekRank[MAX_WEEK_RANK]; // 이번주간 순위 목록
stMissionRankMemberData m_MemberData[MAX_RANK_MEMBER]; // 구성원 정보
util::_tstring m_strFinishDay;
MISSION_GROUP_MAP m_MapMissionGroup;
std::vector<MAPCODE> m_vecMissionCode;
BYTE m_PendingRankingType; //< eRANKING_TYPE 참조
RANKINGNO m_PendingMissionNo;
RANKINGKEY m_PendingRankingKey;
BYTE m_PendingPage;
eRANKING_TYPE m_RqstRankingType; //< eRANKING_TYPE 참조
RANKINGNO m_RqstMissionNo;
BYTE m_CurRankPage; // 현재 리스트를 보여주고 있는 미션의 페이지(주간순위)
std::vector<stRqstMissionRankInfo> vecRqstMission;
int m_iRankingSystemType;
std::vector<MAPCODE> m_vecEventMapCode;
BOOL m_bRecvStartTimer;
};
#endif // _NA_006802_20130704_REORGANIZATION_RANK_SYSTEM