#include "StdAfx.h" #include "CStaticCountSystem.h" bool CStaticCountSystem::Initialize(void* data, size_t size) { isInitData = false; isDataModify = false; m_StaticCounts.clear(); return true; } void CStaticCountSystem::OnEnterGame() { } void CStaticCountSystem::DailyRefresh() { if(!isInitData || !m_pEntity) { return; } ClearDailyStaticCount(); ClearWeekStaticCount(); ClearMonthStaticCount(); } LONGLONG CStaticCountSystem::GetStaticCount(INT_PTR nStaticType) { if(!m_pEntity) return 0; std::map::iterator it = m_StaticCounts.find(nStaticType); if(it != m_StaticCounts.end()) { return it->second; } return 0; } void CStaticCountSystem::SetStaticCount(INT_PTR nStaticType, INT_PTR nValue) { if(!m_pEntity) return; std::map::iterator it = m_StaticCounts.find(nStaticType); if(it != m_StaticCounts.end()) { it->second = nValue; } else { // m_StaticCounts[nStaticType] = nValue; m_StaticCounts.insert(std::make_pair(nStaticType, nValue)); } //set里面用不到战令币 ,净化基础函数,业务逻辑在上层函数做 // if(nStaticType == eSTATIC_TYPE_ORDERWARD_MONEY) // { // if(m_StaticCounts[nStaticType] < 0) // { // m_StaticCounts[nStaticType] = 0; // } // ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_ZL_MONEY, m_StaticCounts[nStaticType] ); // } isDataModify = true; } void CStaticCountSystem::AddStaticCount(INT_PTR nStaticType, INT_PTR nValue) { if(!m_pEntity) return; if(nStaticType == eSTATIC_TYPE_DIMENSIONAL_KEY) { OnAddDimensionalKey(nValue); return; } if(nStaticType == eSTATIC_TYPE_ORDERWARD_MONEY) { OnAddOrderWardMoney(nValue); return; } std::map::iterator it = m_StaticCounts.find(nStaticType); if(it != m_StaticCounts.end()) { it->second += nValue; } else { // m_StaticCounts[nStaticType] = nValue; m_StaticCounts.insert(std::make_pair(nStaticType, nValue)); } //set里面用不到战令币 ,净化基础函数,业务逻辑在上层函数做 // if(nStaticType == eSTATIC_TYPE_ORDERWARD_MONEY) // { // if(m_StaticCounts[nStaticType] < 0) // { // m_StaticCounts[nStaticType] = 0; // } // ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_ZL_MONEY, m_StaticCounts[nStaticType] ); // } // else // if(nStaticType == eSTATIC_TYPE_DIMENSIONAL_KEY) //次元钥匙 // { // if(m_StaticCounts[nStaticType] < 0) // { // m_StaticCounts[nStaticType] = 0; // } // ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_DIMENSIONALKEY, m_StaticCounts[nStaticType] ); // } isDataModify = true; } void CStaticCountSystem::OnDbRetData(INT_PTR nCmd, INT_PTR nErrorCode, CDataPacketReader& packet) { if(!m_pEntity) return; if(nCmd == jxInterSrvComm::DbServerProto::dcLoadStaticCount && nErrorCode == jxInterSrvComm::DbServerProto::reSucc) //返回数据 { int nCount = 0; packet >> nCount; m_StaticCounts.clear(); for(int i = 0; i < nCount; i++) { int nType = 0; int nValue = 0; packet >> nType >> nValue; m_StaticCounts[nType] = nValue; if(nType == eSTATIC_TYPE_ORDERWARD_MONEY) { if(m_StaticCounts[nType] < 0) { m_StaticCounts[nType] = 0; } ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_ZL_MONEY, m_StaticCounts[nType] ); } } } isInitData = true; ((CActor*)m_pEntity)->OnFinishOneInitStep(eMSG_USR_LOGIN_DATA_STATICCOUNT_SYSTEM); //完成一个步骤 } void CStaticCountSystem::SaveToDb() { if(!m_pEntity) return; if(!isInitData) return; if(!isDataModify) return; CDataPacket& dataPacket = GetLogicServer()->GetDbClient()->allocProtoPacket(jxInterSrvComm::DbServerProto::dcSaveStaticCount); dataPacket <<((CActor*)m_pEntity)->GetRawServerIndex() << GetLogicServer()->GetServerIndex(); dataPacket <<(unsigned int)m_pEntity->GetId(); //玩家id size_t count = m_StaticCounts.size(); dataPacket <<(int)count; std::map::iterator it = m_StaticCounts.begin(); for(; it != m_StaticCounts.end(); it++) { dataPacket <<(int)(it->first); dataPacket <<(int)(it->second); } GetLogicServer()->GetDbClient()->flushProtoPacket(dataPacket); isDataModify = false; } void CStaticCountSystem::ProcessNetData(INT_PTR nCmd, CDataPacketReader& packet) { switch (nCmd) { case enStaticCountSystemcExchangeCount: { SendCircleExchangeCount(); break; } case enStaticCountSystemcUpCircle: { UpCircle(); break; } case enStaticCountSystemcExchangeSoul: { ExchangeCircleSoul(packet); break; } case enStaticCountSystemcMeridiansUPLv: { UpMeridiansLv(); break; } default: break; } } void CStaticCountSystem::SendCircleExchangeCount() { if(!m_pEntity) return; CActor * pActor = (CActor*)m_pEntity; const CIRCLECFG& cfg = GetLogicServer()->GetDataProvider()->GetMiscConfig().m_CircleLevelConfig; int nDay = GetLogicServer()->GetDaysSinceOpenServer(); if(!pActor->CheckLevel(cfg.nOpenLv, 0)) { pActor->SendTipmsgFormatWithId(tmCircleLevelLimit, tstUI,cfg.nOpenLv); } if(nDay < cfg.nOpenServerDay) { pActor->SendTipmsgFormatWithId(tmCircleOpenServerDayLimit, tstUI, cfg.nOpenServerDay); return; } CActorPacket ap; CDataPacket& dataPack = ((CActor*)m_pEntity)->AllocPacket(ap); dataPack << (BYTE)enStaticCountSystemID <<(BYTE)enStaticCountSystemExchangeCount; int nCount = cfg.m_lExSoul.count; dataPack << (BYTE)nCount; for(int i = 0; i < nCount; i++) { EXCHANGECIRCLE& dfCfg = cfg.m_lExSoul[i]; int nValue = GetStaticCount(dfCfg.nStaticType); dataPack << (BYTE)dfCfg.nType << (BYTE)nValue; } ap.flush(); } void CStaticCountSystem::ExchangeCircleSoul(CDataPacketReader& packet) { if(!m_pEntity) return; BYTE nType = 0; packet >> nType; CActor* pActor = (CActor*)m_pEntity; const CIRCLECFG& cfg = GetLogicServer()->GetDataProvider()->GetMiscConfig().m_CircleLevelConfig; if(nType > cfg.m_lExSoul.count) { pActor->SendTipmsgFormatWithId( tmDataError, tstUI); return; } const EXCHANGECIRCLE& dhCfg = cfg.m_lExSoul[nType-1]; int nNum = GetStaticCount(dhCfg.nStaticType); if(nNum >= dhCfg.nUseLimit) { pActor->SendTipmsgFormatWithId(tmCircleLimtiTimes, tstUI); return; } unsigned int nSoul = pActor->GetProperty(PROP_ACTOR_CIRCLE_SOUL); unsigned int nAdd = 0; if(nType == 1)//转生丹 { int nItemid = 259; CUserBag& bag = pActor->GetBagSystem(); CUserItem* pUserItem = bag.FindItem(nItemid); if(!pUserItem || pUserItem->wCount < dhCfg.nCost) { pActor->SendTipmsgFormatWithId(tmItemNotEnough,tstUI); return; } bag.DeleteItem(pUserItem,dhCfg.nCost,"self_del_item",GameLog::Log_CircleEx,true); } else if(nType == 2)//经验 { Uint64 nActorExp = pActor->GetProperty(PROP_ACTOR_EXP); if(nActorExp < dhCfg.nCost) { pActor->SendTipmsgFormatWithId(tmExpLimited,tstUI); return; } nActorExp -= dhCfg.nCost; if(nActorExp < 0) return; pActor->SetProperty(PROP_ACTOR_EXP,nActorExp); }else if(nType == 3)//回收积分 { unsigned int nPoints = pActor->GetProperty(PROP_ACTOR_RECYCLE_POINTS); if(nPoints < dhCfg.nCost) { pActor->SendTipmsgFormatWithId(tmPointNotEnough,tstUI); return; } nPoints -= dhCfg.nCost; if(nPoints < 0) return; pActor->SetProperty(PROP_ACTOR_RECYCLE_POINTS,nPoints); } else { pActor->SendTipmsgFormatWithId(tmDataError, tstUI); return; } nSoul += dhCfg.nValue; pActor->SetProperty(PROP_ACTOR_CIRCLE_SOUL, nSoul); SetStaticCount(dhCfg.nStaticType, nNum+1); CActorPacket ap; CDataPacket& dataPack = pActor->AllocPacket(ap); dataPack << (BYTE)enStaticCountSystemID <<(BYTE)enStaticCountSystemsExchangeSoul <<(BYTE)1; ap.flush(); } void CStaticCountSystem::UpCircle() { if(m_pEntity == NULL) return; CActor* pActor = (CActor*)m_pEntity; CIRCLECFG &cfg = GetLogicServer()->GetDataProvider()->GetMiscConfig().m_CircleLevelConfig; unsigned int nCircleLevel = pActor->GetProperty(PROP_ACTOR_CIRCLE); int nMaxLevel = cfg.m_lCircleLv.size()-1; if(nCircleLevel >= nMaxLevel) { pActor->SendTipmsgFormatWithId(tmCircleMaxLevelLimit, tstUI); return; } std::map::iterator it = cfg.m_lCircleLv.find(nCircleLevel+1); if(it != cfg.m_lCircleLv.end()) { CIRCLELEVEL& levelCfg = it->second;//cfg.m_lCircleLv[nCircleLevel]; int nDay = GetLogicServer()->GetDaysSinceOpenServer(); if(nDay < levelCfg.nServerOpenDay) { std::string strOpenDay = intToString(levelCfg.nServerOpenDay); pActor->SendTipmsgFormatWithId(tmOpenDayLimitCircle, tstUI, strOpenDay.c_str() ); return; } if(!pActor->CheckLevel(levelCfg.nLevelLimit, 0)) { pActor->SendTipmsgFormatWithId(tmCircleLevelLimit, tstUI, levelCfg.nLevelLimit); return; } if(levelCfg.cost.size() > 0) { for(int i = 0; i < levelCfg.cost.size(); i++) { ACTORAWARD& cost = levelCfg.cost[i]; if(!pActor->CheckActorSource(cost.btType, cost.wId, cost.wCount, tstUI)) return; } } if(levelCfg.nCostLevel > 0) { int nNowLv = pActor->GetLevel(); nNowLv -= levelCfg.nCostLevel; if(nNowLv < 0) nNowLv = 0; pActor->SetLevel(nNowLv); } if(levelCfg.cost.size() > 0) { for(int i = 0; i < levelCfg.cost.size(); i++) { ACTORAWARD& cost = levelCfg.cost[i]; pActor->RemoveConsume(cost.btType, cost.wId, cost.wCount, -1, -1,-1,0, GameLog::Log_UpCircle); } } // unsigned int now = nsoul-nNeedCost; // pActor->SetProperty(PROP_ACTOR_CIRCLE_SOUL,now); nCircleLevel++; if(levelCfg.nTipId) { LPCTSTR sFormat = GetLogicServer()->GetDataProvider()->GetTipmsgConfig().GetTipmsg(levelCfg.nTipId); if( sFormat) { char sContent[1024]={0}; sprintf_s(sContent, sizeof(sContent), sFormat, ( char *)(pActor->GetEntityName()), nCircleLevel); GetGlobalLogicEngine()->GetEntityMgr()->BroadNotice(sContent,tstRevolving); // GetGlobalLogicEngine()->GetEntityMgr()->BroadNotice(sContent,tstChatSystem); } } //pActor->SetProperty(PROP_ACTOR_CIRCLE,nCircleLevel); pActor->SetActorCircle(nCircleLevel); // ((CMonster *)m_pEntity)->CollectOperate(CEntityOPCollector::coRefAbility); GetGlobalLogicEngine()->GetGlobalVarMgr().AddCountByCircleLevel(nCircleLevel); CActorPacket ap; CDataPacket& dataPack = pActor->AllocPacket(ap); int nCost = 0;//cfg.GetCost(nCircleLevel+1, nDay); dataPack << (BYTE)enStaticCountSystemID <<(BYTE)enStaticCountSystemsUpCircle <<(BYTE)1 <<(BYTE)nCircleLevel << nCost; ap.flush(); } } void CStaticCountSystem::ClearDailyStaticCount() { //CMiniDateTime now_time = CMiniDateTime::now(); int32_t nNowTime = time(NULL); int32_t nNextDailyTime = GetStaticCount(eSTATIC_TYPE_DAILY_TIME); if(nNowTime >= nNextDailyTime) { std::map::iterator it = m_StaticCounts.begin(); for(; it != m_StaticCounts.end();) { bool canReset = false; //策划可配置的字段 if( it->first >= nDailyStaticStart && it->first <= nDailyStaticEnd) { canReset = true; } //程序内部使用的字段 if( it->first >= eSTATIC_TYPE_INNER_ITEM_DAILY_START && it->first <= eSTATIC_TYPE_INNER_ITEM_DAILY_END) { canReset = true; } if(canReset) { m_StaticCounts.erase(it++); } else { it++; } } int32_t nDailyTime = getNowZeroTime() + 24 * 3600; SetStaticCount(eSTATIC_TYPE_DAILY_TIME, nDailyTime); //CMiniDateTime next_time = CMiniDateTime::tomorrow(); //SetStaticCount(eSTATIC_TYPE_DAILY_TIME, next_time.tv); } //程序内部使用的计数器 } void CStaticCountSystem::ClearWeekStaticCount() { CMiniDateTime now_time = CMiniDateTime::now(); int nNowTime = time(NULL); int nweekTime = GetStaticCount(eSTATIC_TYPE_WEEK_TIME); if(nNowTime >= nweekTime) { std::map::iterator it = m_StaticCounts.begin(); for(; it != m_StaticCounts.end();) { bool canReset = false; //策划可配置的字段 if( it->first >= nWeekStaticStart && it->first <= nWeekStaticEnd) { canReset = true; } //程序内部使用的字段 if( it->first >= eSTATIC_TYPE_INNER_ITEM_WEEK_START && it->first <= eSTATIC_TYPE_INNER_ITEM_WEEK_END) { canReset = true; } if(canReset) { m_StaticCounts.erase(it++); } else { it++; } } int nCurYear,nCurMon,nCurDay,nCurHour,nCurMin,nCurSec,nCurWeek; { SYSTEMTIME SysTime;// = GetGlobalLogicEngine()->getSysTime(); now_time.decode(SysTime); nCurYear = SysTime.wYear; nCurMon = SysTime.wMonth; nCurDay = SysTime.wDay; nCurHour = SysTime.wHour; nCurMin = SysTime.wMinute; nCurSec = SysTime.wSecond; struct tm tmResult; memset(&tmResult, 0, sizeof(tmResult)); tmResult.tm_isdst = 0; tmResult.tm_year = nCurYear - 1900; tmResult.tm_mon = nCurMon - 1; tmResult.tm_mday = nCurDay; mktime(&tmResult); nCurWeek = tmResult.tm_wday; } //周末改为nCurWeek:7 好计算 if (nCurWeek == 0) { nCurWeek = 7; } //nweekTime = getNowZeroTime()+7*24*3600; nweekTime = getNowZeroTime() + (8 - nCurWeek) * 24 * 3600; SetStaticCount(eSTATIC_TYPE_WEEK_TIME, nweekTime); } } void CStaticCountSystem::ClearMonthStaticCount() { CMiniDateTime now_time = CMiniDateTime::now(); int nNowTime = time(NULL); int nweekTime = GetStaticCount(eSTATIC_TYPE_MONTH_TIME); if(nNowTime >= nweekTime) { std::map::iterator it = m_StaticCounts.begin(); for(; it != m_StaticCounts.end();) { bool canReset = false; //策划可配置的字段 if( it->first >= nMonthStaticStart && it->first <= nMonthStaticEnd) { canReset = true; } //程序内部使用的字段 if( it->first >= eSTATIC_TYPE_INNER_ITEM_MONTH_START && it->first <= eSTATIC_TYPE_INNER_ITEM_MONTH_END) { canReset = true; } if(canReset) { m_StaticCounts.erase(it++); } else { it++; } } //nweekTime = getNowZeroTime()+7*24*3600; int nCurYear,nCurMon,nCurDay,nCurHour,nCurMin,nCurSec,nCurWeek; SYSTEMTIME SysTime;// = GetGlobalLogicEngine()->getSysTime(); now_time.decode(SysTime); if(SysTime.wMonth == 12) { //计算跨年 SysTime.wYear = SysTime.wYear + 1; SysTime.wMonth = 1; SysTime.wDay = 1; } else { SysTime.wMonth = SysTime.wMonth + 1; SysTime.wDay = 1; } nCurYear = SysTime.wYear; nCurMon = SysTime.wMonth; nCurDay = SysTime.wDay; nCurHour = SysTime.wHour; nCurMin = SysTime.wMinute; nCurSec = SysTime.wSecond; struct tm tmResult; memset(&tmResult, 0, sizeof(tmResult)); tmResult.tm_isdst = 0; tmResult.tm_year = nCurYear - 1900; tmResult.tm_mon = nCurMon - 1; tmResult.tm_mday = nCurDay; tmResult.tm_hour = 0; tmResult.tm_min = 0; tmResult.tm_hour = 0; unsigned int nextTime = mktime(&tmResult); SetStaticCount(eSTATIC_TYPE_MONTH_TIME, nextTime); // CMiniDateTime NextMiniDateTime; // NextMiniDateTime = NextMiniDateTime.encode(SysTime); // SetStaticCount(eSTATIC_TYPE_MONTH_TIME, NextMiniDateTime.tv); } } void CStaticCountSystem::UpMeridiansLv() { if(m_pEntity == NULL) return; CActor* pActor = (CActor*)m_pEntity; std::map &cfg = GetLogicServer()->GetDataProvider()->GetMiscConfig().m_MeridianUpCfg; unsigned int nMeridinLv = pActor->GetProperty(PROP_ACTOR_MERIDIALv); int nMaxLevel = cfg.size(); if(nMeridinLv >= nMaxLevel) { pActor->SendTipmsgFormatWithId(tmMeridiansMaxLv, tstUI); return; } std::map::iterator it = cfg.find(nMeridinLv+1); if(it != cfg.end()) { MeridianUpCfg& levelCfg = it->second; int nDay = GetLogicServer()->GetDaysSinceOpenServer(); if(nDay < levelCfg.nServerOpenDay) { pActor->SendTipmsgFormatWithId(tmCircleOpenServerDayLimit, tstUI, levelCfg.nServerOpenDay ); return; } if(pActor->GetLevel() < levelCfg.nLevelLimit) { pActor->SendTipmsgFormatWithId(tmCircleLevelLimit, tstUI, levelCfg.nLevelLimit); return; } if(pActor->GetCircleLevel() < levelCfg.nCircle) { pActor->SendTipmsgFormatWithId(tmCircleLvLimit, tstUI); return; } // int nExp = pActor->GetProperty(PROP_ACTOR_EXP); // if(nExp < levelCfg.nCostExp) // { // pActor->SendTipmsgFormatWithId(tmExpLimited, tstUI); // return; // } // int nBindCoin = pActor->GetProperty(PROP_ACTOR_BIND_COIN); // if(nBindCoin < levelCfg.nCostBindCoin) // { // pActor->SendTipmsgFormatWithId(tmNoMoreBindCoin, tstUI); // return; // } // int nItemid = levelCfg.nCostId; //初级秘籍 if(levelCfg.costs.size() > 0) { for(auto cost : levelCfg.costs) { ACTORAWARD& table = cost; if(!pActor->CheckActorSource(cost.btType,cost.wId, cost.wCount, tstUI)) return; } } if(levelCfg.costs.size() > 0) { for(auto cost : levelCfg.costs) { pActor->RemoveConsume(cost.btType,cost.wId, cost.wCount, -1, -1,-1,0, GameLog::Log_MeridiansUP); } } // pActor->RemoveConsume(qatExp, 0, levelCfg.nCostExp, -1, -1,-1,0, GameLog::Log_MeridiansUP); // pActor->RemoveConsume(0, nItemid, levelCfg.nCostBook,-1, -1,-1,0, GameLog::Log_MeridiansUP); // pActor->RemoveConsume(qatBindMoney, 0, levelCfg.nCostBindCoin, -1, -1,-1,0, GameLog::Log_MeridiansUP); nMeridinLv++; if(strlen(levelCfg.nTips) > 0) { char sText[1024]; sprintf_s(sText, sizeof(sText), levelCfg.nTips, ( char *)((CActor*)m_pEntity->GetEntityName())); GetGlobalLogicEngine()->GetEntityMgr()->BroadcastTipmsg(sText,tstKillDrop); } pActor->SetProperty(PROP_ACTOR_MERIDIALv,nMeridinLv); pActor->GetAchieveSystem().ActorAchievementComplete(nAchieveJmLevl, nMeridinLv); ((CMonster *)m_pEntity)->CollectOperate(CEntityOPCollector::coRefAbility); CActorPacket ap; CDataPacket& dataPack = pActor->AllocPacket(ap); dataPack << (BYTE)enStaticCountSystemID <<(BYTE)enStaticCountSystemsMeridiansUPLv <<(BYTE)1 <<(int)nMeridinLv; ap.flush(); } } //物品处理函数 int CStaticCountSystem::UpItemInnerIndexDaily(int ItemIndex)//获得物品处理过的内部ID { if (ItemIndex < 0 || ItemIndex > STATIC_TYPE_ITEM_INDEX_MAX ) { return (int)eSTATIC_TYPE_INNER_ITEM_DAILY_START; } return ItemIndex + eSTATIC_TYPE_INNER_ITEM_DAILY_START; } int CStaticCountSystem::UpItemInnerIndexWeek(int ItemIndex)//获得物品处理过的内部ID { if (ItemIndex < 0 || ItemIndex > STATIC_TYPE_ITEM_INDEX_MAX ) { return (int)eSTATIC_TYPE_INNER_ITEM_WEEK_START; } return ItemIndex + eSTATIC_TYPE_INNER_ITEM_WEEK_START; } int CStaticCountSystem::UpItemInnerIndexMonth(int ItemIndex)//获得物品处理过的内部ID { if (ItemIndex < 0 || ItemIndex > STATIC_TYPE_ITEM_INDEX_MAX ) { return (int)eSTATIC_TYPE_INNER_ITEM_MONTH_START; } return ItemIndex + eSTATIC_TYPE_INNER_ITEM_MONTH_START; } void CStaticCountSystem::OnReduceItemInnerStaticCountDaily(INT_PTR nStaticType, INT_PTR nValue) { int innerindex = UpItemInnerIndexDaily(nStaticType); LONGLONG last = GetStaticCount(innerindex); if (last - 1 >= nValue) { SetStaticCount(innerindex, last - nValue); } else { SetStaticCount(innerindex, 1); } } void CStaticCountSystem::OnReduceItemInnerStaticCountWeek(INT_PTR nStaticType, INT_PTR nValue) { int innerindex = UpItemInnerIndexWeek(nStaticType); LONGLONG last = GetStaticCount(innerindex); if (last - 1 >= nValue) { SetStaticCount(innerindex, last - nValue); } else { SetStaticCount(innerindex, 1); } } void CStaticCountSystem::OnReduceItemInnerStaticCountMonth(INT_PTR nStaticType, INT_PTR nValue) { int innerindex = UpItemInnerIndexMonth(nStaticType); LONGLONG last = GetStaticCount(innerindex); if (last - 1 >= nValue) { SetStaticCount(innerindex, last - nValue); } else { SetStaticCount(innerindex, 1); } } bool CStaticCountSystem::OnGetItemInnerIndexDailyInit(int ItemIndex) { int innerindex = UpItemInnerIndexDaily(ItemIndex); LONGLONG last = GetStaticCount(innerindex); if (last == 0) { return true; } else { return false; } } bool CStaticCountSystem::OnGetItemInnerIndexWeekInit(int ItemIndex) { int innerindex = UpItemInnerIndexWeek(ItemIndex); LONGLONG last = GetStaticCount(innerindex); if (last == 0) { return true; } else { return false; } } bool CStaticCountSystem::OnGetItemInnerIndexMonthInit(int ItemIndex) { int innerindex = UpItemInnerIndexMonth(ItemIndex); LONGLONG last = GetStaticCount(innerindex); if (last == 0) { return true; } else { return false; } } LONGLONG CStaticCountSystem::OnGetItemInnerIndexDaily(int ItemIndex) { int innerindex = UpItemInnerIndexDaily(ItemIndex); LONGLONG last = GetStaticCount(innerindex); return last - 1; } LONGLONG CStaticCountSystem::OnGetItemInnerIndexWeek(int ItemIndex) { int innerindex = UpItemInnerIndexWeek(ItemIndex); LONGLONG last = GetStaticCount(innerindex); return last - 1; } LONGLONG CStaticCountSystem::OnGetItemInnerIndexMonth(int ItemIndex) { int innerindex = UpItemInnerIndexMonth(ItemIndex); LONGLONG last = GetStaticCount(innerindex); return last - 1; } void CStaticCountSystem::OnAddOrderWardMoney(INT_PTR nValue) { LONGLONG last = GetStaticCount(eSTATIC_TYPE_ORDERWARD_MONEY); if (nValue < 0) { if (last >= -nValue) { SetStaticCount(eSTATIC_TYPE_ORDERWARD_MONEY, last + nValue); } else { SetStaticCount(eSTATIC_TYPE_ORDERWARD_MONEY, 0); } } else { SetStaticCount(eSTATIC_TYPE_ORDERWARD_MONEY, last + nValue); } ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_ZL_MONEY, GetStaticCount(eSTATIC_TYPE_ORDERWARD_MONEY)); } void CStaticCountSystem::OnAddDimensionalKey(INT_PTR nValue) { LONGLONG last = GetStaticCount(eSTATIC_TYPE_DIMENSIONAL_KEY); if (nValue < 0) { if (last >= -nValue) { SetStaticCount(eSTATIC_TYPE_DIMENSIONAL_KEY, last + nValue); } else { SetStaticCount(eSTATIC_TYPE_DIMENSIONAL_KEY, 0); } } else { SetStaticCount(eSTATIC_TYPE_DIMENSIONAL_KEY, last + nValue); } ((CActor*)m_pEntity)->SetProperty(PROP_ACTOR_DIMENSIONALKEY, GetStaticCount(eSTATIC_TYPE_DIMENSIONAL_KEY)); }