⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synattr.h

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 H
字号:
// SynAttr.h: interface for the CSynAttr class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SYNATTR_H__7205A42E_F451_4A87_9BBD_37397D6578E2__INCLUDED_)
#define AFX_SYNATTR_H__7205A42E_F451_4A87_9BBD_37397D6578E2__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "define.h"
#include "GameData.h"
#include "GameObj.h"
#include "user.h"
#include "Myheap.h"
#include "AutoLink.h"
#include "Syndicate.h"

#define	DEFAULT_TENET				""
#define	DEFAULT_LEADERTITLE			STR_SYNDICATE_LEADER
#define	DEFAULT_MEMBERTITLE			STR_SYNDICATE_MEMBER
//---jinggy---2004-12-7---define---begin
#define TIMEONLINE_FIRSTJOIN		10*60	//首次加入给在线时间设置10*60分钟
//---jinggy---2004-12-7---define---end
//////////////////////////////////////////////////////////////////////
const int	DEFAULT_PROFFER			= 0;				// 新人的贡献
const int	CHANGELEADER_DAYS		= 30;				// 帮主30天不上线,可能被替换
const int	CHANGELEADER_MONEY		= 100000;			// 替换帮主要捐多少钱。
const int	SYNMONEY_LIMIT			= 2000000000;		// 基金的限制额
const int	SYNPROFFER_LIMIT		= 1000000000;		// 贡献的限制额
const int	MAX_ASSISTANTSIZE		= 5;				// 最多有多少个副帮主,暂定
const int	SYN_MEMBER_LIMIT		= 800;				// 限制最多招收多少个帮众

//---jinggy---2004-12-7---基金---begin
const int	MONEY_PER_MEMBER		= 10000;			// 招人增加的基金
const int	MONEY_PER_MEMBER_OUT	= 30000;		// 主动脱离团队减少的基金
const int	MONEY_KICKOUT			= 20000;			// 开除人员扣除的基金
//---jinggy---2004-12-7---基金---end

//---jinggy---2004-12-7---声望---begin
const int	REPUTE_PER_MEMBER		= 1000;			// 招人增加的声望1000
const int	REPUTE_PER_MEMBER_OUT	= 3000;			// 主动退出减少军团声望3000
const int	REPUTE_KICKOUT			= 1000;			// 开除人员扣除的声望1000
//---jinggy---2004-12-7---声望---end
//---jinggy---贡献度---begin

//---jinggy---贡献度---end

//////////////////////////////////////////////////////////////////////
struct SynAttrInfoStruct
{
	OBJID		id;
	OBJID		idSyn;
	USHORT		usMantle;
	UCHAR		ucRank;
	UCHAR		ucRankShow;
	int 		nProffer;
	int			nProfferInc;
	int			nTitle;
	UCHAR		ucLevel;
};

//////////////////////////////////////////////////////////////////////
enum SYNATTRDATA
{
	SYNATTRDATA_ID=0,		     // 用于INSERT
	SYNATTRDATA_SYNID=1,
	SYNATTRDATA_RANK,
	SYNATTRDATA_PROFFER,
	//---jinggy---2004-12-7---begin
	SYNATTRDATA_TIMEONLINE,		//成员的在线时间,若2个月没有达到10个小时则为背叛帮派
	SYNATTRDATA_TIMEDETECTED,	//用来和当前时间进行比较,看是否到了2个月的时间间隔
	SYNATTRDATA_PROFFERINC,		//记录成员从上次帮派发放奖金后得到的Proffer累加值
	SYNATTRDATA_MEMBERLEVEL,	//成员级别
	//---jinggy---2004-12-7---end
	SYNATTRDATA_TITLE,				// 军衔
};
char	szSynAttrTable[];
typedef	CGameData<SYNATTRDATA, szSynAttrTable, szID>		CSynAttrData;

