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

📄 msgsyndicate.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				for(int i = 0; i < pRes->RecordCount(); i++)
				{
					char	szRecvUser[_MAX_NAMESIZE];
					SafeCopy(szRecvUser, pRes->GetStr(LEAVEWORDDATA_USER), _MAX_NAMESIZE);
					
					CUserPtr pUser = g_UserManager.GetUser(szRecvUser);
					if(pUser && !pUser->IsMoreLeaveWord())
					{
						char	szTime[_MAX_NAMESIZE];
						char	szWords[_MAX_WORDSSIZE];					
						SafeCopy(szTime, pRes->GetStr(LEAVEWORDDATA_TIME), _MAX_NAMESIZE);
						SafeCopy(szWords, pRes->GetStr(LEAVEWORDDATA_WORDS), _MAX_WORDSSIZE);						
						//---jinggy---2004-12-20---判断是否是 申请开除会员的留言---begin
						char szBuffer[255]=""; //开除成员的标志
						OBJID idSyn; //要开除的成员的帮派ID
						char  szNameDismissed[16]; //开除的成员ID		
						char  szLeaderName[16];
						
						if(4!=sscanf(szWords,"%s %d %s %s",szBuffer,&idSyn,szLeaderName,szNameDismissed))
							continue;
						if(strcmp(szBuffer,"ApplyDismiss")==0 && idSyn>0 ) //是申请开除留言
						{
							CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);
							CHECK(pSyn);
							DWORD dwMainSynID = pSyn->GetMasterSynID();
							
							char szCurLeaderName[16];
							sprintf(szCurLeaderName,"%s",pSyn->GetStr(SYNDATA_LEADERNAME));
							
							if(strcmp(szNameDismissed,szName)==0) //有效期内此人还是领导则发送请求
							{
								//删除记录
								OBJID	idMsg = pRes->GetInt(LEAVEWORDDATA_ID);
								sprintf(szSQL, "DELETE FROM %s WHERE id=%u LIMIT 1", _TBL_LEAVEWORD, idMsg);
								g_db.ExecuteSQL(szSQL);								
								break;								
							}						
						}						
					}
				}
				pRes->MoveNext();
			}
			pRes->Release();
		
		}
		break;

	case KICKOUT_MEMBER_INFO_QUERY: //帮主查列表
		{
			if(pUser->GetSynRank() != RANK_LEADER)  
				return;

			char	szSQL[1024];
			sprintf(szSQL, "SELECT * FROM %s WHERE words LIKE 'ApplyDismiss%'", _TBL_LEAVEWORD);	
			IRecordset *pRes = Database()->CreateNewRecordset(szSQL);
			if(pRes)
			{
				for(int i = 0; i < pRes->RecordCount(); i++)
				{
					char	szRecvUser[_MAX_NAMESIZE];
					SafeCopy(szRecvUser, pRes->GetStr(LEAVEWORDDATA_USER), _MAX_NAMESIZE);
					
					CUserPtr pUser = g_UserManager.GetUser(szRecvUser);
					if(pUser && !pUser->IsMoreLeaveWord())
					{
					//	char	szSender[_MAX_NAMESIZE];
						char	szTime[_MAX_NAMESIZE];
						char	szWords[_MAX_WORDSSIZE];
					//	SafeCopy(szSender, pRes->GetStr(LEAVEWORDDATA_SENDER), _MAX_NAMESIZE);
						SafeCopy(szTime, pRes->GetStr(LEAVEWORDDATA_TIME), _MAX_NAMESIZE);
						SafeCopy(szWords, pRes->GetStr(LEAVEWORDDATA_WORDS), _MAX_WORDSSIZE);
						
						
						//---jinggy---2004-12-20---判断是否是 申请开除会员的留言---begin
						char szBuffer[255]=""; //开除成员的标志
						OBJID idSyn; //要开除的成员的帮派ID
						char  szNameDismissed[16]; //开除的成员ID		
						char  szLeaderName[16];
						
						if(4!=sscanf(szWords,"%s %d %s %s",szBuffer,&idSyn,szLeaderName,szNameDismissed))
							continue;
						
						if(strcmp(szBuffer,"ApplyDismiss")==0 && idSyn>0 ) //是申请开除留言
						{
							time_t	tDelta = time(NULL);
							tDelta -= 7 * 86400;  //超过7天,帮主没有相应就表示同意开除
							char	szDelta[_MAX_NAMESIZE];
							
							tm*	pTm		= localtime(&tDelta);
							if(pTm)
							{
								sprintf(szDelta, "%04d%02d%02d%02d%02d%02d", 
									pTm->tm_year+1900, pTm->tm_mon+1, pTm->tm_mday, pTm->tm_hour, pTm->tm_min, pTm->tm_sec);								
							}
							
							if(strcmp(szTime,szDelta) < 0)
							{
								//响应过期											
								CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);
								if(pSyn && pSyn->GetInt(SYNDATA_MONEY) < SYN_MONEY_BASELINE)
								{
									pUser->SendSysMsg(STR_TOO_LOWER_SYN_MONEY);
									return;
								}
								pUser->QuerySynAttr()->KickoutMember(szNameDismissed);						
								
								MSGBUF	szMsg;
								sprintf(szMsg, STR_KICKOUT_MEMBER_s, szNameDismissed);
								if(pSyn)
									pSyn->BroadcastSubSynMsg(pUser->GetSocketID(), 0, szMsg);
								
								
								//删除记录
								OBJID	idMsg = pRes->GetInt(LEAVEWORDDATA_ID);
								sprintf(szSQL, "DELETE FROM %s WHERE id=%u LIMIT 1", _TBL_LEAVEWORD, idMsg);
								g_db.ExecuteSQL(szSQL);
							}
							else  
							{
									
								CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);
								DWORD dwMainSynID = pSyn->GetMasterSynID();
								
								char szCurLeaderName[16];
								sprintf(szCurLeaderName,"%s",pSyn->GetStr(SYNDATA_LEADERNAME));

								if(strcmp(szCurLeaderName,szLeaderName)==0) //有效期内此人还是领导则发送请求
								{
									//向帮主发送申请开除的成员的信息									
//									if(Create(KICKOUT_MEMBER_INFO_QUERY, szNameDismissed))
//										pUser->SendMsg(this);								
								}
								else //在有效期内若是换了帮主,则取消开除
								{
									//删除记录
									OBJID	idMsg = pRes->GetInt(LEAVEWORDDATA_ID);
									sprintf(szSQL, "DELETE FROM %s WHERE id=%u LIMIT 1", _TBL_LEAVEWORD, idMsg);
									g_db.ExecuteSQL(szSQL);
								}
							}							
						}
					}
					pRes->MoveNext();
				}
				pRes->Release();
			}
		}
		break;
	case KICKOUT_MEMBER_AGREE:  //帮主同意申请的开除会员

		{
			// 检查帮派
			OBJID idSyn = pUser->GetSynID();
			int nRank = pUser->GetSynRank();
			
			if(idSyn == ID_NONE || nRank != RANK_LEADER )
			{
				pUser->SendSysMsg(STR_NOT_AUTHORIZED);
				return;
			}

			CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);

			// no money ?
			if(pSyn && pSyn->GetInt(SYNDATA_MONEY) < SYN_MONEY_BASELINE)
			{
				pUser->SendSysMsg(STR_TOO_LOWER_SYN_MONEY);
				return;
			}

			//pTarget->QuerySynAttr()->LeaveSyn();		// 改成立刻踢出
			pUser->QuerySynAttr()->KickoutMember(szName);

			MSGBUF	szMsg;
			sprintf(szMsg, STR_KICKOUT_MEMBER_s, LPCTSTR(szName));
			IF_OK(pSyn)
				pSyn->BroadcastSubSynMsg(GetSocketID(), GetNpcID(), szMsg);		
			
			//////////////////////////////////////////////////////////////////////////
			char	szSQL[1024];
			sprintf(szSQL, "SELECT * FROM %s WHERE words LIKE 'ApplyDismiss%'", _TBL_LEAVEWORD);	
			IRecordset *pRes = Database()->CreateNewRecordset(szSQL);
			if(pRes)
			{
				for(int i = 0; i < pRes->RecordCount(); i++)
				{
					char	szRecvUser[_MAX_NAMESIZE];
					SafeCopy(szRecvUser, pRes->GetStr(LEAVEWORDDATA_USER), _MAX_NAMESIZE);
					
					CUserPtr pUser = g_UserManager.GetUser(szRecvUser);
					if(pUser && !pUser->IsMoreLeaveWord())
					{
						char	szTime[_MAX_NAMESIZE];
						char	szWords[_MAX_WORDSSIZE];					
						SafeCopy(szTime, pRes->GetStr(LEAVEWORDDATA_TIME), _MAX_NAMESIZE);
						SafeCopy(szWords, pRes->GetStr(LEAVEWORDDATA_WORDS), _MAX_WORDSSIZE);						
						//---jinggy---2004-12-20---判断是否是 申请开除会员的留言---begin
						char szBuffer[255]=""; //开除成员的标志
						OBJID idSyn; //要开除的成员的帮派ID
						char  szNameDismissed[16]; //开除的成员ID		
						char  szLeaderName[16];
						
						if(4!=sscanf(szWords,"%s %d %s %s",szBuffer,&idSyn,szLeaderName,szNameDismissed))
							continue;
						if(strcmp(szBuffer,"ApplyDismiss")==0 && idSyn>0 ) //是申请开除留言
						{
							CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);
							CHECK(pSyn);
							DWORD dwMainSynID = pSyn->GetMasterSynID();
							
							char szCurLeaderName[16];
							sprintf(szCurLeaderName,"%s",pSyn->GetStr(SYNDATA_LEADERNAME));
							
							if(strcmp(szNameDismissed,szName)==0) //有效期内此人还是领导则发送请求
							{
								//删除记录
								OBJID	idMsg = pRes->GetInt(LEAVEWORDDATA_ID);
								sprintf(szSQL, "DELETE FROM %s WHERE id=%u LIMIT 1", _TBL_LEAVEWORD, idMsg);
								g_db.ExecuteSQL(szSQL);								
								break;								
							}						
						}						
					}
				}
				pRes->MoveNext();
			}
			pRes->Release();
		}
		break;
		
	////////////////////////////////////////////////////////////////////////////////////////////////
	case	KICKOUT_MEMBER:				// 开除黑社会成员
		{
			// 检查帮派
			OBJID idSyn = pUser->GetSynID();
			int nRank = pUser->GetSynRank();
			if(idSyn == ID_NONE || nRank != RANK_LEADER)
			{
				pUser->SendSysMsg(STR_NOT_AUTHORIZED);
				return;
			}
			CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);
			CHECK(pSyn);
			
			// no money ?
			if(pSyn->GetInt(SYNDATA_MONEY) < SYN_MONEY_BASELINE)
			{
				pUser->SendSysMsg(STR_TOO_LOWER_SYN_MONEY);
				return;
			}

			// 开除
			CUser* pTargetUser = UserManager()->GetUser(szName);
			if (pTargetUser)
			{
				pTargetUser->SendSysMsg(STR_KICKOUT_MEMBER_s, pTargetUser->GetName());
				if (pTargetUser->GetSynID() == idSyn)
					pTargetUser->QuerySynAttr()->LeaveSyn();
			}
			else
			{
				pUser->QuerySynAttr()->KickoutMember(szName);
			}

			MSGBUF	szMsg;
