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

📄 msgsyndicate.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MsgBetOutside.cpp: implementation of the CMsgAtk class.
// 仙剑修,2002.1.8
//////////////////////////////////////////////////////////////////////
#include "AllMsg.h"
#include "basefunc.h"
#include "MapGroup.h"
#include "SynManager.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMsgSyndicate::CMsgSyndicate()
{
	Init();
	m_pInfo	=(MSG_Info *)m_bufMsg;
	m_StrPacker.SetBuf(m_pInfo->szBuf, _MAX_MSGSIZE-sizeof(MSG_Info)+1);
}

CMsgSyndicate::~CMsgSyndicate()
{
}

//////////////////////////////////////////////////////////////////////
BOOL	CMsgSyndicate::Create(unsigned short usAction, OBJID idTarget, OBJID idFealty)
{
	// check param
	if(usAction == ACTION_NONE) //  || idTarget == ID_NONE
	{
		ASSERT(!"CMsgSyndicate::Create()");
		return false;
	}

	// init
	this->Init();

	m_pInfo->usAction	=usAction;
	m_pInfo->idTarget	=idTarget;
	m_pInfo->idFealty	=idFealty;
	// fill info now
	m_unMsgSize	=sizeof(MSG_Info);
	m_unMsgType	=_MSG_SYNDICATE;


	return true;
}

//////////////////////////////////////////////////////////////////////
BOOL	CMsgSyndicate::Create		(char* pMsgBuf, DWORD dwSize)
{
	if (!CNetMsg::Create(pMsgBuf, dwSize))
		return false;

	if(_MSG_SYNDICATE != this->GetType())
		return false;

	return true;
}