//////////////////////////////////////////////////////////////////////
class CSynAttr  
{
protected:
	CSynAttr();
	virtual ~CSynAttr();

public:
	static CSynAttr* CreateNew(PROCESS_ID idProcess, CUser* pUser);
	ULONG	ReleaseByOwner()						{ delete this; return 0; }
//	void	OnTimer(DWORD tCurr);

public: // login
	bool	Create();
	bool	SendInfoToClient();

public: // MapGroup
	bool	SaveInfo();
	bool	GetInfo(SynAttrInfoStruct* pInfo);
	bool	AppendSynAttr(SynAttrInfoStruct* pInfo);

public: // const
	OBJID	GetSynID()								{ if(m_pData) return m_pData->GetInt(SYNATTRDATA_SYNID); return ID_NONE; }
	int		GetInt(SYNATTRDATA idx)					{ CHECKF(m_pData); ASSERT(idx!=SYNATTRDATA_SYNID); return m_pData->GetInt(idx); }
	int		GetAssistantCount();
	DWORD	GetSynRankShow		();
	LPCTSTR	GetRankTitle();
//	int		SumSynMember();
	int		GetProffer(void)	const				{ if(m_pData) return m_pData->GetInt(SYNATTRDATA_PROFFER); return 0; }
	//---jinggy---得到贡献值的增量
	int		GetProfferInc(void)	const				{ if(m_pData) return m_pData->GetInt(SYNATTRDATA_PROFFERINC); return 0; }
	
public: // modify
	bool	CreateSyndicate(LPCTSTR szName, int nLevel, int nMoney, int nMoneyLeave);
//	bool	CreateSubSyn(LPCTSTR szName, int nLevel,int nProffer, int nMoney, int nMoneyLeave);
	OBJID	CreateSubSyn(OBJID idFealty,const char* pszName);
	bool	DestroySyndicate();
	bool	JoinSyn(OBJID idSyn, int nRank=RANK_NEWBIE, int nProffer=0);
	bool	AddMemberList(OBJID idSyn, LPCTSTR szName, int nLevel);
	bool	LeaveSyn(bool bKickout=false, bool bDeleteRecord=true, bool bSynchro=true);
	bool	DelMemberList(OBJID idOldSyn, LPCTSTR szName);
	bool	DonateMoney(int nMoney);
	bool	SetRank(int nRank, bool bLeader = false);
	bool	ChangeLeader(LPCTSTR szSyn, int nLevel);
	bool	SetIdRank(OBJID idSyn, int nRank, bool bSynchro=true);
	bool	AddProffer(int nData);
	bool	DecProffer(int nData);
	void	UpLevel(int nLevel);			// synchro world kernel member list
	void	SetProffer(int nProffer);


public:
	void	SynchroInfo(BOOL bAnnounce=false);				// 修改后,广播自己的属性
protected:
	bool	ChangeLeader();				// 检查是否换帮主
	void	AddProfferToLeader(int nProffer);

public: // static
	int		GetSynRank();
	OBJID	CreateSubSubSyn(OBJID idFealty,const char  szName[]);
	bool	CreateSubSubSyn(LPCTSTR szName, int nLevel,int nProffer, int nMoney, int nMoneyLeave);
	int		GetSynMemberLevel();
	bool	SetSynMemberLevel(int nLevel);
	void	ResetSynProfferInc();
	void	Betray();
	bool	DetectIsBetrySyn();
	void	IncTimeOnline(unsigned short usTimeInc);

	//---jinggy---2004-12-7---获得帮派成员的连续在线时间
	unsigned int GetTimeOnline();

	CSyndicate* QuerySyndicate();
	bool	ChangeSyn(CSyndicate* pSyn, CSyndicate* pTarget);
	bool	KickoutMember(LPCTSTR szTarget);

protected: // data
	CSynAttrData*	m_pData;			//? 可能为0
	int m_nProfferInc;
protected: // ctrl
	PROCESS_ID		m_idProcess;
	CUser*			m_pUser;
	CAutoLink<CSyndicate>	m_linkSyn;

protected: // ctrl
	MYHEAP_DECLARATION(s_heap)
};

#endif // !defined(AFX_SYNATTR_H__7205A42E_F451_4A87_9BBD_37397D6578E2__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -