📄 syndicate.cpp
字号:
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 + -