Files

874 lines
21 KiB
C
Raw Permalink Normal View History

2025-01-09 17:45:40 +08:00
#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:TRUEFALSE,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: 012
* 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; //一键申请
};