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

874 lines
21 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
class CGuild;
class CGuildSystem:
public CEntitySubSystem<enGuildSystemID,CGuildSystem,CActor>
{
public:
//系统的错误码定义
enum tagGuildError
{
qeSucc =0 ,//成功
qeNotFree, //已在某个帮派中
qeFree, //还没加入帮派,不能解散帮派
qeLevel, //等级不够创建帮派
qeNoMoney, //不够金钱创建帮派
qeTimeErr, //在职时间不够不能解散帮派或者升职降职都需要72小时
qeNoRight, //没有执行的权限
};
public:
virtual bool Initialize(void *data,SIZE_T size);
//定时处理,清理召集令
virtual VOID OnTimeCheck(TICKCOUNT nTickCount);
/*
* Comments:清除召集令
* @Return VOID:
*/
VOID ClearZJ();
/*
* Comments:处理客户端的数据包b
* Param INT_PTR nCmd:帮派系统的消息id
* Param CDataPacketReader & packet:
* @Return void:
*/
void ProcessNetData(INT_PTR nCmd,CDataPacketReader &packet );
//角色登陆退出都要通知帮派组件更新在线玩家
/*
* Comments:用户登陆时候的处理
* @Return VOID:
*/
VOID OnLogin();
//下线
void OnActorLoginOut();
//玩家登陆时提示宣战的行会
void OnLoginDeclarNotice();
/*
* Comments:用户退出游戏时的处理
* @Return VOID:
*/
VOID Destroy();
/*
* Comments:把角色的数据保存到数据库中
* Param PACTORDBDATA pData:
* @Return void:
*/
virtual void Save(PACTORDBDATA pData);
/*
* Comments:保存指定的帮派数据
* Param int SaveGid:帮派id
* Param int SaveActorid:角色id
* Param INT64 SaveGx:贡献值
* Param int typetk:堂口和职位的信息
* Param UINT SaveZJ:召集令的清空时间
* Param UINT SaveZZ:在职的时间
* Param UINT nJoinTime:加入行会的时间
* @Return VOID:
*/
VOID Save(unsigned int SaveGid,unsigned int SaveActorid,int SaveGx,int typetk,UINT SaveZJ,UINT SaveZZ,int nTitle,int nPosType,
unsigned int nLoginTine, int nModleId, unsigned int nJoinTime);
/*
* Comments:申请增加一个帮派本函数应该是由npc的脚本调用本函数做条件判断能否创建
* Param LPCSTR sGuildName:帮派的名称
* @Return BOOL:允许创建返回0,否则返回错误码,函数会向名称服务器发送信息
*/
int CreateGuild(CDataPacketReader &packet);
/*
* Comments:解散帮派
* @Return int:达到解散的条件返回0否则返回错误码
*/
int DeleteGuild();
/*
* Comments:数据服务器返回创建结果的时候调用
* Param INT_PTR nGid:创建的帮派id
* Param INT_PTR nErrorCode:错误码成功的话是0
* Param LPCSTR sGuildName:帮派名称
* @Return VOID:
*/
VOID OnCreateGuild(unsigned int nGid,int nErrorCode,CGuild* pGuild);
/*
* Comments:解散帮派返回结果的时候调用
* @Return VOID:
*/
VOID OnDeleteGuild(int nErrorCode);
/*
* Comments:取得所在帮会的等级
* @Return int:
*/
int GetGuildLevel();
/*
* Comments:取得所在帮会的ID
* @Return unsigned int:
*/
unsigned int GetGuildId();
/*
* Comments:增加玩家的帮派贡献值,这里要加上参数记录日志,调用脚本
* Param int nValue:增加的值
* @Return int:
*/
//VOID AddGuildGx(int nValue);
//改变繁荣
void ChangeGuildFr(int value);
//沙巴克信息
void SendSbkInfo();
//领取捐献后奖励
void GetDonateReward();
//捐献帮派资金
void GuildDonate(BYTE nType);
/*
* Comments:给玩家发送本帮派的复杂信息数据,这数据显示在帮派窗口的首页
* @Return VOID:
*/
VOID SendGuildInfoResult();
/*
发送行会管理界面信息
*/
void sendGuilBuilds();
//发送行会宣战列表
void SendGuildWarList();
/*
* Comments:给玩家发送本帮派的简单信息数据,这数据供高频调用
* @Return VOID:
*/
VOID SendGuildInfoSimple();
/*
* Comments:给客户端发送成员的列表信息
* @Return VOID:
*/
VOID SendMemberList(unsigned int nActorId=0);
/*
* Comments:发送本服内的所有帮派信息
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID SendAllGuildInfo(CDataPacketReader &packet);
//发送行会日志
void SendGuildEventLog();
//加入行会
void JoinToGuild(unsigned int nGuildId);
/*
* Comments:发送行会名片
* Param CDataPacketReader & packet:
* @Return VOID:
*/
void SendGuildCardByRank(int nRank);
/*
* Comments:发送帮派名片数据包
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID SendGuildCard(CDataPacketReader &packet);
/*
* Comments:处理数据服务器返回的内容
* Param INT_PTR nCmd:
* Param INT_PTR nErrorCode:
* Param CDataPacketReader & reader:
* @Return VOID:
*/
virtual VOID OnDbRetData(INT_PTR nCmd,INT_PTR nErrorCode,CDataPacketReader &reader );
/*
* Comments:获取本人在帮派的地位
* @Return int:返回地位值,参看 tagSocialMaskDef的定义
*/
int GetGuildPos();
/*
* Comments:获得某帮派技能的等级
* @Return void:
*/
int GetGuildSkillLevel(int skillId);
/*
* Comments:设置帮派技能的等级
* @Return void:
*/
void SetGuildSkillLevel(int skillId,int skillLevel);
/*
* Comments:设置本人的帮派地位
* Param INT_PTR nPos:地位值,参看 tagSocialMaskDef的定义
* @Return int:
*/
VOID SetGuildPos(INT_PTR nPos);
/*
* Comments:脱离某个帮派后的处理(有可能是被开除或者自己脱离的)
* Param boType:是否给开除的默认是TRUE如果是FALSE表示是自己脱离的,要设置nZZNext(在职时间)以限制他不能在规定时间内再加入其他帮派,或接受邀请
* @Return VOID:
*/
VOID OnLeftGuild(BOOL boType);
/*
* Comments: 向所有帮派玩家广播
* Param char * pData:数据指针
* Param SIZE_T size:数据长度
* @Return void:
*/
void BroadCast(char * pData,SIZE_T size);
/*
* Comments:获取玩家的贡献值
* @Return int:
*/
int GetGx();
/*
* Comments:设置贡献值
* Param int nValue:
* @Return VOID:
*/
VOID SetGx(int nValue);
/*
* Comments:提醒客户端更新帮派信息
* @Return void:
*/
void NotifyUpdateGuildInfo();
/*
* Comments:取得在职的超时时间都是用现在时间加上72小时
* @Return UINT:
*/
static UINT GetZZNext();
/*
* Comments:比较玩家的帮派技能与帮派当前的技能大小 false大于等于帮派当前技能等级true可以升级
* Param int skillId:技能id
* Param int skillLevel:当前人物的帮派技能等级
* @Return UINT:
*/
bool CompareGuildSkillLevel(int skillId,int skillLevel);
//设置参加帮派斗魂副本的标志
void SetGuldBossFlag(bool bFlag){m_InGuildFuben = bFlag;}
bool GetGuildBossFlag() {return m_InGuildFuben;}
void SetGuildDartFlag(bool bFlag){m_InDartNow = bFlag;}
bool GetGuildDartFlag(){return m_InDartNow;}
//发送帮派事件给客户端
void SendGuildEventRecord(int nPage,int nNum);
//获得帮派职位名称
char* GetGuildPosName(int posType);
//查找匹配字符串
bool NaiveStringMatching(char* srcStr,char *destStr);
//返回搜索的结果
void SendSearchGuildResult(CDataPacketReader &packet);
//返回解散帮派的消息
void SendDeleteGuildResult(int bType);
//增加帮派累计贡献
void AddTotalGuildGx(int value);
//聊天消息
void GuildGroupChat(CDataPacketReader &packet);
//编辑
void OnEditGuildTitle(CDataPacketReader &packet);
//获取封号名称
char* GetGuildTitleName();
//设置成员封号
void OnChangeActorTitle(CDataPacketReader &packet);
//下发封号
void SendGuildTitleList();
//随机发送
void SendWelcomeToNewMember(char* nMsg);
//获得在本行会的累计贡献
int GetTotalGuildGx() {return m_GuildGx;}
bool GetCallGuildBossFlag() {return m_CallGuildBossFlag;}
//设置我正在召唤boss
void SetCallGuildBossFlag(bool value)
{
m_CallGuildBossFlag = value;
m_pGuild->SetUseGuildBoss(value);
}
//下发成员加入帮派或者离开帮派
void SendGuildMemberAddOrLieve(CActor* pActor,BYTE bType,unsigned int nActorId,char* nName);
//跟行会进行联盟
void SetUnionGuild(unsigned int nGuildId,int nType);
//解除联盟
void RefuseGuildUnion(unsigned int nGuildId);
//设置敌对行会
void SetEnemryGuild(unsigned int nGuildId);
//解除敌对行会
void RefuseEnemryGuild(unsigned int nGuildId);
VOID SendSuggestGuildToActor(int nLevel);
//行会竞价排名
VOID OnStartBidGuildRank();
void JoinToGuildByRank(int nRank);
//进入游戏
virtual void OnEnterGame();
//被杀提示
void OnBeKilledByOtherTips(CActor* pKiller,char* szSceneName);
//修改名字后的处理
void OnChangeNameGuildOp();
//行会贡献有改变
void ChangeGuildGx(int nGx,int nLogId = 0);
//获取已上香次数
int GetShxDoneTimes() { return m_HasShxTimes;}
//设置已上香次数
void SetShxDoneTimes(int nTimes)
{
if(nTimes >= 0)
m_HasShxTimes = nTimes;
}
//获取增加的上香次数
int GetShxAddTimes() { return m_AddShxTimes;}
//设置增加上香次数
void ChangeShxAddTimes(int nTimes)
{
m_AddShxTimes += nTimes;
}
//获取当天的贡献值
int GetTodayGxValue() {return m_TodayGx;}
//改变当天上香的贡献值
void ChangeTodayGx(int nValue);
//获取已探险的次数
int GetExploreTimes() {return m_ExploreTimes;}
//设置已探险的次数
void ChangeExploreTimes(int nTimes)
{
m_ExploreTimes += nTimes;
if(m_ExploreTimes < 0)
m_ExploreTimes = 0;
}
//获取探险获得物品id
int GetExploreItemId() {return m_ExploreItemId;}
//设置探险获得的物品id
void SetExploreItemId(int nItemId) {m_ExploreItemId = nItemId;}
//获取今日已挑战的次数
int GetChallengeTimes() {return m_ChallengeTimes;}
//设置已挑战的次数
void SetChallengeTimes(int nTimes) {m_ChallengeTimes = nTimes;}
//设置添加的次数
void SetAddChallengeTimes(int nTimes) {m_AddChallengeTimes = nTimes;}
//获取已添加的次数
int GetAddChallengeTimes() {return m_AddChallengeTimes;}
//返回行会建筑的信息
void SendGuildbuildingInfo();
//下发行会建筑冷却时间
void SendGuildbuildCdTime();
//加载个人行会
void LoadActorBuildingData();
//返回加载个人行会数据
void OnRevActorBuildData(CDataPacketReader &reader);
//新的一天重置一些数据
void OnNewDayArriveOP(bool bState = false);
//下发当天获得的贡献
void SendTodayGetGuildgx();
//下发行会捐献数据
void SendGuildDonateData();
//下发行会升级材料信息
void SendGuildUpgradeItem();
void SendGuildDonateInfo();
//设置是否领取过奖励
inline void SetCoinAwardFlag( byte nVal)
{
m_nGetCoinAwardFlag = nVal;
}
//获取是否领取过奖励
inline int GetCoinAwardFlag()
{
return m_nGetCoinAwardFlag;
}
//获取当天捐献金币
inline int GetTodayDonateCoin()
{
return m_nTodayDonateCoin;
}
//设置当天捐献金币
inline void SetTodayDonateCoin(int nNewTodayCoin)
{
m_nTodayDonateCoin = nNewTodayCoin;
}
//获取当天捐献道具数量
inline int GetTodayDonateItem()
{
return m_nTodayDonateItem;
}
//设置当天捐献道具数量
inline void SetTodayDonateItem(int nNewTodayItem)
{
m_nTodayDonateItem = nNewTodayItem;
}
//设置帮派职位
inline void SetGuildTitle(int nGuildPos)
{
switch(nGuildPos)
{
case smGuildLeader:
m_nTitle = 1;
break;
case smGuildAssistLeader:
m_nTitle = 2;
break;
default:
m_nTitle = 0;
break;
}
}
//成功加入行会
void OnJoinGuildSuccess();
//是否为高级官员
bool checkSbkGuildSeniorofficials();
protected:
/*
* Comments:处理邀请玩家加入帮派的网络请求
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID InviteActor(CDataPacketReader &packet);
/*
* Comments:玩家接受还是拒绝加入帮派的网络包
* Param BOOL result:TRUE表示接受
* @Return VOID:
*/
VOID InviteResult(CDataPacketReader &packet);
/*
* Comments:用户提交的入会申请
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID JoinApply(CDataPacketReader &packet);
/*
* Comments:给用户显示本帮派中,申请加入的消息列表
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID JoinApplyMsgList();
/*
* Comments:客户端提交审核的结果
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID JoinApplyResult(CDataPacketReader &packet);
/*
* Comments:开除某个成员,客户端上传的消息
* Param INT_PTR nActorid:
* @Return VOID:
*/
VOID DeleteMemberRequest(unsigned int nActorid);
/*
* Comments:脱离当前的帮派
* @Return VOID:
*/
VOID LeftGuild(BYTE bType);
/*
* Comments:处理禅让的请求包
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID LeaderChange(CDataPacketReader &packet);
/*
* Comments:处理用户的升职/降职
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID ChangeGuildPos(CDataPacketReader &packet);
/*
* Comments:更新公告信息
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID UpdateMemo(CDataPacketReader &packet);
/*
* Comments:取得每日的召集令和工资
* @Return VOID:
*/
VOID GetZJ();
/*
* Comments:升级帮派
* @Return VOID:
*/
VOID UpgradeGuild();
//获取扩充人口的信息
VOID GetUpdateGuildInfo();
/*
* Comments:设置聊天群组的id
* param nCount
* @Return VOID:
*/
VOID SetGuildQGroupId(CDataPacketReader &packet);
/*
* Comments:设置语音频道
* param nCount
* @Return VOID:
*/
VOID SetGuildYGroupId(CDataPacketReader &packet);
/*
* Comments:客户端发起的宣战信息
* Param nObjGuildid:目标行会的id
* @Return VOID:
*/
VOID DeclareWar(unsigned int nObjGuildid);
/*
* Comments:设置行会之间的关系
* Param BYTE nType:1 联盟 2 敌对 3 解除联盟 4 解除敌对
* Param nObjGuildId:对方行会ID
* @Return VOID:
*/
VOID SetGuildRelation(BYTE nType, unsigned int nObjGuildId);
/*
* Comments:同意或者拒绝行会之间的同盟
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID WarRelationResult(CDataPacketReader &packet);
/*
* Comments:从背包移动物品到行会仓库
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID HandItemToGuildDepot(CDataPacketReader &packet);
/*
* Comments:从行会仓库取出物品到背包
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID GetItemFromGuildDepot(CDataPacketReader &packet);
/*
* Comments:获取仓库的物品列表
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID GetDepotItemList(CDataPacketReader &packet);
/*
* Comments:获取仓库的操作
* Param CDataPacketReader & packet:
* @Return VOID:
*/
VOID SendGuildDepotRecord(CDataPacketReader &packet);
//请求求救
void OnRequestHelp(CDataPacketReader &packet);
//设置玩家直接加入
void OnSetAddMemberFlag(CDataPacketReader &packet);
void SendMemberFlag();
/*
* Comments:下发现在宣战、敌对状态的帮派列表
* @Return VOID:
*/
VOID SendWarList();
/*
* Comments:请求帮派战历史记录
* @Return VOID:
*/
VOID SendWarHistory();
/*
* Comments:下发升级到下一级所需要的物品数量等信息
* @Return void:
*/
void SendUpLevelInfo();
/*
* Comments:判断时间是否已达到指定时间
* Param UINT nTime:
* @Return BOOL:
*/
static BOOL TimeOK(UINT nTime);
//下发贡献排行列表
void SendGxRankinglist();
/*
* Comments:发送是否自动报名
* @Return void:
*/
//void SendAutoSbkSignUp();
void SendCallTimeRemain();
void SendGuildOpOk(BYTE nType);
/*
* Comments:触发一个事件
* Param INT_PTR nSubEvent: 子事件的ID
* Param INT_PTR nParam1:参数1不需要就直接按默认参数为-1
* Param INT_PTR nParam2:参数2不需要就直接按默认参数为-1
* Param INT_PTR nParam3:参数3不需要就直接按默认参数为-1
* Param INT_PTR nParam4:参数4不需要就直接按默认参数为-1
* @Return void:
*/
void TriggerEvent(INT_PTR nSubEvent,INT_PTR nParam1=-1,INT_PTR nParam2=-1,INT_PTR nParam3=-1,INT_PTR nParam4=-1);
void PutInUpgradeGuildItem(int nCount1, int nCount2, int nCount3);
//弹劾官员
void ImpeachGuildMember(unsigned int nObjActorId);
int GetDailyDonateCoinLimit();
int GetDailyDonateItemLimit();
static int QuickSortGuildDepotCmp(const void *a ,const void *b);
//行会召唤
void CallGuildMember();
//行会召唤应答
void CallGuildMemberBack(CDataPacketReader &packet);
//行会建筑
void UpdateGuildBuild(CDataPacketReader& packet);
public://攻城相关的
//穿上/脱下龙袍
void TakeOnOffDragonRobe(BYTE nType);
//下发皇城职位信息
void SendGuildCityPosInfo();
///设置皇城职位
void SetGuildCityPostion(BYTE nType, BYTE nState, const char* sName);
//GM设置皇城职位
void GMSetGuildCityPostion(const char* sGuildName, BYTE nType, BYTE nState, const char* sName);
//获取皇城职位(攻城)
int GetGuildCityPos();
//下发攻城的行会列表
void SendSignUpGuildList();
/*
* Comments:
* Param int nType: 0出现1移动2消失
* Param CScene * pScene: 指定场景,没有则为当前场景
* @Return void:
*/
void BroadCastGuildPlayerPos(int nType, CScene* pScene = NULL);
//下发 其他行会玩家的位置
void SendGuildPlayerPos(int nType,CVector<void*>& playerList);
//检查是否在区域属性内,是则广播位置
void CheckGuildPlayerPos(int nType);
public: //行会神树(废弃)
void SendGuildTreeData();
void SendGuildFruitData();
void SendGuildFruitPickData();
int GetTodayChargeTreeNum()
{
return m_nTodayChargeTreeNum;
}
void SetTodayChargeTreeNum(int nTodayChargeTreeNum)
{
m_nTodayChargeTreeNum = nTodayChargeTreeNum;
}
int GetTodayPickFruitNum()
{
return m_nTodayPickFruitNum;
}
void SetTodayPickFruitNum(int nTodayPickFruitNum)
{
m_nTodayPickFruitNum = nTodayPickFruitNum;
}
void SendGuildTreeBackCoin(); //下发行会神树回馈资金
private: //行会神树(废弃)
void ChargeGuildTree(); //行会神树充能
void PickGuildFruit(); //摘取行会神树果实
int m_nTodayChargeTreeNum; //玩家当日已经充能的次数
int m_nTodayPickFruitNum; //玩家当日已经采摘果实的次数
public: //行会任务(废弃)
void OnGuildTask(int nTaskType, int nTaskObjId, int nAddTaskSche, int nParam=-1);
void SendGuildTaskInfo();
private: //行会福利(废弃)
void GetGuildTaskAward();
void GetGuildBenefit();
void SendGuildTaskBenefitData();
private:
void GetDepotItemCircleAndNum(); //获取行会仓库中哪些转数的装备的数量
void GetDepotItemListNoCond(int nPage);
//按条件过滤仓库物品
void GetDepotItemListCond( int nPage, int nJobCond, int nGxCond, int nCircle, int nNeedCheck=0 );
void CheckGuildDepotItemExchange( CDataPacketReader &packet ); //审核行会仓库物品兑换请求
void SetExchangeNeedCheckCirclrMin(int nCircleMin);
void OneKeyClearDepotItem( int nCircle );
private: //沙城战
void SendGuildSiegeCmdData( );
public:
CGuildSystem();
public:
inline BOOL IsFree() {return m_pGuild == NULL;}
//获取帮派的指针
inline CGuild * GetGuildPtr(){return m_pGuild;}
inline void SetGuild(CGuild* pGuild) { m_pGuild = pGuild; }
inline void SetJoinTime( unsigned int nJoinTime ) { m_nJoinTime = nJoinTime; }
//依据错误码发送tips
void SendErrorTipMsg(int errorCode, int nLeftTime, int nAotuLevel, int nLevelLimit);
public: //申请加入行会的操作
void SendJoinGuildApply();
private:
CGuild* m_pGuild;
byte m_nGetCoinAwardFlag;
public:
BYTE nTk; //所属堂口
//下次可领取召集令和工资福利的时间初始是0在非0的情况下其是等于每日的凌晨0点的时间
//领取召集令后设置这个值为24小时后到时间清除现有的所有召集令并zjNext=0
//nZjNext有3种情况nZjNext==0表示召集令给清除可以领取nZjNext>现在时间表示已领取,下次领取的时间还没到
//nZjNext<现在时间 表示可领取
UINT nWealNext;
UINT nZzNext; //在职的时间
UINT nTomorrow;
bool boWealClear;//是否有今天之前的召集令没清除有的话是true
BOOL boSaveed;//判断是否有数据需要保存
int m_Score; //膜拜积分
bool m_InGuildFuben; //在参加帮派斗魂副本的标志
bool m_InDartNow; //是否在帮派押镖
int m_GuildGx; //在本行会累计贡献
bool m_CallGuildBossFlag; //是否召唤了帮派斗魂
int m_nTitle; //封号序号(1-帮主、2-副帮主、3-堂主、4-成员),与行会职位挂钩,
//当职位的Name可编辑的情况下使用的目前不使用采用固定配置
int m_TodayGx; //今天获得贡献
int m_HasShxTimes; //拜关公上香的次数
int m_AddShxTimes; //增加的上香次数
int m_ExploreTimes; //行会月光宝盒探险次数
int m_ExploreItemId; //月光宝盒抽奖获得的物品id
int m_ChallengeTimes; //个人封印兽碑挑战的次数
int m_AddChallengeTimes; //增加的挑战次数
int m_nTodayDonateCoin; //当天可捐献的金币数量
int m_nTodayDonateItem; //当天可捐献的道具数量
unsigned int m_nJoinTime; //加入行会的时间(有行会,此值>0否则为0
BYTE m_nFastApply; //一键申请
};