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