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

📄 syndicate.cpp

📁 魔域源代码需要的可以学习一下真么这么麻烦啊
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	for(int i = 0; i < MAX_SYNENEMYSIZE; i++)
	{
		OBJID idTarget = GetInt((SYNDATA)(SYNDATA_ENEMY0+i));
		if(idTarget == pTargetSyn->GetID())
		{
			QueryModify()->SetData((SYNDATA)(SYNDATA_ENEMY0+i), ID_NONE, true);		// true: 必须save
			break;
		}
	}
	CMsgSyndicate	msg;
	IF_OK(msg.Create(CLEAR_ANTAGONIZE, pTargetSyn->GetID()))
		MapGroup(PID)->QueryIntraMsg()->SendNpcMsg(GetID(), &msg);

	return true;
}

//////////////////////////////////////////////////////////////////////@
// add huang 2004.1.7
bool CSyndicate::CheckDismissSyn()
{
	if(this->IsFallLevel())
		return true;
	else
		return false;
/*	bool bCheck = false;
	CMsgTalk msg;
	if(GetInt(SYNDATA_MONEY) < DISMISSSYN_MONEY_LIMIT)
	{
		IF_OK(msg.Create(_TXTATR_SYNDICATE, STR_SYN_MONEY_LIMIT))
			BroadcastSynMsg(&msg);
		bCheck = true;
	}
	if(GetInt(SYNDATA_AMOUNT) < DISMISSSYN_AMOUNT_LIMIT)
	{
		IF_OK(msg.Create(_TXTATR_SYNDICATE, STR_SYN_AMOUNT_LIMIT))
			BroadcastSynMsg(&msg);
		bCheck = true;
	}
	if(!bCheck)
		return false;
	return true;
	*/
}

bool CSyndicate::CheckDismissTime()
{
	time_t tTime = time(NULL);
	if(GetInt(SYNDATA_DISMISS_TIME) < tTime - DISMISSSYN_TIME_LIMIT)
		return true;
	return false;
}

bool CSyndicate::AutoDismissSyn()
{
	IF_OK(GetInt(SYNDATA_FEALTY) == 0)
	{
		if(CheckDismissSyn())
		{
			if(GetInt(SYNDATA_DISMISS_TIME))
			{
				if(CheckDismissTime())
				{
					//对帮派降级
					if(this->FallLevel())
					{
						return true;
					}
				/*	CMsgSyndicate	msg;
					IF_OK(msg.Create(DESTROY_SYN, this->GetID()))
						UserManager()->BroadcastMsg(&msg);		
					IF_OK(SynManager()->QueryModify()->DestroySyndicate(this->GetID()))
						return true;
				*/
				}
			}
			else
			{
				int tTime = time(NULL);
				QueryModify()->SetData(SYNDATA_DISMISS_TIME,tTime,true);
			}
		}
		else
		{
			QueryModify()->SetData(SYNDATA_DISMISS_TIME,0,true);
		}
	}
	return false;
}

int CSyndicate::GetMoney()
{
	return GetInt(SYNDATA_MONEY);
}