//////////////////////////////////////////////////////////////////////
void	CMsgSyndicate::Process		(CGameSocket* pSocket)
{
	// 检查消息格式

	// 参数检查
	ASSERT(pSocket);
	if(!pSocket)
		return;

	// 状态检查
	CUserPtr pUser = UserManager()->GetUser(this);
	IF_NOT(pUser)
		return;
	OBJID idUser = pUser->GetID();
	IF_NOT(idUser != ID_NONE)
		return;

	if(!pUser->IsAlive())
	{
		pUser->SendSysMsg(STR_DIE);
		return ;
	}

	char szName[_MAX_NAMESIZE] = "";
	if (m_StrPacker.GetStrAmount() > 0)
		m_StrPacker.GetString(0, szName, _MAX_NAMESIZE);

	switch(m_pInfo->usAction)
	{
//	case	ACTION_NONE = 0,			// 保留值
		// the operation of all users
	////////////////////////////////////////////////////////////////////////////////////////////////
	case SYN_DEMISE:
		{
			// 检查帮派
			OBJID idSyn = pUser->GetSynID();
			if(idSyn == ID_NONE)
				return ;
			CSynPtr pSyn = SynManager()->QuerySyndicate(idSyn);
			if(!pSyn)
				return ;
			// 检查权限
			if(pUser->GetSynRank() != RANK_LEADER)
				return ;

			// target syn
			CUser* pTarget = UserManager()->GetUser(szName);
			if(!pTarget)
			{
				pUser->SendSysMsg(STR_NOT_HERE);
				return ;
			}
			if((pTarget->GetID() == pUser->GetID()) || (pTarget->GetSynID() != pUser->GetSynID()))
				return ;
			
			int nLevel = 50;
			int nProffer = 10000;		
			if(pTarget->GetLev() < nLevel || pTarget->QuerySynProffer() < nProffer)
			{
				char szBuff[128];
				sprintf(szBuff,STR_LEVEL_NOT_ENOUGH,pTarget->GetName());
				pUser->SendSysMsg(szBuff);
				return ;
			}
			OBJID	idTargetSyn = pTarget->GetSynID();
			if(idTargetSyn == ID_NONE || idTargetSyn != idSyn)
				return ;

			pSyn->QueryModify()->Demise(pUser->GetID(),pUser->QuerySynAttr()->GetSynMemberLevel(), pTarget->GetID(), pTarget->GetName(), pTarget->QuerySynAttr()->GetSynMemberLevel(),pSyn->GetID());
			char szBuff[128];
			sprintf(szBuff,STR_SYN_DEMISE_SUCC,szName);
			pUser->SendSysMsg(szBuff);
			sprintf(szBuff,STR_SYN_DEMISE_CON,pSyn->GetStr(SYNDATA_NAME));
			pTarget->SendSysMsg(szBuff);
			sprintf(szBuff,STR_SYN_DEMISE_PROMPT,pTarget->GetName(),pSyn->GetStr(SYNDATA_NAME));
			pTarget->SendSysMsg(_TXTATR_SYNDICATE,szBuff);			
		}
		break;
	case SYN_SET_ASSISTANT://设置副团
		{
						// 检查帮派
			OBJID idSyn = pUser->GetSynID();
			if(idSyn == ID_NONE)
				return ;
			CSynPtr pSyn = SynManager()->QuerySyndicate(idSyn);
			if(!pSyn)
				return ;
			// 检查权限
			int nRank = pUser->GetSynRank();
			if(nRank != RANK_LEADER)
				return ;

			// check amount, temporary code.
			if(pUser->QuerySynAttr()->GetAssistantCount() >= MAX_ASSISTANTSIZE)
			{
				pUser->SendSysMsg(STR_SYN_PLACE_FULL);
				return ;
			}

			// target syn
			CUser* pTarget = UserManager()->GetUser(szName);
			if(!pTarget || (!pTarget->GetSyndicate()->IsSubSyn()))
			{
				pUser->SendSysMsg(STR_NOT_HERE);
				return ;
			}
			int nLevel = 40;
			int nProffer = 3000;			
			if(pTarget->GetLev() < nLevel && pTarget->QuerySynProffer() < nProffer)
			{
				char szBuff[128];
				sprintf(szBuff,STR_LEVEL_NOT_ENOUGH,pTarget->GetName());
				pUser->SendSysMsg(szBuff);
				pTarget->SendSysMsg(STR_SYN_SETSUBLEADER_ERR);
				return ;
			}
			OBJID	idTargetSyn = pTarget->GetSynID();
			if(idTargetSyn == ID_NONE || idTargetSyn != idSyn)
				return ;
			CSynPtr pSubSyn = SynManager()->QuerySyndicate(idTargetSyn);
			CHECK(pSubSyn);

			pSubSyn->QueryModify()->Demise(pSubSyn->GetInt(SYNDATA_LEADERID),0, pTarget->GetID(), pTarget->GetName(), pTarget->QuerySynAttr()->GetSynMemberLevel(),pSubSyn->GetID());
			

			char szBuff[128];
			sprintf(szBuff,STR_SYN_SETSUBLEADER_SUCC,szName,pTarget->GetSyndicate()->GetStr(SYNDATA_NAME));
			pUser->SendSysMsg(szBuff);
			sprintf(szBuff,STR_SYN_SETSUBLEADER_CON,pSyn->GetStr(SYNDATA_NAME));
			pTarget->SendSysMsg(szBuff);
			sprintf(szBuff,STR_SYN_SETSUBLEADER_PROMPT,pTarget->GetName(),pTarget->GetSyndicate()->GetStr(SYNDATA_NAME));
			pTarget->SendSysMsg(_TXTATR_SYNDICATE,szBuff);		
			
		}
		break;
	case SYN_SET_TEAMLEADER:
		{
			OBJID idSyn = pUser->GetSynID();
			if(idSyn == ID_NONE)
				return ;
			CSynPtr pSyn = SynManager()->QuerySyndicate(idSyn);
			if(!pSyn)
				return ;
			// 检查权限
			int nRank = pUser->GetSynRank();
			if(nRank != RANK_LEADER || nRank != RANK_SUBLEADER)
				return ;

			// check amount, temporary code.
			if(pUser->QuerySynAttr()->GetAssistantCount() >= MAX_ASSISTANTSIZE)
			{
				pUser->SendSysMsg(STR_SYN_PLACE_FULL);
				return ;
			}

			// target syn
			CUser* pTarget = UserManager()->GetUser(szName);
			if(!pTarget || (!pTarget->GetSyndicate()->IsSubSubSyn()))
			{
				pUser->SendSysMsg(STR_NOT_HERE);
				return ;
			}
			int nLevel = 30;
			int nProffer = 1000;			

			if(pTarget->GetLev() < nLevel && pTarget->QuerySynProffer() < nProffer )
			{				
				char szBuff[128];
				sprintf(szBuff,STR_LEVEL_NOT_ENOUGH,pTarget->GetName());
				pTarget->SendSysMsg(szBuff);
				return ;
			}

			OBJID	idTargetSyn = pTarget->GetSynID();
			if(idTargetSyn == ID_NONE || idTargetSyn == idSyn)
				return ;
			CSynPtr pSubSubSyn = SynManager()->QuerySyndicate(idTargetSyn);
			CHECK(pSubSubSyn);

			if(nRank == RANK_SUBLEADER)
			{
				if(idSyn != pSubSubSyn->GetInt(SYNDATA_FEALTY))
					return;
			}

			pSubSubSyn->QueryModify()->Demise(pSubSubSyn->GetInt(SYNDATA_LEADERID),0, pTarget->GetID(), pTarget->GetName(), pTarget->QuerySynAttr()->GetSynMemberLevel(),pSubSubSyn->GetID());
				
			char szBuff[128];
			sprintf(szBuff,STR_SYN_SETSUBSUBLEADER_SUCC,szName,pTarget->GetSyndicate()->GetStr(SYNDATA_NAME));
			pUser->SendSysMsg(szBuff);
			sprintf(szBuff,STR_SYN_SETSUBSUBLEADER_CON,pSyn->GetStr(SYNDATA_NAME));
			pTarget->SendSysMsg(szBuff);
			sprintf(szBuff,STR_SYN_SETSUBSUBLEADER_PROMPT,pTarget->GetName(),pTarget->GetSyndicate()->GetStr(SYNDATA_NAME));
			pTarget->SendSysMsg(_TXTATR_SYNDICATE,szBuff);		
		}
		break;
/*
	case SYN_CHANGE_SUBSUBNAME://改队名
		{
			OBJID idSyn = pUser->GetSynID();
			int	  nRank = pUser->GetSynRankShow();
			if(idSyn == ID_NONE || nRank != RANK_TEAMLEADER)
				return ;
			CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);

			if(!pSyn || strlen(pSyn->GetStr(SYNDATA_NAME)) <= 6 || !pSyn->IsSubSubSyn())
				return ;

			pSyn->SetNewSubName(szName);

			CMsgSyndicate	msg;
			if(msg.Create(SYN_CHANGE_SUBSUBNAME, pSyn->GetID(), szName))
				pSyn->BroadcastSynMsg(&msg);
			
		}
		break;
	case SYN_CHANGE_SUBNAME://改分团名
		{
			OBJID idSyn = pUser->GetSynID();
			int	  nRank = pUser->GetSynRankShow();
			if(idSyn == ID_NONE || nRank != RANK_SUBLEADER)
				return ;
			CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);

			if(!pSyn || strlen(pSyn->GetStr(SYNDATA_NAME)) <= 6 || !pSyn->IsSubSyn())
				return ;

			pSyn->SetNewSubName(szName);

			CMsgSyndicate	msg;
			if(msg.Create(SYN_CHANGE_SUBNAME,  pSyn->GetID(), szName))
				pSyn->BroadcastSynMsg(&msg);
		}
		break;
*/

	case SYNMEMBER_ASSIGN:			//帮派成员编制---
		{
			int nRank = pUser->GetSynRank();
			if(nRank!=RANK_LEADER || nRank!=RANK_SUBLEADER)
			{
				return;
			}
			CSyndicate * pSyn = pUser->GetSyndicate();
			CHECK(pSyn);

			OBJID idSynAssigned = m_pInfo->idTarget;
			CSyndicate * pSynAssigned = SynManager()->QuerySyndicate(idSynAssigned);
			CHECK(pSynAssigned);
			
			OBJID idUser = m_pInfo->idUser;
			CUser * pAssignUser = UserManager()->GetUser(idUser);
			CHECK(pAssignUser);
			
			CSyndicate * pCurSyn = pAssignUser->GetSyndicate();
			if(pCurSyn->GetID()==pSynAssigned->GetID())//不能为同一个帮派
				return;
			//---开始分配---begin			
			if(pAssignUser->QuerySynAttr()->ChangeSyn(pCurSyn, pSynAssigned))
			{
				//成功后,回应消息
				pCurSyn->BroadcastSynMsg(this);				
				pAssignUser->QuerySynAttr()->SynchroInfo(true);				
			}					
			//---开始分配---end			
			
		}
		break;
	case	APPLY_JOIN:					// 申请加入黑社会
		{
			// 查参数
			if(m_pInfo->idTarget == ID_NONE || m_pInfo->idTarget == idUser)
				return;

			CUserPtr pTarget = g_UserManager.GetUser(m_pInfo->idTarget);
			if(!pTarget)
				return ;

			// 检查帮派
			OBJID	idSyn	= pUser->GetSynID();
			int		nRank	= pUser->GetSynRank();
			OBJID	idTargetSyn = pTarget->GetSynID();
			int		nTargetRank	= pTarget->GetSynRank();

			//检查 级别
			if(idSyn != ID_NONE || idTargetSyn == ID_NONE || nTargetRank < RANK_SUBLEADER)
			{
				pUser->SendSysMsg(STR_SYN_APPLY_JOIN_FAILED);
				return;
			}

			
			// no money ?
			CSyndicate* pTargetSyn = SynManager()->QuerySyndicate(idTargetSyn);
			if (!pTargetSyn)
				return;

			if (pTargetSyn->GetInt(SYNDATA_MONEY) < SYN_MONEY_BASELINE)
			{
				pUser->SendSysMsg(STR_TOO_LOWER_SYN_MONEY);
				return;
			}

			// is full?
			/*
			if(pTarget->QuerySynAttr()->SumSynMember() > SYN_MEMBER_LIMIT)
			{
				pUser->SendSysMsg(STR_SYN_FULL);
				return;
			}
			*/

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

			nRank = RANK_NEWBIE;
			if( pUser->GetLev() < SYN_CONDITION_NEWBIE)
				nRank = RANK_RESERVED;
			
			pUser->QuerySynAttr()->JoinSyn(idTargetSyn, nRank);
			pUser->SendSysMsg(STR_JOIN_SYN_s, pTargetSyn->GetMasterSyn()->GetStr(SYNDATA_NAME));
		}
		break;
	////////////////////////////////////////////////////////////////////////////////////////////////
	case	INVITE_JOIN:				// 邀请加入黑社会
		{
			// 查参数
			if(m_pInfo->idTarget == ID_NONE || m_pInfo->idTarget == idUser)
				return;

			CUserPtr pTarget = g_UserManager.GetUser(m_pInfo->idTarget);
			if(!pTarget)
				return ;

			// 检查帮派
			OBJID	idSyn	= pUser->GetSynID();
			int		nRank	= pUser->GetSynRank();
			OBJID	idTargetSyn = pTarget->GetSynID();
			int		nTargetRank	= pTarget->GetSynRank();
			if(idSyn == ID_NONE || nRank < RANK_SUBLEADER || idTargetSyn != ID_NONE)
			{
				pUser->SendSysMsg(STR_JOIN_SYN_FAILED);
				return;
			}

			// no money ?
			CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);
			if (!pSyn)
				return;
			if(pSyn->GetInt(SYNDATA_MONEY) < SYN_MONEY_BASELINE)
			{
				pUser->SendSysMsg(STR_TOO_LOWER_SYN_MONEY);
				return;
			}

			/*
			// is full?
			if(pUser->QuerySynAttr()->SumSynMember() > SYN_MEMBER_LIMIT)
			{
				pUser->SendSysMsg(STR_SYN_FULL);
				return;
			}
			*/

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

			//级别低于20级 是预备团员
			nRank = RANK_NEWBIE;
			if( pTarget->GetLev() < SYN_CONDITION_NEWBIE)
				nRank = RANK_RESERVED;
			
			pTarget->QuerySynAttr()->JoinSyn(idSyn, nRank);
			pTarget->SendSysMsg(STR_JOIN_SYN_s, pSyn->GetMasterSyn()->GetStr(SYNDATA_NAME));
		}
		break;

		// the operation of members
	////////////////////////////////////////////////////////////////////////////////////////////////
	case	LEAVE_SYN:				// 脱离黑社会
		{
			// 检查帮派
			OBJID idSyn = pUser->GetSynID();
			if(idSyn == ID_NONE)
				return;

			// 检查帮主
			int	nRank = pUser->GetSynRank();
			if(nRank == RANK_LEADER)
			{
				pUser->SendSysMsg(STR_NO_DISBAND);
				return;
			}
			else 
			{
				CONST MINPROFFER_QUITSYN = 200; // 预备团员以上退出军团必须军团贡献度200以上
				if (nRank > RANK_RESERVED && pUser->QuerySynProffer() < MINPROFFER_QUITSYN)
				{
					pUser->SendSysMsg(STR_SYN_NOTENOUGH_PROFFER_LEAVE, pUser->QuerySynProffer());
					return;
				}
			}

			pUser->QuerySynAttr()->LeaveSyn();
			CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);
			if (pSyn)
			{
				char szMsg[256];
				sprintf(szMsg, STR_SYN_LEAVE_s, pUser->GetName());

				CMsgTalk	msg;
				IF_OK (msg.Create(SYSTEM_NAME, ALLUSERS_NAME, szMsg, NULL, 0xFFFFFF, _TXTATR_SYNDICATE))
					pSyn->BroadcastSynMsg(&msg);
			}
		}
		break;
	////////////////////////////////////////////////////////////////////////////////////////////////
	case KICKOUT_MEMBER_NOAGREE:
		{
			//////////////////////////////////////////////////////////////////////////
			char	szSQL[1024];
			sprintf(szSQL, "SELECT * FROM %s WHERE words LIKE 'ApplyDismiss%'", _TBL_LEAVEWORD);	
			IRecordset *pRes = Database()->CreateNewRecordset(szSQL);
			if(pRes)
			{

⌨️ 快捷键说明

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