Files
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

1163 lines
33 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#define MAXMEMOCOUNT 1024
#define MAX_WAR_HISTORY 100
#define MAXGGUILDCOIN 2000000000 //行会资金的上限
#define GUILD_UPGRADE_ITEM_IDX_1 1 //行会升级道具1
#define GUILD_UPGRADE_ITEM_IDX_2 2 //行会升级道具2
#define GUILD_UPGRADE_ITEM_IDX_3 3 //行会升级道具3
#define GUILDTREE_PERIOD_1 1 //幼苗期
#define GUILDTREE_PERIOD_2 2 //成熟期
#define GUILDTREE_PERIOD_3 3 //开花期
#define GUILDTREE_PERIOD_4 4 //结果期
#define GUILDFRUIT_PERIOD_1 1 //1级果实
#define GUILDFRUIT_PERIOD_2 2 //2级果实
#define GUILDFRUIT_PERIOD_3 3 //3级果实
#define GUILDFRUIT_PERIOD_4 4 //4级果实
#define GUILDFRUIT_PERIOD_5 5 //5级果实
#define GUILDFRUIT_PERIOD_6 6 //6级果实
//行会关系
#define GUILD_RELATION_NORMAL 0 //普通关系
#define GUILD_RELATION_UNION 1 //联盟关系
#define GUILD_RELATION_ENEMY 2 //敌对关系
//行会宣战关系(坑爹)
#define GUILD_WARSHIP_NO 0 //非宣战关系(包括联盟和普通关系)
#define GUILD_WARSHIP_YES 1 //宣战关系
using namespace jxSrvDef;
enum tagUpGuildSkillType
{
uGuildLevel = 1, ///< 帮派等级
uGuildCont = 2, ///< 帮派资金
uGuildYs = 3, ///< 帮派玥石
};
enum GuildBuildType{
gbtMainHall = 1, ///< 主殿
gbExerciserooem, //练功房
gbAssemblyhall, //议事厅
gbtGuildShop, ///< 行会商店
gbtMoonBox, ///< 月光宝盒
gbtGuildBoss, ///< 封印兽碑
//5行会仓库
//6行会光环
gbtTech = 7, ///< 行会科技
//8行会熔炉
gbtDragonThunder = 9,///< 震天龙弹
gbtEnd, ///< 结束
gbtCount = gbtEnd - 1,
};
typedef struct tagGuildBuild
{
int nType;
int nLevel;
tagGuildBuild()
{
nType = 0;
nLevel = 0;
}
}TAGGUILDBUILD, *PTAGGUILDBUILD;
//行会活动
typedef struct tagGuildActive
{
unsigned char nGuildActSts; //活动状态0-未开启1-进行中2-进行完毕
unsigned int nGuildActHandle;
unsigned char nFreshMonIdx; //第N波刷怪从1开始
unsigned int nActTimerHandle; //活动timer句柄
unsigned int nFreshTimerHandle; //刷新timer句柄
int nLevelWhenActive; //活动开启时行会的等级(以防活动过程中行会升级)
tagGuildActive()
{
memset(this,0,sizeof(*this));
}
}GuildActive;
typedef CHandleList<ActorCommonNode,UINT> ActorNodeList;
typedef struct tagApplyList
{
unsigned int nActorId; // 玩家id
ACTORNAME szName; //玩家昵称
int nLevel; //玩家等级
int nCircle; //玩家转数
int nSex; //性别
int nJob; //职业
unsigned int nVip; //职业
tagApplyList()
{
memset(this, 0, sizeof(*this));
}
}ApplyList;
class CGuildComponent;
class CJoinGuildApply;
class CGuild
{
public:
enum tagRelationShipType
{
rsReadyWar = 0,
rsOnWar,
rsPeaceful,
};
enum tagInterMsgId
{
imInvite, //邀请加入
imJoin, //申请加入
imCall, //召唤
};
typedef struct tagInterMsg
{
BYTE nMsgId; //消息的类型
EntityHandle hActorHandle; //目标的实体handle
ACTORNAME szName; //目标的名称
EntityHandle hSrcHandle; //发起人的handle通常是召唤的时候用到
ActorCommonNode Node;
tagInterMsg()
{
hActorHandle = 0;
hSrcHandle = 0;
szName[0] = 0;
}
}InterMsg;
typedef CHandleList<InterMsg,UINT> GuildInterMsgList;
public:
/*
* Comments:与某个帮派结束斗争(恢复和平)后的处理,通常是计算贡献值,战魂等
* Param INT_PTR nGid:
* @Return VOID:
*/
//VOID EndWar(INT_PTR nGid);
//取得对外的公告信息
inline LPCSTR GetOutMemo() {return m_sOutMemo;}
//取得对内的公告信息
inline LPCSTR GetInMemo() {return m_sInMemo;}
inline LPCSTR GetGroupMemo() {return m_sGroupMemo;}
//加载沙巴克成员信息
void LoadSbkOffLinedata();
void getsbkOfflineData(CDataPacket& data, int& nCount);
/*
取得行会等级目前行会主殿的等级就是行会等级不要直接使用m_nLevel
*/
inline int GetLevel() { return GetGuildbuildingLev(gbtMainHall); /*return m_nLevel;*/}
//取得帮派繁荣度
inline int GetFr() {return m_nFanrong;}
//获得帮派资金
inline int GetCoin() {return m_GuildCoin;}
//获得帮派玥石
inline int GetGuildYs() {return m_GuildYs;}
//修改帮派玥石
void ChangeGuildYs(int value) {m_GuildYs += value;}
//设置帮派资金
inline void SetCoin(int newCoin)
{
m_boUpdateTime = true;
if(newCoin > MAXGGUILDCOIN)
{
newCoin = MAXGGUILDCOIN;
}
if(newCoin > 0)
m_GuildCoin=newCoin;
else
m_GuildCoin = 0;
NotifyGuildDonateData(); //发送给行会成员
}
void ChangeGuildCoin(int value, INT_PTR nLogId = 0,LPCTSTR pStr = "");
//设置帮派玥石
inline void SetGuildYs(int value) {m_GuildYs += value;}
//设置对外的公告boSave为true表示稍后会保存到数据库中
VOID SetOutMemo(LPCSTR sOut,bool boSave);
//设置对内的公告boSave为true表示稍后会保存到数据库中
VOID SetInMemo(LPCSTR sIn,bool boSave) ;
//设置行会群公告
VOID SetGuildGroupMemo(LPCSTR sIn,bool boSave);
//设置帮派等级
VOID SetGuildLevel(int value,bool boSave,bool boRank, bool boUpgrade) ;
//设置繁荣度
VOID SetFr(int value,bool boSave,bool boRank);
void SetGuildFr(int value)
{
int gFr = GetFr();
SetFr(gFr+value,TRUE,true);
}
//帮派销毁
void Destroy();
/*
* Comments:给帮派的在线成员广播信息实际上是调用每个CActor的SendTipmsgFormatWithId函数实现发送信息
* Param INT_PTR nPos:大于等于这个职位的人才可以收到
* Param INT_PTR nTipmsgID:参数参考CActor的SendTipmsgFormatWithId函数
* Param INT_PTR nType:
* Param ...:
* @Return VOID:
*/
VOID SendGuildMsg(INT_PTR nPos,INT_PTR nTipmsgID,INT_PTR nType = ttTipmsgWindow, ...);
/*
* Comments:帮派的在线成员广播信息
* Param INT_PTR nPos:大于等于这个职位的人才可以收到
* Param LPCSTR sMsg:
* Param INT_PTR nType:
* @Return VOID:
*/
VOID SendGuildMsg(INT_PTR nPos,LPCSTR sMsg,INT_PTR nType = ttTipmsgWindow);
/*
* Comments:帮派的在线成员行会聊天信息
* Param CActor* pActor
* Param LPCSTR sMsg:
*/
VOID SendGuildChatMsg(CActor* pActor, char* msg);
/*
* Comments:给所有人成就
* Param INT_PTR nEventId:成就id
* @Return VOID:
*/
VOID GiveAchieve(INT_PTR nEventId,INT_PTR nParam1);
/*
* Comments: 向所有帮派玩家广播
* Param char * pData:数据指针
* Param SIZE_T size:数据长度
* @Return void:
*/
void BroadCast(LPCVOID pData,SIZE_T size, int nLevel = 0, int nCircle = 0);
void BroadCastExceptSelf(LPCVOID pData,SIZE_T size,unsigned int nMyId);
//向所有帮派玩家广播一个消息
void BroadCastByMsgId(int nMsgId);
/*
* Comments: 帮派群聊天
* Param char * pData:数据指针
* Param SIZE_T size:数据长度
* @Return void:
*/
void GuildGroupBroadCast(LPCVOID pData,SIZE_T size);
//向行会频道广播消息
void BroadCastMsgInGuildChannel(char* szMsg, int nLevel = 0, int nCircle = 0);
/*
* Comments: 向帮会内所有在线玩家广播数据的兼容接口
* Param LPCVOID lpData:
* Param SIZE_T dwSize:
* @Return void:
*/
inline void SendData(LPCVOID lpData, SIZE_T dwSize)
{
BroadCast(lpData, dwSize);
}
/*
* Comments:提醒帮派成员的客户端更新帮派信息
* @Return void:
*/
void NotifyUpdateGuildInfo();
void NotifyGuildSimpleInfo();
void NotifyGuildDonateData();
void NotifyGuildTreeBackCoin();
//提醒行会成员的客户端更新仓库
void NotifyUpdateDepot();
//提醒行会弹劾发生
void NotifyImpeachMember(LPCTSTR strPosName, ACTORNAME strOldActorName, ACTORNAME strNewActorName);
//发送求救信息
void SendActorHelp(LPCSTR nName,int nSceneId,int x,int y);
/*
* Comments:提醒帮派成员的客户端更新帮派信息
* Param INT_PTR sType: 类型
* Param INT_PTR sCount: 需要的量
* Param bool sConsume: 是否需要扣除
* @Return void:
*/
bool BcanUpGuildSkillLevel(CActor* pActor,int sType,int sCount,bool sConsume);
/*
* Comments:扣除帮派技能升级所需要的
* Param INT_PTR sType: 类型
* Param INT_PTR sCount: 需要的量
* Param bool sConsume: 是否需要扣除
* @Return void:
*/
bool DecountUpGuildSkill(int sType,int sCount,bool sConsume);
//保存帮会技能信息到数据库
void SaveDbGuildSkill(CActor* pActor,int skillId,int skillLevel);
//设置挑战副本的句柄
void SetBossChanllengeHandle(unsigned int bHandle){m_BossChanllengeHandle = bHandle;}
//获得帮派副本句柄
unsigned int GeBossChanllengeHandle() {return m_BossChanllengeHandle;}
//设置行会镖车的句柄
void SetGuildDartHandle(double nHandle) {m_GuildDartHandle = nHandle;}
//返回行会镖车的句柄
double GetGuildDartHandle() {return m_GuildDartHandle;}
//设置行会镖车的到期时间
void SetGuildExipredTime(int nValue) {m_GuildBiaoCheExpriedTime = nValue;}
public:
CGuild();
~CGuild();
/*
* Comments:给帮派增加一个成员,加入到列表中
* Param CActor * pActor:如果pActor为NULL表示当前不在线
* Param nType:玩家地位,默认是帮众
* @Return VOID:
*/
VOID AddMemberToList(CActor* pActor,INT_PTR nGuildPos=smGuildCommon);
//处理未在线申请添加成员
VOID AddMemberToList(ApplyList* pApply,INT_PTR nGuildPos = smGuildCommon);
void SetMemberOnline(CActor* pActor);
VOID InitGuild(CActor* pActor);
//获得帮派成员的数量
inline INT_PTR GetMemberCount()
{
return m_ActorOffLine.size();
}
//设置帮派成员的阵营(某场景之中才算)
void SetMemberCamp(int nCampId, int nScendId);
/*
* Comments:给全帮派的在线玩家加buff
* Param nScenceId:在某场景加0-任意场景
* @Return void:
*/
void AddMemberBuffById(int nBuffId, int nScenceId=0);
void DelMemberBuffById(int nBuffId);
/*
* Comments:获得帮派的人数上限
* @Return int INT_PTR:
*/
int GetMaxMemberCount();
/*
* Comments:根据帮派的级别,得到可以有的最大的职务的数量,升职和降职不能使人数超过这个
* @Return INT_PTR:
*/
INT_PTR MaxGuildPosCount(int nGuildPos);
/*
* Comments:根据帮派的级别,得到可以有的最大的堂主的数量,升职和降职不能使人数超过这个
* @Return int INT_PTR:
*/
int GetMaxTkCount();
/*
* Comments:保存帮派的信息
* @Return VOID:
*/
VOID Save();
/*
* Comments:保存帮派个人信息
* @Return VOID:
*/
VOID SaveGuildMember(ActorCommonNode& actor);
/*
* Comments:添加一个帮派的内部消息到队列中
* Param InterMsg Msg:
* @Return BOOL:TRUE表示加入成功否则表示已有本消息
*/
BOOL AddInterMsg(InterMsg Msg);
/*
* Comments:查看队列中是否有发给我的信息,如果有,删掉
* Param InterMsg Msg:
* @Return BOOL:TRUE表示有否则表示无
*/
BOOL FindAndDeleteInterMsg(InterMsg& Msg);
BOOL FindAndInterMsg(InterMsg& Msg);
/*
* Comments:在ActorOffLine中查找到这个角色并设置它的handle
* Param nActorid:角色的id
* Param EntityHandle hHandle:这个角色的handle
* @Return VOID:
*/
VOID FindAndSetHandle(unsigned int nActorid,EntityHandle hHandle);
/*
* Comments:根据角色id查找成员节点这个性能不高可以优化ActorOffLine列表采用排序存储
* Param INT_PTR nActor:
* @Return ActorCommonNode*:
*/
ActorCommonNode* FindMember(unsigned int nActorid);
//根据姓名查找
ActorCommonNode* FindMemberByName(const char* nName);
//根据角色id获得角色名称
char* FindGuildMemberName(unsigned int nActorid);
/*
* Comments:把用户数据同步到ActorCommonNode中因为如果用户在线那处理的时候是直接用在线的数据如果用户不在线
* 就是读取ActorCommonNode里面的数据了。
* 通常就是在用户下线后同步这个数据
* Param CActor * pActor:
* Param ActorCommonNode * pNode:
* @Return VOID:
*/
VOID UpdateActorData(CActor* pActor,ActorCommonNode* pNode);
VOID UpdateActorData(CJoinGuildApply* pApply,ActorCommonNode* pNode);
void AddMember(ActorCommonNode& pNode);
/*
* Comments:把用户数据同步到ActorCommonNode中因为如果用户在线那处理的时候是直接用在线的数据如果用户不在线
* 就是读取ActorCommonNode里面的数据了。
* Param ApplyList * pActor:
* Param ActorCommonNode * pNode:
* @Return VOID:
*/
VOID UpdateActorData(ApplyList* pApply,ActorCommonNode* pNode);
/*
* Comments:处理数据
* Param int nGid:帮派id
* Param int nactorId:玩家id
* Param int type:类型 1 插入 2删除 3 全部删除
* @Return VOID:
*/
VOID DealGuildApply(unsigned int nGid, unsigned int nactorId, int type);
/*
* Comments:删除会员
* Param nActorid操作人的id
* Param CActor * pActor:在线成员如果他此刻不在线pActor为NULL
* Param ActorCommonNode * pNode:pActor为NULL这个不能为空
* Param boType:是否给开除的默认是TRUE如果是FALSE表示是自己脱离的,要设置nZZNext(在职时间)以限制他不能在规定时间内再加入其他帮派,或接受邀请
* @Return VOID:
*/
VOID DeleteMember(unsigned int nActorid,CActor* pActor,ActorCommonNode* pNode,BOOL boType);
/*
* Comments:在在线列表中删除指定的玩家,做这个操作通常是玩家下线,或者玩家被开除
* Param EntityHandle & hHandle:
* @Return VOID:
*/
VOID DeleteOnLineList(EntityHandle& hHandle);
/*
* Comments:增加一个敌对帮派
* Param int nGuildId:敌对帮派的id
* @Return VOID:
*/
VOID AddWarGuild(unsigned int nGuildId,CGuild* pGuild);
/*
* Comments:将同盟也添加为宣战对象
* Param int nGuildId:敌对帮派的id
* @Return VOID:
*/
VOID AddUnionWarGuild(unsigned int nGuildId,CGuild* pGuild);
/*
*/
TAGGUILDBUILD* GetBuildByType(int type) { return NULL;}
/*
* Comments:获取本帮派与对方帮派的宣战关系
* Param int nOtherId:对方帮派的id
* @Return int:返回帮派关系见tagWarStatus的定义
*/
int GetRelationShipInWar(unsigned int nGuildId);
//获取下次可以宣战的时间
int GetCanWarNextTime(unsigned int nGuildId);
/*
* Comments:下发敌对帮派列表
* Param CActor * pActor:
* @Return VOID:
*/
VOID SendWarGuildList(CActor* pActor);
/*
* Comments:发送帮派列表给所有成员,这个通常是在帮派站列表改变的时候
* @Return VOID:
*/
VOID SendWarGuildListToAllMember();
/*
* Comments:更新 在线成员 行会等级 属性
* @Return VOID:
*/
VOID UpdateGuildMemberGuildLevelProperty();
//更新名称显示
void UpdateActorShowName();
/*
* Comments:发送帮派更改的升级的帮派技能给所有成员
* @Return VOID:
*/
void SendGuildSkillToAllMember(int skillId,int skillLevel);
/*
* Comments:下发现在宣战、敌对状态的帮派列表,这个函数跟SendWarGuildList比较接近
* @Return VOID:
*/
VOID SendWarList(CActor* pActor);
/*
* Comments:请求帮派战历史记录
* @Return VOID:
*/
VOID SendWarHistory(CActor* pActor);
/*
* Comments:检查有没有帮派关系变化,如果有,需要下发信息给客户端,同时需要保存到数据库
* @Return VOID:
*/
VOID CheckWarList();
/*
* Comments:击杀敌对帮派的玩家后增加PK的数目
* Param INT_PTR nGid:敌对帮派的玩家
* Param INT_PTR nCount:数量,默认是加1
* @Return VOID:
*/
VOID AddPkCount(INT_PTR nGid,INT_PTR nCount = 1);
/*
* Comments:增加帮派战死亡的数目
* Param INT_PTR nGid:对敌帮派id
* Param INT_PTR nCount:死亡数目
* @Return VOID:
*/
VOID AddDieCount(INT_PTR nGid, INT_PTR nCount = 1);
/*
* Comments:增加帮派战死亡的数目
* Param int nTime:发生的时间
* Param char* nRecord:发生的事件
* @Return VOID:
*/
void AddEventRecord(char* nRecord,int nEventId,int nParam1,int nParam2,int nParam3,char* nParam4,char* nParam5);
//保存到数据库
void SaveGuildEventtoDb(int Index,int nType);
void SaveAllGuildEvent();
//保存仓库物品到数据库
void SaveGuildDepoItem();
//沙巴克战时更新成员颜色
void UpdateGuildActorNameInSbk();
//保存仓库数据
void SaveDepotData();
//保存仓库记录
void SaveGuildDepotRecord();
//组装帮派消息
void BuildUpEventRecord(int nIndex,int nEventId,int nParam1,int nParam2,int nParam3,char* szParam4,char* szParam5);
//获得职位名称
char* GetGuiPosName(int posType);
//获取帮派名称
inline LPCTSTR GetGuildName(){return m_sGuildname;}
//获取帮派id
inline unsigned int GetGuildId(){return m_nGid;}
//根据类型获取名字
char* GetCoinname(int nType);
//根据仓库记录的索引获取记录
char* GetDepotRecordMsg(int nIndex,char* sText);
//获取召唤斗魂的标志
bool GetUseGuildBoss() {return m_UseGuildBoss;}
//设置召唤斗魂的标志
void SetUseGuildBoss(bool value) {m_UseGuildBoss = value;}
//帮派成员离开或加入
void SendAddOrLeftMember(CActor* pActor,BYTE nType,unsigned int nActorId,char* nName);
//设置语音频道id
void SetYyType(int nYtype,bool bSave = true)
{
if(bSave == true)
m_boUpdateTime= bSave;
m_sYyType = nYtype;
}
inline int GetYType() {return m_sYyType;}
//设置语音频道宣言
void SetYyMemo(LPCSTR sIn,bool boSave)
{
_asncpytA(m_sYyMemo,sIn);
if (boSave)
m_boUpdateTime = boSave;
}
inline LPCSTR GetNextUpdateInmemo() {return m_sNextUpdateInMemo;}
void SetNextUpdateInmemo(LPCSTR sIn)
{
_asncpytA(m_sNextUpdateInMemo, sIn);
}
void SetYyGridCompere(LPCSTR sGridName)
{
_asncpytA(m_sYyGrilCompere, sGridName);
}
inline LPCSTR GetYyGridCompere()
{
return m_sYyGrilCompere;
}
inline LPCSTR GetYyMemo() {return m_sYyMemo;}
//gm改变帮主
void GmChangeLeader(const char* nName);
void SetCertification(int nCertification)
{
m_nCertification = nCertification;
m_boUpdateTime = true;
}
int GetCertification()
{
return m_nCertification;
}
inline void SetQqGroupId(LPCSTR nqGroupId,bool boSave)
{
_asncpytA(m_sQqGroupId,nqGroupId);
if (boSave)
m_boUpdateTime = boSave;
}
inline LPCSTR GetQqGroupId() {return m_sQqGroupId;}
inline void SetYyGroupId(LPCSTR strYGroupId,bool boSave)
{
_asncpytA(m_sYyGroupId,strYGroupId);
if (boSave)
m_boUpdateTime = boSave;
}
inline LPCSTR GetYyGroupId() {return m_sYyGroupId;}
//根据行会id获取关系
int GetRelationShipForId(unsigned int nGuildId);
//根据行会id设置关系
void SetRelationShipWithId(unsigned int nGuildId,int nType);
//发送给行会有其他行会请求联盟
bool SendWarUnionMsgToActor(unsigned int nGuildId,unsigned int nActorId,LPCSTR nGuildName);
//客户端收到这个消息,更新行会列表
void UpdateGuildList();
//有人申请加入行会
void SendActorApplyToGuild();
//发送打开行会集结令的面板
bool SendOpenBuildFormToClient(CActor* pActor);
//行会开启buff
void AddGuildBuff(int nBuffType,int nGroupID,double dValue,int nTimes, int nInterval,char * buffName,bool timeOverlay =false, void *pGiver=0, int param = 0);
//沙巴克城主开启buff
void SbkMasterOpenBuff(int nBuffType,int nGroupID,double dValue,int nTimes, int nInterval,char * buffName,bool timeOverlay =false, void *pGiver=0, int param = 0);
//给盟友加buff
void AddBuffToUnion(int nBuffType,int nGroupID,double dValue,int nTimes, int nInterval,char * buffName,bool timeOverlay =false, void *pGiver=0, int param = 0);
/* 通过物品系列号查找用户物品对象
* boRemove 参数用于规定在找到物品后是否将物品从容器中移除(只是移除,并不会销毁);
* @return 返回第一个匹配的用户物品指针
*/
int FindItemIndex(const CUserItem::ItemSeries series);
//群发封号列表
void SendTitleToAll();
//群发行会建筑等级的变化
void OnSendGuildBuildingChange(int nIndex,int nLevel);
//发送行会日志
void SendGuildEventLog(CActor* pActor);
//下发行会挑战的结果
void SendGuildChanllengeResult(unsigned int nActorId,int nType,int nResult);
//有封号改变群发
void SendChangeTitleToAll(unsigned int nActorId,BYTE nIndex);
//是否正在宣战等
bool OnGuildWar();
//获取是否开启活动勇闯毒潭状态
int GetToxicFreshTimes() { return m_ToxicFreshTimes;}
//设置开启勇闯毒潭状态
void SetToxicFreshTimes(int nTimes) {m_ToxicFreshTimes = nTimes;}
//设置在启勇闯毒潭中击杀的个数
void SetkilToxicNum(int nValue) {m_KillToxicNum = nValue;}
//获取在启勇闯毒潭中击杀的个数
int GetkillToxicNum() {return m_KillToxicNum;}
//获取行会仓库的物品数量
int GetGuildDepotCount();
//获取行会仓库的最大页数
int GetGuildDepotPageMax();
int GetGuildDepotGridsCount()
{
return GetGuildDepotPageMax() * GUILDDEPOT_PAGE_GRIDS;
}
//处理等待审核的兑换请求
void ProcDepotItemInExchangeCheck();
public: //沙城战
//更新沙巴克的头衔
void UpdateSbkGuildTitle(bool bFlag, bool boChangeNewTitle = true);
//处理sbk 成就
void UpdateSbkGuidAchieve();
//【影魅合服】发送合服活动连续占领三次的行会奖励
void SendCombineSbk3Award();
/*获取行会的职位人数(实时计算)
nGuildPos:1-官员2-副帮主
*/
int GetGuildPosCount(int nGuildPos);
//添加到行会贡献的列表里
void AddToGuildGxList(unsigned int nActorId,int nGx);
//获取贡献排名
int GetGuildGxIndex(unsigned int nActorId);
//获取行会已挑战的次数
int GetGuildChallengeTimes() {return m_GuildChangleTimes;}
//设置行会挑战的次数
void SetGuildChallengeTimes(int nTimes) {m_boUpdateTime = true; m_GuildChangleTimes = nTimes;}
//设置行会下次挑战的时间
void SetGuildNextChallengeTime(int nTime) {m_boUpdateTime = true; m_ChanlgeLeftTimes = nTime;}
//获取行会下次挑战的时间
int GetGuildNextChallengeTime() {return m_ChanlgeLeftTimes;}
//设置行会封印兽碑的等级
void SetGuildBossLevel(int nLevel) {m_boUpdateTime = true; m_GuildBossLevel = nLevel;}
//获得行会封印兽碑
int GetGuildBossLevel() {return m_GuildBossLevel;}
/// 获取建筑的等级
/// @param nType GuildBuildType
int GetGuildbuildingLev(int nType);
//设置建筑的等级
void ChangeGuildBuildingLev(int nType,int nValue);
//获取建筑的剩余cd
int GetGuildBuildingCdTime() {return m_UpLeftTime;}
//设置建筑的剩余cd
void SetGuildBuildingCdTime(int nTime);
//下发行会建筑冷却时间
void SendGuildBuildCdTime();
//下发行会升级材料信息
void SendGuildUpgradeItem();
//计算建筑评分
int CalcGuildBuildingSorce();
//从在线中获取最高战力的那一个
unsigned int GetTopBattleFromOnLineList();
//自动切换行会掌门
void AutoChangeLeader( unsigned int nLeaderId );
/*弹劾掌门,不需要了
void ImpeachLeader();
*/
void GetGuildMemberBasicData(unsigned int nActordId, int& nSex, int& nJob);
char* GetGuildTitleName(int nGuildPos);
void GetUpgradeItemCount(int& nItemNum1, int& nItemNum2, int& nItemNum3);
void SetUpgradeItemCount(int nItemNum1, int nItemNum2, int nItemNum3);
int GetAutoJoinLevel();
void SetAutoJoinLevel(int nNewLevel);
//每日数据处理
void ProcDailyData();
//添加申请
int AddJoinApply(CActor* pActor);
int DealApplyByActorId(unsigned int nActorId, int nResult);
static void GetGuildEventLog(GUILDEVENTRECOUD &stEventRecord, int nGuildEventId, int nParam1, int nParam2, int nParam3,
char* szParam4, char* szParam5);
bool CheckIsApply(unsigned int nActorId)
{
std::map<unsigned int, ApplyList>::iterator it = m_ApplyList.find(nActorId);
if(it != m_ApplyList.end())
{
return true;
}
return false;
}
//申请列表大小
int ApplySize(){ return m_ApplyList.size();}
void NotifyGuildWarList();
void AfterDonateDealGuild();
bool static decrease(const ActorCommonNode &FirstActor, const ActorCommonNode &SecondActor);
void SetCallMemInfo(unsigned int nActorId, int nSceneId, int nX, int nY, unsigned int nExpireTime)
{
m_CallInfo = std::make_tuple(nActorId, nSceneId, nX, nY, nExpireTime);
}
std::tuple<unsigned int,int,int,int,unsigned int>
GetCallMemInfo()
{
return m_CallInfo;
}
private:
//行会升级
void OnGuildLevelUp();
void ClearGuildDepotItemExchange( unsigned int nActorId );
public:
unsigned int m_nGid; //帮派的id
UINT m_nRank; //本帮派的排名
char m_sGuildname[32];//帮派的名字
// ACTORNAME m_sFoundname;//创始人的名字
ACTORNAME m_sLeaderName; //会长昵称
unsigned int m_nLeaderId; //会长id 用这个id
ACTORNAME m_sQqGroupId; //qq群id
ACTORNAME m_sYyGroupId; //语音频道id
ACTORNAME m_sYyGrilCompere; //美女主播
int m_nBidCoin; //竞价数量
int m_CreateTime; //行会创建的时间
// ActorCommonNode* m_pLeader; //帮主 ---不用了
int m_nSecLeaderCount; //当前副帮主的个数
int m_GuildTkCount; //堂主的个数
int m_GuildEliteCount; //精英的个数
int m_AddMemberFlag; //0 需要审核 1 自动添加
//不在线的成员名字,这个列表的成员不会被删除
//所有帮众的列表如果上线了hActorHandle会设置成新的handle否则就是0
// ActorNodeList m_ActorOffLine;
std::vector<ActorCommonNode> m_ActorOffLine;
//在线的成员
CEntityList m_ActorOnLine;
GUILDEVENTRECOUD m_EventRecord[MAX_EVENTCOUNT]; //记录帮派事件
std::map<unsigned int,ApplyList> m_ApplyList; //申请列表
int m_EventCount; //当前记录的事件个数
CVector<WarRelationData> m_WarList; //行会关系、状态帮派列表
CVector<INTERRELATIONMSG> m_UiounMsgList; //请求为联盟的列表
CVector<GUILDDEPOTITEM> m_GuildDepotBag; //行会仓库
CVector<GUILDDEPOTMSG> m_GuildDepotRecord; //行会仓库操作记录
CVector<GUILDMEMGXLIST> m_GuildMemGxList; //行会贡献排名列表
CVector<TAGGUILDBUILD> m_GuildBuildList; //行会建筑
bool m_bSaveDepotRecord; //是否需要保存行会仓库与仓库记录
int m_TileUpdateTime; //封号修改的时间
GUIlDTITLES m_GuildTitles[7]; //封号修改
int m_SignUpFlag; //今天是否报名 0 未报名 1 已报名
int m_nCertification; //官方认证(拉人)
int m_ToxicFreshTimes; //是否开启勇闯毒潭活动
int m_KillToxicNum; //在勇闯毒潭中击杀怪物的个数
//////////////////////////////////////////////////////
//堂主的列表
BYTE m_nZytype; //所属阵营
//0 已解散1正常
bool m_boStatus;
bool m_boUpdateTime;//更新数据的时间如果0或者小于现在时间表示无须更新
CVector<WarGuildHistory> m_WarListHistory;
//以下是帮派内部的消息,比如邀请、申请加入等
GuildInterMsgList m_InterMsgList;
CVector<GUILDSKILLS> m_GuildSkillList; //帮派等级的列表
//因为下发给客户端的接口,需要返回申请加入的消息的个数,而队列中的消息是包含了申请加入的消息和邀请加入的消息,所以用这个变量专门来保存这个数量
int m_nJoinMsgCount;
WORD m_nIcon;
bool m_UseGuildBoss; //是否正在召唤斗魂
double m_GuildDartHandle; //行会镖车的句柄
int m_GuildBiaoCheExpriedTime; //行会镖车到期时间
int m_MainHallLev; //主殿的等级
int m_ExerciseRoomlv; //练功房
int m_AssemblyHallLv; //议事厅
int m_GuildShopLev; //行会商店等级
int m_GuildBossLevel; //行会封印兽碑的等级
int m_MoonBoxLevel; //月光宝盒的等级
int m_GuildChangleTimes; //行会封印兽碑挑战次数
int m_ChanlgeLeftTimes; //行会封印兽碑下次挑战的时间
int m_UpLeftTime; //升级的剩余时间
unsigned int m_BossChanllengeHandle; //挑战的封印兽碑的句柄
BYTE m_btTechLevel; //行会科技等级
BYTE m_btDragonThunderLevel; ///< 震天龙弹等级
WORD m_nThunderPower; ///< 震天龙弹填充进度
WORD m_nFillThunderTimes; ///< 震天龙弹填充次数
unsigned int m_nCallTime; //召集的时间
unsigned int m_nNewInMemoUpdateTime; //下次更新m_sNextUpdateInMemo的时间
int m_nAutoJoinLevel; //允许玩家自动加入帮派的等级
int m_nExchangeCheckCircleMin; //需要兑换审核的最低转数
//具体行会升级道具id见guild.txt
int m_nUpgradeItemNum1; //行会升级道具1的数量
int m_nUpgradeItemNum2; //行会升级道具2的数量
int m_nUpgradeItemNum3; //行会升级道具3的数量
std::tuple<unsigned int,int,int,int,unsigned int> m_CallInfo; //召唤者id场景idx, y, 过期时间
private:
WORD m_nLevel; // 等级 这几个值改变的时候要设置nUpdateTime以保存到数据库中
int m_GuildCoin; //行会资金
int m_nDailyGuildCoinDonated; //行会成员每天捐献的资金
char m_sInMemo[MAXMEMOCOUNT]; //内部公告信息
char m_sOutMemo[MAXMEMOCOUNT]; //外部公告信息
char m_sNextUpdateInMemo[MAXMEMOCOUNT];//下次更新内部公告消息
char m_sGroupMemo[MAXMEMOCOUNT]; //群公告
int m_sYyType; //语音频道类型
char m_sYyMemo[MAXMEMOCOUNT]; //语音频道宣言
//////////////////////////////////////////////////////////////////
int m_GuildYs; //帮派玥石
int m_nFanrong; // 繁荣度
//------------------------------行会神树-----------------------------------
public:
void GetGuildTreeData(int &nTreeLevel, int &nTreeDegree)
{
nTreeLevel = m_nGuildTreeLevel;
nTreeDegree = m_nGuildTreeDegree;
}
void SetGuildTreeData(int nTreeLevel, int nTreeDegree);
void GetGuildFruitData(int &nFruitLevel, int &nFruitDegree, int &nFruitNum)
{
nFruitLevel = m_nGuildFruitLevel;
nFruitDegree = m_nGuildFruitDegree;
nFruitNum = m_nGuildFruitNum;
}
void SetGuildFruitData(int nFruitLevel, int nFruitDegree, int nFruitNum);
void ResetGuildTreeAndFruitByGuildLevel();
//根据行会等级获取果实最低等级
int GetGuildFruitLevelByGuildlevel();
//根据果实等级设置果实数量
int GetGuildFruitNumByFruitlevel(int nFruitLevel);
unsigned int GetGuildTreeFruitTime()
{
return m_nGuildTreeFruitTime;
}
void SetGuildTreeFruitTime(unsigned int nFruitTime)
{
if( nFruitTime >= 0 )
{
m_nGuildTreeFruitTime = nFruitTime;
m_boUpdateTime = true;
}
}
//把神树设置为幼苗期
void ProcGuildTreeToSapling(unsigned int nNow);
//行会神树反馈行会资金
void ProcGuildTreeBackCoin();
void NotifyTreeAndFruitData(int nType);
const GuildFruitLevel* GetGuildFruitLevel(int nFruitLevel);
public:
int m_nGuildTreeLevel; //行会神树等级(不使用)
int m_nGuildTreeDegree; //行会神树进度,即神树精华(不使用)
int m_nGuildFruitLevel; //行会神树果实等级(品质)(不使用)
int m_nGuildFruitDegree; //行会神树果实进度(亮灯)(不使用)
int m_nGuildFruitNum; //行会神树果实进度数量(不使用)
unsigned int m_nGuildTreeFruitTime; //行会神树进入成熟期的时间(不使用)
unsigned int m_nGuildTreeBackCoin; //行会神树反馈的资金(不使用)
//------------------------行会任务-----------------------------------------
public:
//行会任务
void OnGuildTask(int nTaskType, int nTaskObjId, int nAddTaskSche, int nParam=-1);
void RefreshGuildTask(bool bForce=false);
void GetGuildTaskData(int &nTaskId, int &nTaskSche);
int GetDailyGuildCoinDonated()
{
return m_nDailyGuildCoinDonated;
}
void SetDailyGuildCoinDonated(int nNewGuildCoin)
{
m_nDailyGuildCoinDonated = nNewGuildCoin;
m_boUpdateTime = true;
}
void AddDailyGuildCoinDonated(int nAddGuildCoin)
{
m_nDailyGuildCoinDonated += nAddGuildCoin;
m_boUpdateTime = true;
}
int GetGuildTaskObjId(int nTaskId);
int GetGuildTaskObjNum(int nTaskId);
void SetGuildTaskId(int nTaskId)
{
if( nTaskId > 0 )
{
m_nGuildTaskId = nTaskId;
}
}
void SetGuildTaskSche(int nTaskSche)
{
if( nTaskSche > 0 )
{
m_nGuildTaskSche = nTaskSche;
}
}
private:
short GetGuildTaskType(int nTaskId);
const GuildTask* GetGuildTaskById(int nTaskId);
public:
int m_nGuildTaskId; //行会任务ID
int m_nGuildTaskSche; //行会任务进度
//------------------------攻城战-----------------------------------------
public:
void NotifyGuildSiegeCmdPanel(unsigned char nFlag);
void SetGuildSiegeCommand(CActor* pActor, int nCmdIdx, int nCmdMsgIdx);
void SendGuildSiegeCmdPanel(CActor* pActor, unsigned char nFlag);
void SendGuildSiegeCommand(CActor* pActor);
unsigned int GetGuildSiegeCommandTime()
{
return m_nGuildSiegeCmdTime;
}
private:
void NotifyGuildSiegeCommand();
private:
int m_nGuildSiegeCmdIdx; //下发指令的
int m_nGuildSiegeCmdMsgIdx; //下发指令的相关消息(随机一条)
int m_nGuildSiegeCmdSceneId; //帮主下发指令时的场景
int m_nGuildSiegeCmdPosX; //帮主下发指令时的x、y坐标
int m_nGuildSiegeCmdPosY;
unsigned int m_nGuildSiegeCmdTime; //下发指令的时间
DECLARE_OBJECT_COUNTER(CGuild)
public:
//跨服相关
void SendSbkGuildRankAward(int nRankId);
void SendSbkGuildAward();
};