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