int CSyndicate::GetSubSynNum()
{
	int nNum = 0;

	for (int i=0; i<SynManager()->QuerySynSet()->GetAmount(); i++)
	{
		CSyndicate* pSyn = SynManager()->QuerySynSet()->GetObjByIndex(i);
		if (pSyn && pSyn->GetInt(SYNDATA_FEALTY) == this->GetID())
			++nNum;
	}
	return nNum;

//	CSynSet::Iterator pSyn = SynManager()->QuerySynSet()->NewEnum();
//	while(pSyn.Next())
//	{
//		if(pSyn && pSyn->GetInt(SYNDATA_FEALTY) == GetID())
//			nNum ++;
//	}
//	return nNum;
}
//副帮主申请开除会员
bool CSyndicate::ApplyKickoutMember(CUserPtr pLeader, CUserPtr pTarget)
{
	DEBUG_TRY

	OBJID idSynLeader=pLeader->GetSynID(),idTarget=pLeader->GetSynID();
	if(idSynLeader!=idTarget)
		return false;
	
	int nRank = pLeader->GetSynRank();

	if(nRank!=RANK_SUBLEADER||nRank!=RANK_TEAMLEADER)
		return false;
	
	CSyndicate * pSyn = pLeader->GetSyndicate();
	if(!pSyn)
		return false;

	char szWords[256];
	memset(szWords,0,sizeof(szWords));
	
	//特定格式的留言(开除会员的申请)
	sprintf(szWords,"ApplyDismiss %d %s %s",pSyn->GetID(),pLeader->GetName(),pTarget->GetName() );
	//插入留言
	LeaveWord()->InsertWords(pLeader->GetName(),pSyn->GetStr(SYNDATA_LEADERNAME),szWords);
	
	DEBUG_CATCH("bool CSyndicate::ApplyKickoutMember(CUserPtr pLeader, CUserPtr pTarget)")
	return true;

}
//帮派每周会在统一的地方发放本周军团利润的一部分作为成员所得
/*
CUserPtr pUser 帮主
DWORD dwBonus 奖金
*/
bool CSyndicate::AllotBonusForMember(CUserPtr pUser, DWORD dwBonus)
{
	//得到帮派基金总和,值不能超过军团基金的50%。	
	if(dwBonus >=(this->GetMoney()/2))
	{
		return false;
	}	

	OBJID idMap = pUser->GetMapID();
	OBJID idSyn = pUser->GetSynID();

	DWORD dwProfferSum=0, dwProffer=0, dwLevel=0, dwMoney=0;
	

	typedef std::vector<CUser*>		USER_SET;
	USER_SET	setUser;
	//得到在场的所有的帮派成员的增量贡献值
	CUserManager::Iterator pCurUser = UserManager()->NewEnum();
	while(pCurUser.Next())
	{
		if(pCurUser && pCurUser->GetMapID()==idMap && pCurUser->IsMemberOfSyn(idSyn))
		{
			setUser.push_back(pCurUser);
			dwProfferSum = ::AddToTop(pCurUser->QuerySynAttr()->GetProfferInc(), dwProfferSum, SYNPROFFER_LIMIT);			
		}
	}

	if(!dwProfferSum)
		return false;	

	// 先扣钱
	this->QueryModify()->AddData(SYNDATA_MONEY, -1*dwBonus);

	//给每位在场的帮派成员根据他们的贡献值分配奖金
	for (int i=0; i<setUser.size(); i++)
	{
		CUser* pUser = setUser[i];
		IF_NOT (pUser)
			continue;

		{
			dwProffer	= pUser->QuerySynAttr()->GetProfferInc();
			dwLevel		= pUser->QuerySynAttr()->GetSynMemberLevel();

			int nRank	= pUser->GetSynRankShow();
			if(nRank == RANK_TEAMLEADER)
				nRank = 3;
			else if(nRank == RANK_SUBLEADER || nRank==RANK_LEADER)
				nRank = 5;
			else
				nRank = 0;				
			
			dwLevel = __max(dwLevel, nRank);
			
			const int	ADDITION_PERCENT_PER_LEVEL	= 5;
			dwMoney = ((__int64)dwProffer * (100 + dwLevel * ADDITION_PERCENT_PER_LEVEL) * (__int64)dwBonus) / 100 / dwProfferSum;
//				dwMoney = ::CutRange(MulDiv(dwProffer, (1 + MulDiv(dwLevel,nPercent,100))* dwBonus, dwProfferSum), 0, SYNMONEY_LIMIT);
			pUser->AddMoney(dwMoney);				
			pUser->QuerySynAttr()->ResetSynProfferInc();
		}
	}
	return true;
}

//是否可以创建分队
bool CSyndicate::IfCanCreateSubSubSyn()
{
	int nNum = this->GetSubSubSynNum();
	if(nNum<0)
		return false;
	
	int nSynRank = GetInt(SYNDATA_RANK);
	
	switch(nSynRank)
	{
	case SYNRANK_ONE:
		{		
			return false;
		}
		break;
	case SYNRANK_TWO:
		{
			if(nNum>=2)
				return false;			
		}
		break;
	case SYNRANK_THREE:
		{
			if(nNum>=2)
				return false;			
		}
		break;
	case SYNRANK_FOUR:
		{
			if(nNum>=3)
				return false;			
		}
		break;
		
	default :
		return false;
		break;
	}
	
	return true;
}
//得到分团的分队个数
int CSyndicate::GetSubSubSynNum()
{	
	
	if(GetInt(SYNDATA_FEALTY) == ID_NONE) //必须是分团才可以调用这个函数
		return -1;
	
	int nNum = 0;
	
	CSynSet::Iterator pSyn = SynManager()->QuerySynSet()->NewEnum();
	while(pSyn.Next())
	{
		if(pSyn && pSyn->GetInt(SYNDATA_FEALTY) == GetID())
		{
			//是分团的分队
			nNum ++;
		}
	}
	return nNum;	
}
//是否是 分团
bool CSyndicate::IsSubSyn()
{
	if(this->IsMasterSyn())
		return false;

	OBJID idFealtySyn = GetInt(SYNDATA_FEALTY);

	CSyndicate * pFealtySyn = SynManager()->QuerySyndicate(idFealtySyn);

	if(pFealtySyn->IsMasterSyn())
		return true;
	else
		return false;

}
//是否是分队
bool CSyndicate::IsSubSubSyn()
{
	if(this->IsMasterSyn())
		return false;
	
	OBJID idFealtySyn = GetInt(SYNDATA_FEALTY);

	CSyndicate * pFealtySyn = SynManager()->QuerySyndicate(idFealtySyn);

	if(pFealtySyn->IsMasterSyn())
		return false;
	else
		return true;
}
//是否对帮派进行降级
bool CSyndicate::IsFallLevel()
{
	if (!IsMasterSyn()) 
	{
		return false;
	}
	int nSynRank = GetInt(SYNDATA_RANK);
	int nMemSum = this->GetSynAmount();
	int nLimit  =0;
	//一级军团不降级
	switch(nSynRank)
	{
	case SYNRANK_TWO:
		{
			nLimit = MulDiv(SYNMEMSUM_LOWERLIMIT_TWO, 80, 100);
			if(nMemSum <= nLimit)
				return true;			
		}
		break;
	case SYNRANK_THREE:
		{
			nLimit = MulDiv(SYNMEMSUM_LOWERLIMIT_THREE, 80, 100);
			if(nMemSum <= nLimit)
				return true;			
		}
		break;
	case SYNRANK_FOUR:
		{
			nLimit = MulDiv(SYNMEMSUM_LOWERLIMIT_FOUR, 80, 100);
			if(nMemSum <= nLimit)
				return true;			
		}
		break;		
	default :	
		break;
	}
	return false;
}
//对帮派进行降级,调用这个函数前先检查是否允许降级
bool CSyndicate::FallLevel()
{
	if(!this->IsMasterSyn())
		return false;
	if(GetInt(SYNDATA_RANK)==SYNRANK_ONE)
	{
		SynManager()->QueryModify()->DestroySyndicate(GetID());
		return true;
	}
	//---将所有子帮派的成员合并到 主帮派中
	for(int i = 0; i < SynManager()->QuerySynSet()->GetAmount(); i++)  
	{
		CSyndicate* pSyn = SynManager()->QuerySynSet()->GetObjByIndex(i);
		if(pSyn && pSyn->GetInt(SYNDATA_FEALTY) == this->GetID())
		{
			SynManager()->QueryModify()->CombineSyndicate(pSyn->GetID(),this->GetID());			
		}
	}

	//降级
	this->QueryModify()->AddData(SYNDATA_RANK,-SYNRANK_ONE,true);

	return true;

}

OBJID CSyndicate::GetMasterSynID()
{
	if(GetInt(SYNDATA_FEALTY) != ID_NONE)
	{
		CSyndicate* pFealtySyn= SynManager()->QuerySyndicate(GetInt(SYNDATA_FEALTY));

		IF_OK(pFealtySyn)
		{
			return pFealtySyn->GetMasterSynID();
		}
	}

	return GetID();
}

void CSyndicate::SynchroInfo()
{
	CSyndicate* pMaster = this->GetMasterSyn();
	CHECK(pMaster);	

	CUserManager::Iterator pUser = UserManager()->NewEnum();
	while(pUser.Next())
	{
		if(pUser && pUser->GetSynID() == pMaster->GetID())				
		{
			pUser->QuerySynAttr()->SendInfoToClient();
		}
	}

	{
		OBJID idMaster = pMaster->GetID();
		CHECK(idMaster != ID_NONE);
		for(int i = 0; i < SynManager()->QuerySynSet()->GetAmount(); i++)
		{
			CSynPtr pSyn = SynManager()->QuerySynSet()->GetObjByIndex(i);
			if(pSyn && pSyn->GetInt(SYNDATA_FEALTY) == idMaster)
			{
				//分队-----begin
				for(int j = 0; j < SynManager()->QuerySynSet()->GetAmount(); j++)  
				{
					CSyndicate* pSynTeam = SynManager()->QuerySynSet()->GetObjByIndex(j);
					if(pSynTeam && pSynTeam->GetInt(SYNDATA_FEALTY) == pSyn->GetID())
					{
						CUserManager::Iterator pUser = UserManager()->NewEnum();
						while(pUser.Next())
						{
							if(pUser && pUser->GetSynID() == pSynTeam->GetID())				
							{
								pUser->QuerySynAttr()->SendInfoToClient();
							}
						}
					}						
				}
				//分队-----end				
				
				CUserManager::Iterator pUser = UserManager()->NewEnum();
				while(pUser.Next())
				{
					if(pUser && pUser->GetSynID() == pSyn->GetID())				
					{
						pUser->QuerySynAttr()->SendInfoToClient();
					}
				}
			}
		}
	}
}

⌨️ 快捷键说明

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