//			// 通知对方
//			sprintf(szMsg, STR_KICKOUT_ME_s, pUser->GetName());
//			CMsgTalk msg;
//			if (msg.Create(SYSTEM_NAME, szName, szMsg, NULL, 0xff0000, _TXTATR_SYSTEM))
//				MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(&msg, szName);

			sprintf(szMsg, STR_KICKOUT_MEMBER_s, szName, pSyn->GetMasterSyn()->GetStr(SYNDATA_NAME));
			IF_OK(pSyn)
				pSyn->BroadcastSubSynMsg(GetSocketID(), GetNpcID(), szMsg);
		}
		break;
	////////////////////////////////////////////////////////////////////////////////////////////////
	case	QUERY_SYN_NAME:
		{
			OBJID idSyn	= m_pInfo->idTarget;
			CSynPtr pSyn = SynManager()->QuerySyndicate(idSyn);
			if(!pSyn)
			{
//				LOGWARNING("玩家[%s]未找到帮派名[%d]!", pUser->GetName(), idSyn);
				return;
			}

			CSynPtr pMasterSyn = pSyn->GetMasterSyn();
			CHECK(pMasterSyn);

			CMsgName	msg;
			IF_OK(msg.Create(NAMEACT_SYNDICATE, pMasterSyn->GetStr(SYNDATA_NAME), idSyn))
			{
				if(pSyn->GetID() != pMasterSyn->GetID())
				{
					ASSERT(msg.AppendStr(pSyn->GetStr(SYNDATA_NAME)));
				}
				pUser->SendMsg(&msg);
			}
		}
		break;
	////////////////////////////////////////////////////////////////////////////////////////////////
	case	DONATE_MONEY:
		{
			if(pUser->GetSynID() == ID_NONE)
				return ;

			int nMoney = m_pInfo->idTarget;

			pUser->QuerySynAttr()->DonateMoney(nMoney);
		}
		break;
	////////////////////////////////////////////////////////////////////////////////////////////////
	case	QUERY_SYNATTR:
		{
			pUser->QuerySynAttr()->SendInfoToClient();
		}
		break;
	////////////////////////////////////////////////////////////////////////////////////////////////
	case	_APPLY_ALLY:	// 请求添加结盟帮派
		{
			// 查参数
			if(m_pInfo->idTarget == ID_NONE || m_pInfo->idTarget == idUser)
				return;

			CUserPtr pTargetUser = UserManager()->GetUser(m_pInfo->idTarget);
			if(!pTargetUser)
				return;

			// 检查帮派
			OBJID	idSyn	= pUser->GetSynID();
			int		nRank	= pUser->GetSynRankShow();
			OBJID	idTargetSyn = pTargetUser->GetSynID();
			int		nTargetRank	= pTargetUser->GetSynRankShow();
			if(idSyn == ID_NONE || nRank != RANK_LEADER
				|| idTargetSyn == ID_NONE || nTargetRank != RANK_LEADER)
			{
				pUser->SendSysMsg(STR_APPLY_ALLY_FAILED);
				return;
			}

			if(!pTargetUser->FetchApply(CUser::APPLY_ALLY_SYN, idUser))
			{
				// 保存申请项
				pUser->SetApply(CUser::APPLY_ALLY_SYN, m_pInfo->idTarget);
				IF_OK_(Create(_APPLY_ALLY, idUser))
					pTargetUser->SendMsg(this);
				return;
			}

			// set ally
  			CSyndicate* pSyn = pUser->GetSyndicate();
			CHECK(pSyn);
			CSyndicate* pTargetSyn = pTargetUser->GetSyndicate();
			CHECK(pTargetSyn);

			// 先解除敌对关系
			pSyn->ClearEnemySyn(pTargetSyn);
			pTargetSyn->ClearEnemySyn(pSyn);

			int nIdx = -1;
			for(int i = 0; i < MAX_SYNALLYSIZE; i++)
			{
				OBJID idTarget = pSyn->GetInt((SYNDATA)(SYNDATA_ALLY0+i));
				if(idTarget == ID_NONE || SynManager()->QuerySyndicate(idTarget) == NULL || idTarget == pTargetSyn->GetID())
					nIdx = i;
			}
			if(nIdx == -1)
			{
				pUser->SendSysMsg(STR_ALLY_FULL);
				return ;
			}
			int nIdx2 = -1;
			for( i = 0; i < MAX_SYNALLYSIZE; i++)
			{
				OBJID idTarget = pTargetSyn->GetInt((SYNDATA)(SYNDATA_ALLY0+i));
				if(idTarget == ID_NONE || SynManager()->QuerySyndicate(idTarget) == NULL || idTarget == pSyn->GetID())
					nIdx2 = i;
			}
			if(nIdx2 == -1)
			{
				pUser->SendSysMsg(STR_HIS_ALLY_FULL);
				return ;
			}
			pSyn->QueryModify()->SetData((SYNDATA)(SYNDATA_ALLY0+nIdx), pTargetSyn->GetID(), true);		// true: 必须save
			pTargetSyn->QueryModify()->SetData((SYNDATA)(SYNDATA_ALLY0+nIdx2), pSyn->GetID(), true);	// true: 必须save

			MSGBUF szMsg;
			sprintf(szMsg, STR_SYN_ALLY_s, pSyn->GetStr(SYNDATA_NAME), pTargetSyn->GetStr(SYNDATA_NAME));
			pSyn->BroadcastSubSynMsg(GetSocketID(), GetNpcID(), szMsg);
			pTargetSyn->BroadcastSubSynMsg(GetSocketID(), GetNpcID(), szMsg);

			{
				// synchro npc server
				CMsgSyndicate	msg;
				IF_OK(msg.Create(SET_ALLY, pTargetSyn->GetID()))
					MapGroup(PID)->QueryIntraMsg()->SendNpcMsg(pSyn->GetID(), &msg);
			}
		}
		break;
	case _CLEAR_ALLY: //客户端向服务器 解除结盟
		{
			// 检查帮派
			OBJID idSyn = pUser->QuerySynAttr()->GetSynID();
			int	nRankShow	= pUser->QuerySynAttr()->GetSynRankShow();
			if(idSyn == ID_NONE || nRankShow != RANK_LEADER)
				return ;
			CSynPtr pSyn = SynManager()->QuerySyndicate(idSyn);
			CHECK(pSyn);

			CSyndicate* pTargetSyn = SynManager()->QuerySynByName(szName);
			if (!pTargetSyn)
				return ;

			pSyn->ClearAllySyn(pTargetSyn);

			MSGBUF szMsg;
			sprintf(szMsg, STR_SYN_CLEAR_ALLY1_s, szName);
			pSyn->BroadcastSubSynMsg(GetSocketID(), GetNpcID(), szMsg);

			sprintf(szMsg, STR_SYN_CLEAR_ALLY2_s, pSyn->GetStr(SYNDATA_NAME));
			pTargetSyn->BroadcastSubSynMsg(GetSocketID(), GetNpcID(), szMsg);
		}	
		break;		
	case _SET_ANTAGONIZE:	// 添加敌对军团
		{
			// 检查帮派
			OBJID idSyn = pUser->QuerySynAttr()->GetSynID();
			int nRankShow = pUser->QuerySynAttr()->GetSynRankShow();
			if (idSyn == ID_NONE || nRankShow != RANK_LEADER)
				return ;
			CSynPtr pSyn = SynManager()->QuerySyndicate(idSyn);
			CHECK(pSyn);

			// 检查帮派
			CSyndicate* pTargetSyn = SynManager()->QuerySynByName(szName);
			if (!pTargetSyn)
				return;

			// 先解除同盟关系
			pSyn->ClearAllySyn(pTargetSyn);

			if((!pTargetSyn->IsMasterSyn()) || pTargetSyn->GetID() == idSyn)
				return ;
			
			for(int i = 0; i < MAX_SYNENEMYSIZE; i++)
			{
				OBJID idTarget = pSyn->GetInt((SYNDATA)(SYNDATA_ENEMY0+i));
				if(idTarget != ID_NONE && idTarget == pTargetSyn->GetID())
					return ;
			}
			for( i = 0; i < MAX_SYNENEMYSIZE; i++)
			{
				OBJID idTarget = pSyn->GetInt((SYNDATA)(SYNDATA_ENEMY0+i));
				if(idTarget == ID_NONE || SynManager()->QuerySyndicate(idTarget) == NULL)
				{
					pSyn->QueryModify()->SetData((SYNDATA)(SYNDATA_ENEMY0+i), pTargetSyn->GetID(), true);		// true: 必须save

					MSGBUF szMsg;
					sprintf(szMsg, STR_SYN_ENEMY_s, pSyn->GetStr(SYNDATA_NAME));
					pTargetSyn->BroadcastSubSynMsg(GetSocketID(), GetNpcID(), szMsg);

					break;
				}
			}		
			CMsgSyndicate	msg;
			IF_OK(msg.Create(SET_ANTAGONIZE, pTargetSyn->GetID()))
				MapGroup(PID)->QueryIntraMsg()->SendNpcMsg(pSyn->GetID(), &msg);
		}
		break;
	case _CLEAR_ANTAGONIZE:	// 删除敌对军团
		{
			// 检查帮派
			OBJID idSyn = pUser->QuerySynAttr()->GetSynID();
			int nRankShow = pUser->QuerySynAttr()->GetSynRankShow();
			if (idSyn == ID_NONE || nRankShow != RANK_LEADER)
				return ;
			CSynPtr pSyn = SynManager()->QuerySyndicate(idSyn);
			CHECK(pSyn);

			CSyndicate* pTargetSyn = SynManager()->QuerySynByName(szName);
			if (!pTargetSyn)
				return;

			pSyn->ClearEnemySyn(pTargetSyn);

			MSGBUF szMsg;
			sprintf(szMsg, STR_SYN_CLEAR_ENEMY_s, pSyn->GetStr(SYNDATA_NAME));
			pTargetSyn->BroadcastSubSynMsg(GetSocketID(), GetNpcID(), szMsg);
		}	
		break;
	default:
		ASSERT(!"switch MsgSyndicate");
		return;
	}
}

⌨️ 快捷键说明

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