Files
2026-06-01 12:46:52 +02:00

1066 lines
46 KiB
C++

#pragma once
//#include <string>
//#include <vector>
#include <mmo/ArType.h>
#include <toolkit/c_hidint.h>
#include "SGameUIMgr.h"
namespace
{
typedef std::vector<std::string> 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<SRaidInfo*,SRaidInfo*,bool>
{
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<E_AUTHORITY::AUTHORITY_MAX; i++ )
// m_arrAuthorityClass[ i ] = 0;
m_bSelf = false;
m_bShow = false; //2011.10.31 : servantes
}
virtual ~SMessengerMgr();
virtual void Clear();
virtual void Free();
virtual void SetPlayerInfo( AR_HANDLE hPlayer, const char* szName )
{
m_hLocalPlayer = hPlayer;
m_strLocalPlayerName = szName;
};
//virtual int AddMessage( const char* szMsg );
virtual int AddMessage( const char* szMsg, 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 CreateCommunity( const char* szCommunityName );
virtual bool CreateCommunity( const char* szCommunityName, char const* leaderName );
virtual bool RefreshMember( STR_LIST& vecText );
virtual bool JoinMember( const char* szPlayerName, const char* szPartyName );
virtual bool LeaveMember( const char* szPlayerName );
virtual bool LoginMember( const char* szPlayerName );
virtual bool LogoutMember( const char* szPlayerName );
virtual bool ChangeLeader( const char* szPlayerName );
virtual bool AddMember( const char* szPlayerName );
virtual bool AddMember( SPlayerSlot* pSlot ); // 2011.12.05 - servantes
virtual bool DeleteMember( const char* szPlayerName );
virtual SPlayerSlot* FindMember( AR_HANDLE hPlayer );
virtual SPlayerSlot* FindMember( const char* szPlayerName );
int FindMemberIndex( AR_HANDLE hPlayer ); // 2011.11.04 - servantes : 이름으로 해당 인덱스를 찾는다
SPlayerSlot* FindMemberByID( int id ); // 2011.12.19 - servantes : 이름으로 해당 인덱스를 찾는다
SPlayerSlot* FindMemberHandle( AR_HANDLE hPlayer );
virtual SPlayerSlot* FindMemberByCreature(AR_HANDLE hCreature); /// 2012.01.12 - prodongi
virtual SPlayerSlot* GetLeaderInfo();
void SetSelectMember( const char* szName ) { m_strSelectMember = szName; };
void SetSelectMemberHandle( AR_HANDLE hTarget ) { m_hSelectMemberHandle = hTarget; } ///< 선택 된 파티원 핸들 설정.
AR_HANDLE GetSelectMemberHandle() { return m_hSelectMemberHandle; } ///< 선택 된 파티원 핸들 불러오기.
virtual const int GetMaxLevel() const { return m_nMaxLevel; };
virtual const int GetMinLevel() const { return m_nMinLevel; };
virtual const AR_HANDLE GetMemberHandle( const char* szName );
virtual const char* GetMessage() { return m_strMsg.c_str(); };
virtual const char* GetSelectMember() { return m_strSelectMember.c_str(); };
virtual const bool IsExist() const { return m_bIsExist; };
virtual const bool IsExistMember( AR_HANDLE hPlayer ) const;
// 2010.07.27 - prodongi
virtual const bool IsExistLoginMember(AR_HANDLE hPlayer) const;
virtual const int GetMemberIndex( AR_HANDLE hPlayer ) const;
virtual const int GetLeaderIndex() const;
virtual const bool IsExistMember( const char* szPlayerName ) const;
virtual const bool IsLeader() const { return ( ::_stricmp(m_strLocalPlayerName.c_str(), m_strLeaderName.c_str()) == 0 ); };
virtual const bool IsFar( AR_HANDLE hPlayer ) const;
virtual const bool IsLocalPlayer( AR_HANDLE hPlayer ) { return (hPlayer==m_hLocalPlayer) ? true : false; };
virtual std::vector<SPlayerSlot*>& GetMemberList() { return m_vecMemberList; };
virtual const int GetMemberCount() const { return static_cast<int>(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<SPlayerSlot*> 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<SPlayerSlot*>& 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<std::string, SPartyMgr*> 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<AR_HANDLE>& 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();
};