📄 synattr.cpp
字号:
tmE =*pTmDetected;
tmE.tm_mon += 2;
time_t tE = mktime(&tmE);
//与当前时间进行比较
time_t tCurTime = time(NULL);
if(tCurTime >= tE) //若大于或等于2个月
{
unsigned int uiTimeOnline = m_pData->GetInt(SYNATTRDATA_TIMEONLINE);
if (m_pUser->GetSynRank()==RANK_RESERVED)
{
if(uiTimeOnline < TIMEONLINE_FIRSTJOIN) //连续2个月连续在线时间没有
{
//预备成员被开除
this->Betray();
return true;
}
else
{
//重新设置在线时间为0
m_pData->SetInt(SYNATTRDATA_TIMEONLINE,0);
m_pData->SetInt(SYNATTRDATA_TIMEDETECTED,tCurTime);
m_pData->Update();
return false;
}
}
else
{
if(uiTimeOnline < TIMEONLINE_FIRSTJOIN/2) //连续2个月连续在线时间没有
{
this->Betray();
return true;
}
else
{
//重新设置在线时间为0
m_pData->SetInt(SYNATTRDATA_TIMEONLINE,0);
m_pData->SetInt(SYNATTRDATA_TIMEDETECTED,tCurTime);
m_pData->Update();
return false;
}
}
}
DEBUG_CATCH("bool CSynAttr::IsFullTimeOnline(int iMonth, int iDay)")
return true;//未到检测时间 返回TRUE
}
//背叛帮派
void CSynAttr::Betray()
{
DEBUG_TRY
//
if (m_pUser->GetSynRank()==RANK_RESERVED)
{
OBJID idOldSyn = GetSynID();
//---jinggy---从帮派中删除此成员---begin
if(m_pData)
{
m_pData->DeleteRecord();
m_pData->Release();
m_pData = NULL;
}
else
return;
DelMemberList(idOldSyn, m_pUser->GetName());
//---jinggy---从帮派中删除此成员---end
}
//若没有
int nDecProffer =0 ;
switch(m_pUser->GetSynRank()) {
case RANK_NEWBIE:
{
nDecProffer = 200;
this->DecProffer(nDecProffer);
this->SetRank(RANK_NEWBIE);
}
break;
case RANK_SUBLEADER:
{
nDecProffer = 200;
this->DecProffer(nDecProffer);
this->SetRank(RANK_NEWBIE);
}
break;
case RANK_TEAMLEADER:
{
nDecProffer = 500;
this->DecProffer(nDecProffer);
this->SetRank(RANK_NEWBIE);
}
break;
default:
break;
}
SynchroInfo();
/*
CSyndicate* pSyn = SynManager()->QuerySyndicate(idOldSyn);
IF_OK(pSyn && pSyn->GetInt(SYNDATA_AMOUNT) > 0)
{
pSyn->QueryModify()->AddData(SYNDATA_AMOUNT, -1);
pSyn->QueryModify()->AddData(SYNDATA_REPUTE, -1*REPUTE_PER_MEMBER_OUT); // 主动脱离帮派扣帮派的声望
pSyn->QueryModify()->AddData(SYNDATA_MONEY, -1*MONEY_PER_MEMBER_OUT); // 主动脱离帮派减少的基金
//---jinggy---减少帮主和副帮主的贡献值---begin
CSynAttrData* pData = CSynAttrData::CreateNew();
IF_NOT(pData)
{
return ;
}
//帮主 的贡献值减2000
char szSQL[1024];
sprintf(szSQL, "SELECT * FROM %s WHERE syn_id=%d AND rank=%d LIMIT 1",\
_TBL_SYNATTR,idOldSyn,RANK_LEADER);
IRecordset* pRes = Database()->CreateNewRecordset(szSQL);
IF_NOT(pRes)
{
pData->Release();
return;
}
IF_NOT(pData->Create(pRes))
{
pData->Release();
pRes->Release();
return;
}
pRes->Release();
int nProffer = pData->GetInt(SYNATTRDATA_PROFFER) - 2000;
pData->SetInt(SYNATTRDATA_PROFFER,nProffer);
pData->Update();
pData->Release();
//副帮主 的贡献值减1000
sprintf(szSQL, "SELECT * FROM %s WHERE syn_id=%d AND rank=%d",\
_TBL_SYNATTR,idOldSyn,RANK_SUBLEADER);
pRes = Database()->CreateNewRecordset(szSQL);
IF_NOT(pRes)
{
return;
}
for(int i = 0; i < pRes->RecordCount(); i++)
{
pData = CSynAttrData::CreateNew();
IF_NOT(pData)
{
pRes->Release();
return ;
}
IF_NOT(pData->Create(pRes))
{
pData->Release();
pRes->Release();
return;
}
nProffer = pData->GetInt(SYNATTRDATA_PROFFER) - 1000;
pData->SetInt(SYNATTRDATA_PROFFER,nProffer);
pData->Update();
pData->Release();
pRes->MoveNext();
}
pRes->Release();
}
//---jinggy---减少帮主和副帮主的贡献值---end
*/
DEBUG_CATCH("void CSynAttr::Betray()")
}
//当帮主分配了贡献值后,需要重新设置 成员的 贡献值的增量
void CSynAttr::ResetSynProfferInc()
{
m_pData->SetInt(SYNATTRDATA_PROFFERINC, 0);
}
/*
//添加帮派声望增量
void CSynAttr::AddReputeInc(int nReputeInc)
{
//每帮军团增加10点军团声望,玩家军团贡献增加1点
if(nReputeInc>=10)
{
int nProffer = nReputeInc/10;
this->AddProffer(nProffer);
return;
}
}
*/
/*
//添加帮派基金增量
void CSynAttr::AddMoneyInc(int nMoneyInc)
{
//每帮军团赚取100军团基金(不包括捐献军团基金),军团贡献增加1点。(这里包括招收新玩家)。
DWORD dwMoneySum = nMoneyInc;
if(dwMoneySum/=100)
{
this->AddProffer(dwMoneySum);return;
}
}
*/
/*
CSyndicate* CSynAttr::GetMasterSyn()
{
if(GetSynID() != ID_NONE)
{
CSynPtr pSyn = SynManager()->QuerySyndicate(GetSynID());
IF_OK(pSyn)
{
if(pSyn->GetInt(SYNDATA_FEALTY) != ID_NONE)
{
OBJID idMaster = pSyn->GetInt(SYNDATA_FEALTY);
CSynPtr pSyn = SynManager()->QuerySyndicate(idMaster);
if(pSyn)
return pSyn;
}
else
return pSyn;
}
}
return NULL;
}*/
static int PROFFER_TIME_DIV[] = {10, 20, 40};
// 给领导分贡献度
void CSynAttr::AddProfferToLeader(int nProffer)
{
int nTime = 0;
CSyndicate* pSyn = QuerySyndicate();
if (pSyn)
{
CUser* pUser = NULL;
if (pSyn->GetInt(SYNDATA_LEADERID) != ID_NONE
&& pSyn->GetInt(SYNDATA_LEADERID) != m_pUser->GetID())
{
// 如果本人不是本帮派帮主,且存在帮主,直接找帮主
CUser* pUser = UserManager()->GetUser(pSyn->GetInt(SYNDATA_LEADERID));
if (pUser && pUser->QuerySynAttr())
{
CHECK(nTime<3);
int nAddProffer = nProffer/PROFFER_TIME_DIV[nTime];
pUser->QuerySynAttr()->AddProffer(nAddProffer);
}
++nTime; // 即使帮主不在线,也当作分享了贡献度
}
// 向上寻找帮主
while (!pSyn->IsMasterSyn())
{
pSyn = SynManager()->QuerySyndicate(pSyn->GetInt(SYNDATA_FEALTY));
if (pSyn && pSyn->GetInt(SYNDATA_LEADERID) != ID_NONE)
{
// 如果存在帮主,寻找帮主并分享贡献度
pUser = UserManager()->GetUser(pSyn->GetInt(SYNDATA_LEADERID));
if (pUser)
{
CHECK(nTime<3);
int nAddProffer = nProffer/PROFFER_TIME_DIV[nTime];
pUser->QuerySynAttr()->AddProffer(nAddProffer);
}
++nTime; // 即使帮主不在线,也当作分享了贡献度
}
}
}
}
//改变帮派的成员的等级
bool CSynAttr::SetSynMemberLevel(int nLevel)
{
if(m_pData)
{
m_pData->SetInt(SYNATTRDATA_MEMBERLEVEL,nLevel);
return true;
}
return false;
}
int CSynAttr::GetSynMemberLevel()
{
if(m_pData)
return m_pData->GetInt(SYNATTRDATA_MEMBERLEVEL);
return -1;
}
bool CSynAttr::CreateSubSubSyn(LPCTSTR szName, int nLevel,int nProffer, int nMoney, int nMoneyLeave)
{
/* CHECKF(m_pData);
if(m_pUser->GetLev() < nLevel)
{
m_pUser->SendSysMsg(STR_NOT_ENOUGH_LEV, nLevel);
return false;
}
if (m_pUser->QuerySynProffer()<nProffer)
{
m_pUser->SendSysMsg(STR_SYN_SETSUBLEADER_NOPROFFER,nProffer);
return false;
}
CSyndicate* pFealty = SynManager()->QuerySyndicate(GetSynID());
CHECKF(pFealty);
if(pFealty->GetInt(SYNDATA_MONEY) < nMoney)
{
m_pUser->SendSysMsg(STR_GUILD_FUND_NOT_ENOUGH, nMoney);
return false;
}
CreateSyndicateInfo info;
info.idSyn = ID_NONE;
SafeCopy(info.szName, szName, _MAX_NAMESIZE);
SafeCopy(info.szTenet, DEFAULT_TENET, MAX_TENETSIZE);
SafeCopy(info.szLeaderTitle, DEFAULT_LEADERTITLE, _MAX_NAMESIZE);
SafeCopy(info.szMemberTitle, DEFAULT_MEMBERTITLE, _MAX_NAMESIZE);
info.idLeader = m_pUser->GetID();
SafeCopy(info.szLeader, m_pUser->GetName(), _MAX_NAMESIZE);
info.nMoney = nMoneyLeave;
info.idFealty = GetSynID();
OBJID idNewSyn = SynManager()->QueryModify()->CreateSyndicate(&info);
if(idNewSyn == ID_NONE)
{
m_pUser->SendSysMsg(STR_FORBIDDEN_GUILD_NAME);
return false;
}
// update new leader
DelMemberList(GetSynID(), m_pUser->GetName());
AddMemberList(idNewSyn, m_pUser->GetName(), m_pUser->GetLev());
// m_pData->SetInt(SYNATTRDATA_SYNID, idNewSyn);
// m_pData->SetInt(SYNATTRDATA_RANK, RANK_LEADER);
// m_pData->Update();
// update later SynchroInfo();
// update syndicate
pFealty->QueryModify()->AddData(SYNDATA_MONEY, -1*nMoney);
pFealty->QueryModify()->AddData(SYNDATA_AMOUNT, -1);
// synchro relation
CMsgSyndicate msg;
IF_OK(msg.Create(SET_SUBSUBSYN,pSyn->GetID(),pSynTeam->GetID()))
pFealty->BroadcastSynMsg(&msg);
*/
return true;
}
OBJID CSynAttr::CreateSubSyn(OBJID idFealty, const char* pszName)
{
if (ID_NONE == idFealty)
return ID_NONE;
CSyndicate* pFealty = SynManager()->QuerySyndicate(idFealty);
CHECKF(pFealty);
CreateSyndicateInfo info;
info.idSyn = ID_NONE;
SafeCopy(info.szName, pszName, _MAX_NAMESIZE);
SafeCopy(info.szTenet, DEFAULT_TENET, MAX_TENETSIZE);
SafeCopy(info.szLeaderTitle, DEFAULT_LEADERTITLE, _MAX_NAMESIZE);
SafeCopy(info.szMemberTitle, DEFAULT_MEMBERTITLE, _MAX_NAMESIZE);
info.idLeader = ID_NONE;
SafeCopy(info.szLeader, "", _MAX_NAMESIZE);
info.nMoney = 0;
info.idFealty = idFealty;
info.nSynFlag = 1;
OBJID idNewSyn = SynManager()->QueryModify()->CreateSyndicate(&info);
if(idNewSyn == ID_NONE)
{
m_pUser->SendSysMsg(STR_FORBIDDEN_GUILD_NAME);
return ID_NONE;
}
// synchro relation
CMsgSyndicate msg;
IF_OK(msg.Create(SET_SYN, idNewSyn, idFealty))
pFealty->BroadcastSynMsg(&msg);
return idNewSyn;
}
OBJID CSynAttr::CreateSubSubSyn(OBJID idFealty,const char szName[])
{
IF_NOT(idFealty)
return ID_NONE;
CreateSyndicateInfo info;
info.idSyn = ID_NONE;
SafeCopy(info.szName, szName, _MAX_NAMESIZE);
SafeCopy(info.szTenet, DEFAULT_TENET, MAX_TENETSIZE);
SafeCopy(info.szLeaderTitle, DEFAULT_LEADERTITLE, _MAX_NAMESIZE);
SafeCopy(info.szMemberTitle, DEFAULT_MEMBERTITLE, _MAX_NAMESIZE);
info.idLeader = NULL;
SafeCopy(info.szLeader, "", _MAX_NAMESIZE);
info.nMoney = 0;
info.idFealty = idFealty;
info.nSynFlag = 2;
OBJID idNewSyn = SynManager()->QueryModify()->CreateSyndicate(&info);
if(idNewSyn == ID_NONE)
{
m_pUser->SendSysMsg(STR_FORBIDDEN_GUILD_NAME);
return ID_NONE;
}
CSyndicate* pFealty = SynManager()->QuerySyndicate(idFealty);
CHECKF(pFealty);
// synchro relation
CMsgSyndicate msg;
IF_OK(msg.Create(SET_SYN, idNewSyn, idFealty))
pFealty->BroadcastSynMsg(&msg);
return idNewSyn;
}
int CSynAttr::GetSynRank()
{
if(GetSynID() != ID_NONE)
return m_pData->GetInt(SYNATTRDATA_RANK);
else
return RANK_NONE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -