#pragma once //#include //#include #include #include #include "SGameUIMgr.h" namespace { typedef std::vector STR_LIST; } // 추가 2010.04.13 bintitle. //enum _PERMIT_REQUIRED_ACTION //{ // PRA_PERMISSION_MANAGEMENT = 1 << 0, // 길드 권한 관리 // PRA_MEMBER_MANAGEMENT = 1 << 1, // 길드원 가입과 제외 // PRA_GRANT_REVOKE_PERMISSION = 1 << 2, // 길드원 승급/강등 // PRA_DUNGEON_MANAGEMENT = 1 << 3, // 던전 관리 // PRA_REQUEST_DUNGEON_RAID = 1 << 4, // 던전 레이드 신청 // PRA_ATTACK_TEAM_CREATE = 1 << 5, // 공격대 결성 // PRA_ATTACK_TEAM_JOIN = 1 << 6, // 공격대 참가 // PRA_NOTICE = 1 << 7, // 길드 공지 // PRA_MEMBER_MEMO = 1 << 8, // 길드원 메모 작성/수정 // PRA_ALLIANCE_MANAGEMENT = 1 << 9, // 길드 연합 관리(마스터 길드용) // PRA_ALLIANCE_JOIN = 1 << 10, // 길드 연합 가입(길마 대행 연합 가입) // PRA_ALLIANCE_LEAVE = 1 << 11, // 길드 연합 탈퇴(길마 대행 연합 탈퇴) // PRA_SET_GUILD_ICON = 1 << 12, // 길드 아이콘 설정 //}; enum _PERMISSION { PERMISSION_NONE = 0, // 권한 없음(길드 소속이 아니거나 권한 정보가 부여되지 않은 경우) PERMISSION_MEMBER_LEAST = 1, // 길드 멤버 권한 중 최소 권한 PERMISSION_MEMBER_MAX = 6, // 길드 멤버 권한 중 최대 권한 PERMISSION_LEADER = 7, // 길드장 권한 }; enum _PERMIT_REQUIRED_ACTION { // PRA_PERMISSION_MANAGEMENT = 1 << 0, // 길드 권한 관리 PRA_SET_PERMISSION_NAME = 1 << 0, // 길드등급명쓰기 PRA_MEMBER_INVITE = 1 << 1, // 길드원 초대 PRA_MEMBER_KICK = 1 << 2, // 길드원 추방 PRA_GRANT_REVOKE_PERMISSION = 1 << 3, // 길드원 승급/강등 PRA_DUNGEON_MANAGEMENT = 1 << 4, // 던전 관리 PRA_REQUEST_DUNGEON_RAID = 1 << 5, // 던전 레이드 신청 PRA_ATTACK_TEAM_CREATE = 1 << 6, // 공격대 결성 PRA_ATTACK_TEAM_JOIN = 1 << 7, // 공격대 참가 PRA_NOTICE = 1 << 8, // 길드 공지 PRA_MEMBER_MEMO = 1 << 9, // 길드원 메모 작성/수정 PRA_ALLIANCE_MANAGEMENT = 1 << 10, // 길드 연합 관리(마스터 길드용) PRA_ALLIANCE_JOIN = 1 << 11, // 길드 연합 가입(길마 대행 연합 가입) PRA_ALLIANCE_LEAVE = 1 << 12, // 길드 연합 탈퇴(길마 대행 연합 탈퇴) PRA_UPDATE_GUILD_ICON = 1 << 13, // 길드 아이콘 변경 PRA_ADVERTISE_MANAGEMENT = 1 << 14, // 길드 광고 관리 //// 우선 임의로 한다. TEST. 등급별권한설정 은 업데이트에서 제외됐다. // PRA_WRITECLASSNAME = 1 << 15, // 등급명칭쓰기 //PRA_CLASS_AUTHORITY_SET = 1 << 16, // 등급별권한설정 }; // 추가 2010.04.13 bintitle. // 연합길드 정보. struct SAllianceGuild { // 연합길드정보 // static int nAllianceID; // 연합SID static std::string strAllianceName; // 연합명 static int nAllianceMemberCount; // 연합길드 맴버수. static int nAllianceMasterGuildSID; // 연합장 길드 SID static std::string strAllianceLeaderName; // 연합장 이름. int nID; // 길드SID std::string strName; // 길드명 std::string strLeaderName; // 길드장명 int nMemberCount; // 길드원수 SAllianceGuild( int _nID, std::string & _strName, std::string & _strLeaderName, int _nMemberCount ) : nID( _nID ), strName( _strName ), strLeaderName( _strLeaderName ), nMemberCount( _nMemberCount ) {} //SAllianceGuild( int _nAllianceID, std::string & _strAllianceName, int _nAllianceMemberCount, int _nAllianceMasterGuildSID, // int _nID, std::string & _strName, std::string & _strLeaderName, int _nMemberCount ) // : nAllianceID( _nAllianceID ), strAllianceName( _strAllianceName ), nAllianceMemberCount( _nAllianceMemberCount ), nAllianceMasterGuildSID( _nAllianceMasterGuildSID ), // nID( _nID ), strName( _strName ), strLeaderName( _sdtrLeaderName ), nMemberCount( _nMemberCount ) //{} // 연합길드정보 설정. void SetAllianceGuild( int _nAllianceID, std::string & _strAllianceName, int _nAllianceMemberCount, int _nAllianceMasterGuildSID, std::string & _strAllianceLeaderName ) { nAllianceID = _nAllianceID; strAllianceName = _strAllianceName; nAllianceMemberCount = _nAllianceMemberCount; nAllianceMasterGuildSID = _nAllianceMasterGuildSID; strAllianceLeaderName = _strAllianceLeaderName; } }; typedef struct MemberInfo { AR_HANDLE hPlayer; std::string strName; int nJobID; int nLevel; bool bLeader; int nLogin; ///< 0:LogOff | 1:LogIn | 2:친구목록에서 차단당한 상태(내가 차단한게 아니고 MemberInfo 정보 당사자가 나를 차단한 경우) bool bNear; int nAuthority; // 권한등급. 추가 2010.04.13 bintitle // 0 : 길드 관련 권한 없음(길드 비 소속 유저) // 1~6 : 길드에서 지정한 6개의 권한 세트 // 7 : 길드 마스터 std::string strMemo; // 길드 메모. AR_HANDLE hCreature[2]; int nPoint; int nTotalPoint; MemberInfo() { hPlayer = NULL; strName.clear(); nJobID = 0; nLevel = 0; //nPoint = 0; bLeader = false; nLogin = true; bNear = true; nAuthority = 0; hCreature[0] = hCreature[1] = 0; nPoint = 0; nTotalPoint = 0; }; } MEMBER_INFO; typedef struct MemberStat { int nHP; int nMP; int nX; int nY; int nCreature[2]; MemberStat() { nHP = 0; nMP = 0; nX = 0; nY = 0; ::memset( nCreature, -1, sizeof(nCreature) ); }; } MEMBER_STAT; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // class SPlayerSlot { public: SPlayerSlot() {}; virtual ~SPlayerSlot() {}; void SetMainCreatureHandle( AR_HANDLE hMain ) { m_MemberInfo.hCreature[0] = hMain; } void SetSubCreatureHandle( AR_HANDLE hSub ) { m_MemberInfo.hCreature[1] = hSub; } const AR_HANDLE GetMainCreatureHandle() { return m_MemberInfo.hCreature[0]; } const AR_HANDLE GetSubCreatureHandle() { return m_MemberInfo.hCreature[1]; } // info const AR_HANDLE GetHandle() const { return m_MemberInfo.hPlayer; }; const char* GetName() const { return m_MemberInfo.strName.c_str(); }; const int GetJobID() const { return m_MemberInfo.nJobID; }; const int GetLevel() const { return m_MemberInfo.nLevel; }; const int GetPoint() const { return m_MemberInfo.nPoint; }; const int GetTotalPoint() const { return m_MemberInfo.nTotalPoint; }; const bool IsLeader() const { return m_MemberInfo.bLeader; }; const int GetLogin() const { return m_MemberInfo.nLogin; }; // bintitle. const bool IsLogin() const { return m_MemberInfo.nLogin==1; }; const bool IsDenial() const { return m_MemberInfo.nLogin==2; }; const bool IsNear() const { return m_MemberInfo.bNear; }; // stat const int GetHP() const { return m_MemberStat.nHP; }; const int GetMP() const { return m_MemberStat.nMP; }; const int GetXPos() const { return m_MemberStat.nX; }; const int GetYPos() const { return m_MemberStat.nY; }; const int GetCreature( int nIndex ) const { if( nIndex >= 2 || nIndex < 0 ) { assert( false ); return -1; } return m_MemberStat.nCreature[nIndex]; }; const int GetAuthority() { return m_MemberInfo.nAuthority; } // 권한등급. 추가 2010.04.13 bintitle const std::string & GetGuildMemo(){ return m_MemberInfo.strMemo; } // 길드메모. void SetHandle( AR_HANDLE hPlayer ) { m_MemberInfo.hPlayer = hPlayer; }; void SetName( const char* szName ) { m_MemberInfo.strName = szName; }; void SetJobID( int nJobID ) { m_MemberInfo.nJobID = nJobID; }; void SetLevel( int nLevel ) { m_MemberInfo.nLevel = nLevel; }; void SetLeader( bool bLeader ) { m_MemberInfo.bLeader = bLeader; }; void SetLogin( int nLogin ) { m_MemberInfo.nLogin = nLogin; }; void SetNear( bool bNear ) { m_MemberInfo.bNear = bNear; }; void SetAuthority( int nAuthority ) { m_MemberInfo.nAuthority = nAuthority; } // 권한등급. 추가 2010.04.13 bintitle void SetGuildMemo( std::string & strMemo ){ m_MemberInfo.strMemo = strMemo; } // 길드메모. void SetPoint( int nPoint ) { m_MemberInfo.nPoint = nPoint; } void SetTotalPoint( int nTotalPoint ){ m_MemberInfo.nTotalPoint = nTotalPoint; } void SetHP( int nHP ) { m_MemberStat.nHP = nHP; }; void SetMP( int nMP ) { m_MemberStat.nMP = nMP; }; void SetXPos( int nPosX ) { m_MemberStat.nX = nPosX; }; void SetYPos( int nPosY ) { m_MemberStat.nY = nPosY; }; void SetCreature( int nSlot, int nIndex ) { m_MemberStat.nCreature[nIndex] = nSlot; }; private: MEMBER_INFO m_MemberInfo; MEMBER_STAT m_MemberStat; }; class SRaidInfo { public: SRaidInfo(){}; virtual ~SRaidInfo(){}; void SetPartyID( int PartyID ) { nParty_id = PartyID; } void SetLeaderName( const char* LeaderName ) { strLeader_name = LeaderName; } void SetLeaderLv( int nLv ) { nleader_lv = nLv; } void SetLeaderJob_id( int LeaderJobId ) { nLeader_job_id = LeaderJobId; } void SetMemberCount( int MemberCount ) { nMember_count = MemberCount; } void SetGguildParty( bool IsGuildParty ) { bIs_guild_party = IsGuildParty; } const int GetPartyID() { return nParty_id; } const char*GetLeaderName() { return strLeader_name.c_str(); } const int GetLeaderLv() { return nleader_lv; } const int GetLeaderJob_id(){ return nLeader_job_id; } const int GetMemberCount() { return nMember_count; } const bool IsGuildParty() { return bIs_guild_party; } private: int nParty_id; ///< party_id std::string strLeader_name; ///< leader_name int nleader_lv; ///< leader_lv int nLeader_job_id; ///< leader_job_id int nMember_count; ///< member_count bool bIs_guild_party; ///< is_guild_party public: void SetPartyName(const char* PartyName) { strParty_name = PartyName; } const char*GetPartyName() { return strParty_name.c_str(); } void SetParytNum(int Num) { nPartyNum = Num; } const int GetPartyNum() { return nPartyNum; } private: std::string strParty_name; // party_name - 2011. 10. 18 - marine int nPartyNum; // 파티 번호 }; class PartyNumCompare : public std::binary_function { public: PartyNumCompare(){} bool operator()(SRaidInfo *r1,SRaidInfo *r2) const { return r1->GetPartyNum() < r2->GetPartyNum(); } }; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // class SMessengerMgr : public SGameUIMgr { public: //// 길드 권한등급 비트플래그(권한세트). //enum E_AUTHORITY{ // AUTHORITY_CLASS_1=0, AUTHORITY_CLASS_2, AUTHORITY_CLASS_3, AUTHORITY_CLASS_4, AUTHORITY_CLASS_5, AUTHORITY_CLASS_6, AUTHORITY_MAX //}; public: SMessengerMgr() : SGameUIMgr() // 2011.03.29 - servantes { //// 길드 권한등급 비트플래그(권한세트). //for( int i=0; i& GetMemberList() { return m_vecMemberList; }; virtual const int GetMemberCount() const { return static_cast(m_vecMemberList.size()); }; virtual const int GetLoginMemberCount(); //// 권한비트셋 등급 변경. //void ChangeAuthorityClassBitSet( E_AUTHORITY eClass, int bitSet ){ // m_arrAuthorityClass[ eClass ] = bitSet; //} //// 권한비트셋 등급해당명 변경. //void ChangeAuthorityClassNameBitSet( E_AUTHORITY eClass, std::string & strClassName ){ // m_arrAuthorityClassName[ eClass ] = strClassName; //} void SetPartyName(const char* pPartyName) { m_strCommunityName = pPartyName; } void SetLeaderName(const char* pLeaderName) { m_strLeaderName = pLeaderName; } void SetLocalPlayerName(const char* pLocalPlayerName) { m_strLocalPlayerName = pLocalPlayerName; } void SetGuildLeaderName(const char* pGuildLeaderName) { m_strGulidLeaderName = pGuildLeaderName; } void SetMaxLevel(int nMaxLV) { m_nMaxLevel = nMaxLV; } void SetMinLevel(int nMinLV) { m_nMinLevel = nMinLV; } void SetPartyType(int nPartyType) { m_nPartyType = nPartyType; } int GetPartyType() { return m_nPartyType; } const char* GetLocalPlayerName() { return m_strLocalPlayerName.c_str(); } void SetShow(bool b) { m_bShow = b; } bool IsShow() { return m_bShow; } void SetExist(bool b) { m_bIsExist = b; } protected: std::vector m_vecMemberList; AR_HANDLE m_hLocalPlayer; std::string m_strLocalPlayerName; bool m_bParsing; bool m_bIsExist; int m_nMaxLevel; int m_nMinLevel; int m_nCommunityID; int m_nCommunityPassword; std::string m_strMsg; std::string m_strSelectMember; std::string m_strLeaderName; std::string m_strCommunityName; std::string m_strGuildName; std::string m_strBattleCommanderName; ///< sonador 3.5.1 던전 시즈 레벨 제한 std::string m_strGulidLeaderName; AR_HANDLE m_hSelectMemberHandle; int m_nPartyType; // 2011.10.20 : servantes : 파티타입 bool m_bShow; void SetPartyMemberHpBar(std::string &str); // 2012. 6. 19 - marine 파티원,파티원 크리쳐 hp게이지 설정 public : bool m_bSelf; // bintitle. 2010.11.29. bool GetParsingFlag() { return m_bParsing; } ////--------------------- //// 추가. bintitle //int m_nMemberCount; // 길드 맴버 수. //std::string m_strNotice; // 길드공지 //int m_bRecruitment; // 길드원 모집 여부. //int m_nDungeonID; // 소유던전ID //int m_arrAuthorityClass[ E_AUTHORITY::AUTHORITY_MAX ]; // 길드 권한등급 비트플래그(권한세트). 등급단위수. //std::string m_arrAuthorityClassName[ E_AUTHORITY::AUTHORITY_MAX ]; // 길드 권한등급 비트플래그(권한세트). 등급명. bool m_bCreate; }; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // class SPartyMgr : public SMessengerMgr { public: SPartyMgr(); virtual void Clear(); //virtual int AddMessage( const char* szMsg ); virtual int AddMessage( const char* szMsg, bool & bSelf ); // 2010.11.29. bintitle. 메세지가 자신에게만 해당되는지 여부 반환. virtual void InfoMember( STR_LIST& vecText, int nStartTap=-1 ); virtual bool DeleteMember( const char* szPlayerName ); virtual bool AddMember( const char* szName ); virtual bool AddMember( SPlayerSlot* pSlot ); virtual bool JoinMember( const char* szPlayerName, const char* szCommunityName ); void ChangePartyInfo( STR_LIST& vecPartyText ); // list void ChangePartyDivision( const char* szMode ); const int GetDivision() const { return m_nDivisionMode; }; const char* GetPartyName() { return m_strCommunityName.c_str(); }; const char* GetPartyLeaderName(); const bool IsPartyLeader(); const int GetPartyID() const { return m_nCommunityID; }; const int GetPartyPass() const { return m_nCommunityPassword; }; void ResetInfo(); bool IsMyParty(); // 2011.12.07 - servantes : 내가 속한 파티인지 검사 // void InfoMember( STR_LIST& vecText, int nStartTap ); void SetPartyID(int ID) { m_nCommunityID = ID; } void SetnDivisionMode(int nDivisionMode) { m_nDivisionMode = nDivisionMode; } public: // 2011.10.19 : servantes 접근할 필요가 생겨서 바꿈 // 2011.11.23 - servantes : 리턴형 변경 bool UpdatePartyPosition( STR_LIST& data ); ///< sonador 3.12.1 파티원 좌표 갱신 기능 추가 protected: void checkValidArenaJoinSituation(); private: int m_nDivisionMode; }; class CPartyListMgr : public SPartyMgr //SMessengerMgr { public: CPartyListMgr(); virtual ~CPartyListMgr(); // int nPartyID ( -1 ) : my party id SPartyMgr* GetParty(std::string* pstrPartyName = NULL); // 파티매니저를 찾는다 ( -1 은 내 파티 ) bool IsLeader(std::string* pstrPartyName = NULL); bool IsPartyLeader(std::string* pstrPartyName = NULL); bool IsLocalPlayer( AR_HANDLE hPlayer, std::string* pstrPartyName = NULL ); bool IsExist(std::string* pstrPartyName = NULL); void SetPlayerInfo( AR_HANDLE hPlayer, const char* szName, std::string* pstrPartyName = NULL ); void SetSelectMember( const char* szName, std::string* pstrPartyName = NULL ); void SetSelectMemberHandle( AR_HANDLE hTarget, std::string* pstrPartyName = NULL ); ///< 선택 된 파티원 핸들 설정. int GetPartyType(std::string* pstrPartyName = NULL); const char* GetMessage(std::string* pstrPartyName = NULL); int GetPartyPass(std::string* pstrPartyName = NULL); const char* GetPartyLeaderName(std::string* pstrPartyName = NULL); int GetDivision(std::string* pstrPartyName = NULL); const char* GetSelectMember(std::string* pstrPartyName = NULL); int GetPartyID(std::string* pstrPartyName = NULL); int GetMemberCount(std::string* pstrPartyName = NULL); const char* GetPartyName(std::string* pstrPartyName = NULL); AR_HANDLE GetSelectMemberHandle(std::string* pstrPartyName = NULL); ///< 선택 된 파티원 핸들 불러오기. std::vector& GetMemberList(std::string* pstrPartyName = NULL); int AddMessage( const char* szMsg, bool & bSelf ); // 2010.11.29. bintitle. 메세지가 자신에게만 해당되는지 여부 반환. void InfoMember( STR_LIST& vecText ); void InfoRaidMember( STR_LIST& vecText ); void ChangePartyInfo( STR_LIST& vecPartyText, std::string* pstrPartyName = NULL ); // list void ChangePartyDivision( const char* szMode, std::string* pstrPartyName = NULL ); bool CreateCommunity( const char* szCommunityName, std::string* pstrPartyName = NULL ); bool RefreshMember( STR_LIST& vecText, std::string* pstrPartyName = NULL ); bool JoinMember( const char* szPlayerName, std::string* pstrPartyName); /// 2012.07.23 leaveType:0 일반적인 탈퇴, 1 아레나 참여로 인한 탈퇴 bool LeaveMember( const char* szPlayerName, std::string* pstrPartyName = NULL, char const* leaveType = NULL ); bool LoginMember( const char* szPlayerName, std::string* pstrPartyName = NULL ); bool LogoutMember( const char* szPlayerName, std::string* pstrPartyName = NULL ); bool ChangeLeader( const char* szPlayerName, std::string* pstrPartyName = NULL ); bool AddMember( const char* szName, std::string* pstrPartyName = NULL ); bool AddMember( SPlayerSlot* pSlot, std::string* pstrPartyName = NULL ); bool DeleteMember( const char* szName, std::string* pstrPartyName = NULL ); SPlayerSlot* FindMember( AR_HANDLE hPlayer, std::string* pstrPartyName = NULL ); SPlayerSlot* FindMember( const char* szName, std::string* pstrPartyName = NULL ); SPlayerSlot* GetLeaderInfo(std::string* pstrPartyName = NULL); AR_HANDLE GetMemberHandle( const char* szName, std::string* pstrPartyName = NULL ); AR_HANDLE GetMemberHandleSearchAllParty( const char* szName ); // 2011.11.11 - servantes : 파티 전체에서 캐릭터 이름으로 핸들을 찾는다 int GetLoginMemberCount(std::string* pstrPartyName = NULL); bool IsFar( AR_HANDLE hPlayer, std::string* pstrPartyName = NULL ); bool IsExistMember( AR_HANDLE hPlayer, std::string* pstrPartyName = NULL ); bool IsExistLoginMember(AR_HANDLE hPlayer, std::string* pstrPartyName = NULL); bool IsExistMember( const char* szName, std::string* pstrPartyName = NULL ); int GetMemberIndex( AR_HANDLE hPlayer, std::string* pstrPartyName = NULL ); int GetLeaderIndex(std::string* pstrPartyName = NULL); void Clear(); void Add(SPartyMgr* pSPartyMgr); void Delete(std::string* pstrPartyName); SPartyMgr* Find(std::string* pstrPartyName); // -1 : 내 파티 SPartyMgr* Find(int partyId); /// 2011.12.22 파티 id로 파티를 찾는다 - prodongi SPartyMgr* FindIncludeSlef(std::string* pstrPartyName); // -1 : 내 파티 SPartyMgr* FindPartyByPlayerName(std::string* pstrPlayerName); // 해당 이름의 캐릭터가 소속된 파티를 찾는다 SPartyMgr* FindPartyByPartyName(std::string* pstrPartyName); SPartyMgr* FindPartyByLeaderName(std::string* pstrLeaderName); // 해당 이름의 리더가가 소속된 파티를 찾는다 int FindPartyID(std::string* pPartyName); // 해당 이름의 파티가의 아이디를 찾는다 // int GetMyPartyID() { return m_nMyPartyID; } // 내파티 아이디 // int GetMyPartyType() { return m_nMyPartyType; } // 내파티 타입 int GetPartyCount() { return (int)m_mapPartyInfoList.size(); } char const* getOldPartyName() const { return m_oldCommunityName.c_str(); } void checkValidArenaJoinSituationByLeaveAtArena(); bool isArenaParty() const { return m_isArenaParty; } SPartyMgr* FindPartyByPlayerHandle(AR_HANDLE hPlayer); virtual SPlayerSlot* FindMemberByCreature(AR_HANDLE hCreature, std::string& partyName); SPartyMgr* FindPartyByID(int nPartyID); void SummonInfo( STR_LIST& vecText ); void MemberSummonInfo( STR_LIST& vecText ); private: bool UpdatePartyPosition( STR_LIST& data, std::string* pstrPartyName = NULL ); ///< sonador 3.12.1 파티원 좌표 갱신 기능 추가 void createParty(std::string& partyName, std::string& partyLeaderName, int partyType); /// 2012.01.04 파티 생성 공통으로 쓰기 위해 함수로 뺌 - prodongi bool m_bRecvJoinOrLogin; // 조인 메세지를 받았다는 플래그 std::map m_mapPartyInfoList; // 파티리스트의 정보가 들어있는 맵 int m_nMyPartyID; std::string m_oldCommunityName; /// 자신이 파티 탈퇴 했을 때, 파티 이름을 삭제 하기 때문에, 채팅 메세지로 파티 이름을 뿌려주기위해 저장됨 bool m_isArenaParty; }; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // class SRaidMgr : public SGameUIMgr { public: SRaidMgr(); virtual ~SRaidMgr(); virtual void Clear(); virtual int AddMessage( const char* szMsg ); virtual void InfoRaid( STR_LIST& vecText ); void InfoArena(STR_LIST& vecText); /// 2012.06.08 - prodongi std::vector< SRaidInfo* >& GetRaidInfoList() { return m_pRaidInfoList; } void DeleteParty( const char* lpPartyName ); const char* GetPartyManagerName() { return strPartyManagerName.c_str(); } const char* GetPartyName() { return strPartyName.c_str(); } const int GetPartyID() { return nRaidPartyID; } const int GetPartyPassWord() { return nRaidPartyPass; } int getArenaType() const { return m_arenaType; } const char* GetMercenaryPartyManagerName() { return strMercenaryPartyManagerName.c_str(); } const char* GetMercenaryPartyName() { return strMercenaryPartyName.c_str(); } const int GetMercenaryPartyID() { return nMercenaryRaidPartyID; } const int GetMercenaryPartyPassWord() { return nMercenaryRaidPartyPass; } const int GetMainPartyID() { return m_nMainPartyID; } const int GetPartyCount() { return m_pRaidInfoList.size(); } const int GetMaxGuildPartyNum() { return m_nMaxGuildPartyNum; } const int GetMaxMercenaryPartyNum() { return m_nMaxMercenaryPartyNum; } void ResetInfo(); char const* getLeaderName(int index); /// 2011.10.13 - prodongi SRaidInfo* GetRaidInfo(int index); /// 2011.10.28 - servantes SRaidInfo* GetTopRaidInfo(); /// 2011.12.07 - servantes SRaidInfo* GetRaidInfo(const char* pPartyName); /// 2011.12.05 - servantes const int getAimDungeonID() {return m_nAimDungeonID; }; // 2011. 10 .18 - marine const char* getAttackUnitLeaderName(); // 2011. 10. 18 - marine 공대장 이름 const char* getAttackUnitName(){return m_strAttackUnitName.c_str();}; // 2011. 11. 2 - marine 공대 이름 void setAttackUnitName(const char* pAttackUnitName) { m_strAttackUnitName = pAttackUnitName; }; // 2011.12.05 - marine 공대 이름 const std::string getAttackUnitPartyName(int nPartyID); // 2011. 11. 15 - marine 공대파티 이름..1공대,2공대 등의 박힌 이름.. void setJoinPartyData(STR_LIST &raid_info ); // 2011. 12 .15 - marine 추가된 공대파티데이터 설정 void setPartyCount( std::string &strPartyName, int nMemberCount ); // 2011. 12. 20 - marine // 2011.11.16 - servantes : 이름으로 레이드의 지정된 이름( 제1공대, 제2공대... 로 디비에 저장되어 있는 이름 ) 을 찾는다 const std::string getAttackUnitPartyName(const char* pPartyName); bool isPartyLeaderPlayer(char const* playerName); /// 2011.12.19 파티장 인지 아닌지 - prodongi void pushRaidInfo(SRaidInfo* pInfo); // 2011. 12. 20 - marine 기존코드때문에 소팅이필요.. int getNumUseAttackUnit(std::string &); // 2011. 12. 23 - marine 공대에서 사용되는 순서번호를 파티이름으로 얻는다.(공대UI상에서의 순번) int getNumberAtPartyName(std::string partyName); // 2012. 1. 10 - marine 파티이름으로 몇번파티인지 얻는 함수 ex) 공대장파티는 0번, 파티_00는 1번...파티_06은 8번을 리턴 protected: std::vector< SRaidInfo* > m_pRaidInfoList; int m_nMainPartyID ; int m_nMaxGuildPartyNum ; int m_nMaxMercenaryPartyNum; int m_nAimDungeonID; // 2011. 10 .18 - marine 던전시즈 목표 던전 아이디 std::string m_strAttackUnitName; // 2011. 11. 2 - marine 공대 이름 // 공대 이름은 별도로 있는게 아니라 (공대장이 속한 파티 이름)이(공대 이름)이다. // 1번 파티(팔미르공대) -> 공대장 파티이름이면서 공대 이름 // 2번 파티(팔미르공대_00) // 3번 파티(팔미르공대_01) // ... // 이런 방식으로 클라랑 서버에서 파티이름을 사용하지만 UI상 보여지는 파티 이름은 // 1번 파티(1 공대 파티) // 2번 파티(2 공대 파티) // ... // 위와 같은 식으로 실제 클라, 서버에서 사용되는 파티 이름과 UI상 보여지는 이름은 다르다. //Guild Invite std::string strPartyManagerName; std::string strPartyName; int nRaidPartyID; int nRaidPartyPass; /// 2012.06.08 - prodongi /// TYPE_BATTLE_ARENA_TEAM or TYPE_BATTLE_ARENA_EXERCISE_TEAM 중에 하나의 값이어야 한다 int m_arenaType; //Mercenary Invite std::string strMercenaryPartyManagerName; std::string strMercenaryPartyName; int nMercenaryRaidPartyID; int nMercenaryRaidPartyPass; }; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // //enum GUILD_UPDATE //{ // GUILD_UPDATE_NONE = 0, // GUILD_UPDATE_INVITE, // INVITE|파티장이름|[파튀,길드]이름|파티ID|파티PW| // GUILD_UPDATE_KICK, // KICK|[파튀,길드]이름|캐릭이름 // GUILD_UPDATE_LOGIN, // LOGIN|[파튀,길드]이름|캐릭이름 // GUILD_UPDATE_CHANGE_NAME, //CHANGE_NAME|old_name|new_name| // GUILD_UPDATE_CHANGE_GUILD_NAME, //CHANGE_GUILD_NAME|guild_id|guild_name| // GUILD_UPDATE_CHANGE_LEVEL, //CHANGE_NAME|캐릭터이름|레벨| // GUILD_UPDATE_CHANGE_JOB, //CHANGE_NAME|캐릭터이름|직업| // GUILD_UPDATE_CREATE, // CREATE|[파튀,길드]이름|파튀장 // GUILD_UPDATE_JOIN, // JOIN|[파튀,길드]이름| // 새 멤버(=자기자신)에게 // GUILD_UPDATE_NEW, // NEW|캐릭이름| // 기존 멤버에게만 // GUILD_UPDATE_LEAVE, // LEAVE|캐릭이름 // GUILD_UPDATE_LOGOUT, // LOGOUT|캐릭이름 // GUILD_UPDATE_PROMOTE, // PROMOTE|캐릭이름 // 파티장 변경 // GUILD_UPDATE_GINFO, // GINFO , 길드SID, 길드명, 길마이름, 멤버수, 길드공지, 멤버모집 중 여부, 소유던전ID // GUILD_UPDATE_MINFO, // MINFO|AR_HANDLE|이름|레벨|직업CODE|권한등급|HP%|MP%|X|Y|온/오프라인| // GUILD_UPDATE_DESTROY, // DESTROY|[파티,길드]이름 // GUILD_UPDATE_GMEMBER, // GMEMBER|AR_HANDLE|이름|레벨|직업CODE|권한등급|HP%|MP%|X|Y|온/오프라인| // GUILD_UPDATE_LIST, // LIST|캐릭이름|분배방|최고렙|최저 // GUILD_UPDATE_MEMO, // MEMO|유저명|메모 내용 // GUILD_UPDATE_AINFO, // 연합길드 정보. // GUILD_UPDATE_CHANGE_PERMISSION, // 권한등급변경. 캐릭터명|권한등급 // GUILD_UPDATE_CHANGE_PERMISSION_SET, // 권한등급비트플래그(권한세트) 변경. 권한등급|권한_비트셋 // GUILD_UPDATE_GPERMISSION, // 권한등급 권한이름1|권한셋1|권한이름2|권한셋2|권한이름3|권한셋3|권한이름4|권한셋4|권한이름5|권한셋5|권한이름6|권한셋6 // GUILD_UPDATE_NOTICE, // 길드공지 NOTICE|공지내용 // GUILD_UPDATE_CHANGE_PERMISSION_NAME,// 권한이름. CHANGE_PERMISSION_NAME|권한번호|변경 후 권한이름 // GUILD_UPDATE_URL, // 길드 URL. URL|%s // GUILD_UPDATE_GRAIDSIEGETIP, // 길드 던전 레이드/시즈. GRAIDSIEGETIP | 정보 타입 | 타임 레코드 | 길드 이름 | 길마 이름 | 길드원 수 | 던전 ID // GUILD_UPDATE_ERROR_PERMISSION, // 길드원 추방시 추방대상이 등급이 높은경우. // GUILD_UPDATE_ERROR_NOT_EXIST, // 길드원 초대시 없는 캐릭터 인경우. // GUILD_UPDATE_GUPGRADE // // GUILD_UPDATE_GDONATION // // GUILD_UPDATE_GBUFF // // // GUILD_UPDATE_MAX //}; enum GUILD_UPDATE // 길드UI open 전까지 Refresh 조건을 보관하기위해 bitset 으로 변경. { GUILD_UPDATE_NONE = 1<<0, GUILD_UPDATE_INVITE = 1<<1, // INVITE|파티장이름|[파튀,길드]이름|파티ID|파티PW| GUILD_UPDATE_KICK = 1<<2, // KICK|[파튀,길드]이름|캐릭이름 GUILD_UPDATE_LOGIN = 1<<3, // LOGIN|[파튀,길드]이름|캐릭이름 GUILD_UPDATE_CHANGE_NAME = 1<<4, //CHANGE_NAME|old_name|new_name| GUILD_UPDATE_CHANGE_GUILD_NAME = 1<<5, //CHANGE_GUILD_NAME|guild_id|guild_name| GUILD_UPDATE_CHANGE_LEVEL = 1<<6, //CHANGE_NAME|캐릭터이름|레벨| GUILD_UPDATE_CHANGE_JOB = 1<<7, //CHANGE_NAME|캐릭터이름|직업| GUILD_UPDATE_CREATE = 1<<8, // CREATE|[파튀,길드]이름|파튀장 GUILD_UPDATE_JOIN = 1<<9, // JOIN|[파튀,길드]이름| // 새 멤버(=자기자신)에게 GUILD_UPDATE_NEW = 1<<10,// NEW|캐릭이름| // 기존 멤버에게만 GUILD_UPDATE_LEAVE = 1<<11,// LEAVE|캐릭이름 GUILD_UPDATE_LOGOUT = 1<<12,// LOGOUT|캐릭이름 GUILD_UPDATE_PROMOTE = 1<<13,// PROMOTE|캐릭이름 // 파티장 변경 GUILD_UPDATE_GINFO = 1<<14,// GINFO , 길드SID, 길드명, 길마이름, 멤버수, 길드공지, 멤버모집 중 여부, 소유던전ID GUILD_UPDATE_MINFO = 1<<15,// MINFO|AR_HANDLE|이름|레벨|직업CODE|권한등급|HP%|MP%|X|Y|온/오프라인| GUILD_UPDATE_DESTROY = 1<<16,// DESTROY|[파티,길드]이름 GUILD_UPDATE_GMEMBER = 1<<17,// GMEMBER|AR_HANDLE|이름|레벨|직업CODE|권한등급|HP%|MP%|X|Y|온/오프라인| GUILD_UPDATE_LIST = 1<<18,// LIST|캐릭이름|분배방|최고렙|최저 GUILD_UPDATE_MEMO = 1<<19,// MEMO|유저명|메모 내용 GUILD_UPDATE_AINFO = 1<<20,// 연합길드 정보. GUILD_UPDATE_CHANGE_PERMISSION = 1<<21,// 권한등급변경. 캐릭터명|권한등급 GUILD_UPDATE_CHANGE_PERMISSION_SET = 1<<22,// 권한등급비트플래그(권한세트) 변경. 권한등급|권한_비트셋 GUILD_UPDATE_GPERMISSION = 1<<23,// 권한등급 권한이름1|권한셋1|권한이름2|권한셋2|권한이름3|권한셋3|권한이름4|권한셋4|권한이름5|권한셋5|권한이름6|권한셋6 GUILD_UPDATE_NOTICE = 1<<24,// 길드공지 NOTICE|공지내용 GUILD_UPDATE_CHANGE_PERMISSION_NAME = 1<<25,// 권한이름. CHANGE_PERMISSION_NAME|권한번호|변경 후 권한이름 GUILD_UPDATE_URL = 1<<26,// 길드 URL. URL|%s GUILD_UPDATE_GRAIDSIEGETIP = 1<<27,// 길드 던전 레이드/시즈. GRAIDSIEGETIP | 정보 타입 | 타임 레코드 | 길드 이름 | 길마 이름 | 길드원 수 | 던전 ID GUILD_UPDATE_ERROR_PERMISSION = 1<<28,// 길드원 추방시 추방대상이 등급이 높은경우. GUILD_UPDATE_ERROR_NOT_EXIST = 1<<29,// 길드원 초대시 없는 캐릭터 인경우. GUILD_UPDATE_DONATION = 1<<30, GUILD_UPDATE_MAX = (1<<31), }; //bool CheckGuildUpdateFlag( DWORD flags, DWORD oneFlag ) //{ // return ( flags & oneFlag ) == oneFlag; //} // 공격대UI 정보. struct SRaidSiege { int nType; // 정보타입. 4종류( 0레이드 신청전, 1 레이드 신청후, 2 시즈방어길드, 3 시즈도전길드 ). int nTime_hour; // 타임어택 시. int nTime_min; // 분. int nTime_sec; // 초. std::string strGuildName; std::string strGuildMaster; int nGuildCount; int nGuildDungeon; SRaidSiege() : nType(0), nTime_hour(0), nTime_min(0), nTime_sec(0), nGuildCount(0), nGuildDungeon(0) {} void Reset() { nType = 0; nTime_hour = 0; nTime_min = 0; nTime_sec = 0; strGuildName = ""; strGuildMaster = ""; nGuildCount = 0; nGuildDungeon = 0; } void SetInfo( int _nType, int _nTime, std::string & _strGuildName, std::string & _strGuildMaster, int _nGuildCount, int _nGuildDungeon ); }; class SGuildMgr : public SMessengerMgr { public: // 길드 권한등급 비트플래그(권한세트). enum E_AUTHORITY{ AUTHORITY_CLASS_1=0, AUTHORITY_CLASS_2, AUTHORITY_CLASS_3, AUTHORITY_CLASS_4, AUTHORITY_CLASS_5, AUTHORITY_CLASS_6, A_GUILDMASTER, AUTHORITY_MAX }; public: SGuildMgr(); virtual void Clear(); //virtual int AddMessage( const char* szMsg, int& nNewGuilID ); virtual int AddMessage( const char* szMsg, int& nNewGuilID, bool & bSelf ); // 2010.11.29. bintitle. 해당메세지가 자신에게만 적용되는 지 여부. virtual void InfoMember( STR_LIST& vecText ); //virtual void AddMember( STR_LIST& vecText ); virtual void AddMember( STR_LIST& vecText, bool & bSelf ); // 2010.11.29. bintitle. 해당메세지가 자신에게만 적용되는 지 여부. // 2011.11.23 - servantes : 리턴형 변경 virtual bool RefreshMember( STR_LIST& vecText ); void SetNotice( STR_LIST & vecText ); // 길드공지. void SetMemo( STR_LIST & vecText ); // 길드원 메모. void SetAllianceGuild( STR_LIST & vecText ); // 연합길드정보 설정. void ChangeAuthorityClass( STR_LIST & vecText ); // 권한등급변경. void ChangeAuthorityClassBitSet( STR_LIST & vecText ); // 권한등급비트플래그(권한세트) 변경. void SetAuthorityClass( STR_LIST & vecText ); // 권한등급 설정. void SetAuthorityClassName( STR_LIST & vecText ); // 권한등급명 설정. void SetURL( std::string & strURL ); // 길드 URL. void SetGradePoint( STR_LIST & vecText ); void SetGuildMemberPoint( STR_LIST & vecText ); // 권한비트셋 등급 변경. void ChangeAuthorityClassBitSet( E_AUTHORITY eClass, int bitSet ){ m_arrAuthorityClass[ eClass ] = bitSet; } // 권한비트셋 등급해당명 변경. void ChangeAuthorityClassNameBitSet( int eClass, std::string & strClassName ){ m_arrAuthorityClassName[ eClass ] = strClassName; } void ChangeGuildInfo( STR_LIST& vecPartyText ); // list void ChangeAllianceMemberCount( int nGID, int memberCount ); // 연합소속 길드원 멤버수 변경. void ChangeAllianceMaster( int nGID, const std::string & strName ); // 연합소속 길드장 변경. // 길드 던전 레이드/시즈 관련 정보설정. void SetRaidInfo( STR_LIST& vecRaid ); /////// /// 2011.05.11 함수명과 리턴값이 반대로 되어 있다, 왜?? - prodongi bool GetIsAlliance(){ // 연합길드 정보. return m_arrAllianceGuild.empty(); } const std::vector< SAllianceGuild * > & GetAllianceGuild(){ // 연합길드 정보. return m_arrAllianceGuild; } SAllianceGuild * GetAllianceGuildByIndex( int index ){ // 연합길드 정보. if( index >= 0 && index < (int)m_arrAllianceGuild.size() ) return m_arrAllianceGuild[ index ]; return NULL; /// 2011.01.19 추가 - prodongi } SAllianceGuild * GetAllianceGuildByGID( int nGID ); // 연합에 속한 길드 반환. int GetAllianceSize(){ // 연합길드 수. return m_arrAllianceGuild.size(); } const char * GetAllianceGuildMaster( int nGID ); // 연합길드장. const char * SGuildMgr::GetAllianceMasterToGuild(); // 연합길드장 소속길드 반환. // 길드 권한등급 비트플래그(권한세트). 등급명. const char * GetAuthorityClassName( int nClass ){ if( nClass >= 0 && nClass < AUTHORITY_MAX ) return m_arrAuthorityClassName[ nClass ].c_str(); return NULL; } // 권한에 해당하는 권한비트셋 반환. int GetAuthorityClassBitSet( int nClass ){ return m_arrAuthorityClass[ nClass ]; } int GetGuildDungeonID(){ return m_nDungeonID; } // 소유던전ID const char * GetGuildNotice() { return m_strNotice.c_str(); } // 길드공지. const char* GetGuildName() { return m_strGuildName.c_str(); }; const char* GetLocalPlayerName() { return m_strLocalPlayerName.c_str(); }; const char* GetGuildLeaderName() { return m_strGulidLeaderName.c_str(); }; /// sonador 3.5.1 던전 시즈 레벨 제한 const char* GetBattleCommanderName() { return m_strBattleCommanderName.c_str(); } bool IsLocalPlayerMaster() { return m_strLocalPlayerName == m_strGulidLeaderName; } /// sonador 3.5.1 던전 시즈 레벨 제한 bool IsLocalPlayerBattleCommander() { return m_strLocalPlayerName == m_strBattleCommanderName; } const char* GetCommunityName() { return m_strCommunityName.c_str(); }; const char* GetCommunityLeaderName() { return m_strLeaderName.c_str(); }; const int GetGuildID() const { return m_nCommunityID; }; const int GetGuildPass() const { return m_nCommunityPassword; }; const int GetGuildGrade() const { return m_nGrade; }; const int GetGuildPoint() const { return m_nPoint; }; const int GetGuildObjectif() const { return m_arrRank[ m_nGrade ]; } // 2011.11.23 - servantes : 리턴형 변경 virtual bool ChangeLeader( const char* szPlayerName ); virtual const int GetLoginMemberCount(); // 차단맴버포함 모든 로그인 맴버 수. const char * GetURL(){ // 길드 URL. return m_URL.c_str(); } void GetMemberHandle( std::vector& vMemberlist ); void ResetInfo(); const SRaidSiege & GetRaidSiege(){ // 던전 레이드/시즈 관련정보. return m_RaidSiege; } // 길드원 이름으로 길드원 얻기. SPlayerSlot * GetPlayerByName( const char * strName ); const int GetGuildMemberCount() const { return m_vecMemberList.size(); } const int GetGuildMemberLoginCount() const { int count = 0; for( size_t i = 0; i < m_vecMemberList.size(); i++ ) { if (m_vecMemberList[i]->IsLogin()) count++; } return count; } // 연합길드정보 제거. void ClearAlliance(); private: // 연합정보. void SetAllianceInfo( int nAllianceID, std::string & strAllianceName, int nAllianceMemberCount, int nAllianceMasterGuildSID, std::string & strAllianceLeaderName ); private: std::vector< SAllianceGuild * > m_arrAllianceGuild; // 연합길드 정보. //--------------------- // 추가. bintitle int m_nMemberCount; // 길드 맴버 수. std::string m_strNotice; // 길드공지 int m_bRecruitment; // 길드원 모집 여부. int m_nDungeonID; // 소유던전ID std::string m_URL; // 길드 URL int m_arrAuthorityClass[ E_AUTHORITY::AUTHORITY_MAX ]; // 길드 권한등급 비트플래그(권한세트). 등급단위수. std::vector< std::string > m_arrAuthorityClassName; // 길드 권한등급 비트플래그(권한세트). 등급명. //std::string m_arrAuthorityClassName[ E_AUTHORITY::AUTHORITY_MAX ]; // 길드 권한등급 비트플래그(권한세트). 등급명. static int m_arrRank[ 11 ]; SRaidSiege m_RaidSiege; // 던전 레이드/시즈 관련정보. int m_nGrade; int m_nPoint; }; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// /// 길드 데이타 typedef struct Guild_Icon { int nGuildID; std::string strGuildName; std::string strIconFileName; std::string strIconAniName; int nIconFileSize; bool bLoaded; } GUILD_ICON; /// 길드 마크, 길드 정보를 관리 class SGuildDataMgr : public SGameUIMgr { public: SGuildDataMgr(); ~SGuildDataMgr(); int AddMessage( const char * pMsg, int & nValue ); bool IsExistGuild( int nGuild_id ); bool IsLoadedGuild( int nGuild_id ); void SendGuildData( int nGuild_ID ); void RegistGuildData( GUILD_ICON * pGuildData ); //-N4- void AddGuildData( std::vector< std::string > & strGuildData ); void DelGuildData( int nGuild_id ); const GUILD_ICON * GetGuildData( int nGuild_id ) const; void ChangeGuildName( int nGuild_id, const char * pNewName ); void GuildIconDownLoad(); void Process( DWORD dwTime ); enum { REQ_NONE = 0, REQ_GUILD_ICON, }; enum { MODE_NONE, MODE_DOWNLOAD, MODE_DOWNLOADERROR }; void SetLocalPlayer( AR_HANDLE handle ) { m_hLocalPlayer = handle; } void ResetInfo(); protected: bool IsExistGuildIconFile( const char * pGuildIconFileName ); AR_HANDLE m_hLocalPlayer; static unsigned __stdcall download_file( void* pArg ); volatile int m_nMode; std::vector< GUILD_ICON > m_vGuildDataList; std::vector< GUILD_ICON > m_vDownGuildDataList; std::vector< GUILD_ICON > m_vWaitGuildDataList; private: }; class SFriendMgr : public SMessengerMgr { public: SFriendMgr(); virtual void Clear(); //virtual int AddMessage( const char* szMsg ); virtual int AddMessage( const char* szMsg, bool & bSelf ); // 2010.11.29. bintitle. 메세지가 자신에게만 해당되는지 여부 반환. virtual void InfoMember( STR_LIST& vecText ); void ChangeMemberStatus( STR_LIST& vecText ); void ResetInfo(); }; class SCutMgr : public SMessengerMgr { public: SCutMgr(); virtual void Clear(); //virtual int AddMessage( const char* szMsg ); virtual int AddMessage( const char* szMsg, bool & bSelf ); // 2010.11.29. bintitle. 메세지가 자신에게만 해당되는지 여부 반환. virtual void InfoMember( STR_LIST& vecText ); void ResetInfo(); };