VOID CCollectGas::Recover() { if (!IsToday(m_stCollectData.qwLastCoinGenTime)) { m_stCollectData.wLastCoinGenNum = 0; m_stCollectData.qwLastCoinGenTime = 0; } if (!IsToday(m_stCollectData.qwLastCoinRandomUpTime)) { m_stCollectData.wLastCoinRandomUpNum = 0; m_stCollectData.qwLastCoinRandomUpTime = 0; } if (!IsToday(m_stCollectData.qwLastGoldGenTime)) { m_stCollectData.wLastGoldGenNum = 0; m_stCollectData.qwLastGoldGenTime = 0; } if (!IsToday(m_stCollectData.qwLastGoldRandomUpTime)) { m_stCollectData.wLastGoldRandomUpNum = 0; m_stCollectData.qwLastGoldRandomUpTime = 0; } if (!IsToday(m_stCollectData.qwLastGoldFullUpTime)) { m_stCollectData.byLastGoldFullUpNum = 0; m_stCollectData.qwLastGoldFullUpTime = 0; } }
VOID CEatBread::GetDT_ACTIVITY_BASE_DATA(DT_ACTIVITY_BASE_DATA& stDT_ACTIVITY_BASE_DATA) { memset(&stDT_ACTIVITY_BASE_DATA, 0, sizeof(stDT_ACTIVITY_BASE_DATA)); stDT_ACTIVITY_BASE_DATA.byKindID = EAK_EATBREAD; const CEatBreakActivityTimePropMap& mapActivityEndTimeProp = CEatBreadPropMgr::Instance()->GetEatBreadEndTimeProp(); UINT32 dwCurSecond = GetDayPassSecond(m_stDT_EAT_BREAD_DATA.qwEnterTime); BOOL bDay = IsToday(m_stDT_EAT_BREAD_DATA.qwEnterTime); for(CEatBreakActivityTimePropMapCItr itr = mapActivityEndTimeProp.begin(); ((itr != mapActivityEndTimeProp.end()) && (stDT_ACTIVITY_BASE_DATA.byActivityTimeNum < MAX_ACTIVITY_TIME_NUM)); itr++) { const SEatBreadActivityTimeProp& stProp = itr->second; DT_ACTIVITY_TIME_DATA& stDT_ACTIVITY_TIME_DATA = stDT_ACTIVITY_BASE_DATA.astActivityTimeInfo[stDT_ACTIVITY_BASE_DATA.byActivityTimeNum++]; memset(&stDT_ACTIVITY_TIME_DATA, 0, sizeof(stDT_ACTIVITY_TIME_DATA)); stDT_ACTIVITY_TIME_DATA.byStartHour = stProp.byStartHour; stDT_ACTIVITY_TIME_DATA.byStartMin = stProp.byStartMin; stDT_ACTIVITY_TIME_DATA.wKeepTime = stProp.wKeepTime; if((dwCurSecond >= stProp.dwStartTime) && (dwCurSecond < stProp.dwEndTime) && (bDay)) { stDT_ACTIVITY_TIME_DATA.wEndCountDown = (UINT16)(stProp.dwEndTime - dwCurSecond); if(m_stDT_EAT_BREAD_DATA.byHaveGivePhyStrengthen >= CEatBreadPropMgr::Instance()->GetMaxObtainPhyStrengthen()) { stDT_ACTIVITY_TIME_DATA.byHaveFinishFlag = 1; } } } stDT_ACTIVITY_BASE_DATA.byNotity = m_stDT_EAT_BREAD_DATA.byNotity; }
void CPlayerPet::CheckCrossDay() { if (!IsToday(m_PlayerPetData.qwProductLastTime)){ m_PlayerPetData.wNormalProductNum = 0; m_PlayerPetData.wGoodProductNum = 0; m_PlayerPetData.wFreeNormalProductCnt = CPetPropMng::Instance()->GetPetSysCfg().usNormalFreeProductCnt; } }
//有且未完成活动则返回TRUE BOOL CEatBread::GetPrompt(DT_FUNC_COMMON_PROMPT& stPrompt) { memset(&stPrompt, 0, sizeof(stPrompt)); stPrompt.byBuildKindID = EBK_ACTIVITY; stPrompt.byExt = EAK_EATBREAD; const SEatBreadActivityTimeProp* pstProp = CEatBreadPropMgr::Instance()->GetActivityTimeProp(); const SEatBreadActivityTimeProp* pstNextProp = NULL; UINT32 dwPassSes = GetDayPassSecond(); if(pstProp) { stPrompt.byFuncFlag = EAK_EATBREAD; UINT32 dwCurSecond = GetDayPassSecond(m_stDT_EAT_BREAD_DATA.qwEnterTime); BOOL bDay = IsToday(m_stDT_EAT_BREAD_DATA.qwEnterTime); //已获得最大体力,不可再进行活动,获取下一次活动倒计时 if((m_stDT_EAT_BREAD_DATA.byHaveGivePhyStrengthen >= CEatBreadPropMgr::Instance()->GetMaxObtainPhyStrengthen()) && (bDay) && (dwCurSecond >= pstProp->dwStartTime) && (dwCurSecond < pstProp->dwEndTime)) { pstNextProp = CEatBreadPropMgr::Instance()->GetNextActivityTimeProp(pstProp->dwEndTime); } else { stPrompt.dwFuncCountDown = (pstProp->dwEndTime > dwPassSes) ? pstProp->dwEndTime - dwPassSes : 0; return TRUE; } } else { pstNextProp = CEatBreadPropMgr::Instance()->GetNextActivityTimeProp(); } stPrompt.byFuncFlag = 0; if(pstNextProp) { //今天内的活动 if(pstNextProp->dwStartTime > dwPassSes) { stPrompt.dwFuncCountDown = pstNextProp->dwStartTime - dwPassSes; } //今天已没有活动,下一个活动为明天的第一个活动 else { stPrompt.dwFuncCountDown = SECONDES_PER_DAY - dwPassSes + pstNextProp->dwStartTime; } return FALSE; } return FALSE; }
// draw days of month int CMiniCalendarCtrl::DrawDays(CDC& _dc, int _iY, int _iLeftX, int _iRow, int _iMonth, int _iYear) { int iReturn = 0; int iStartY = _iY; COleDateTime dtStart; dtStart.SetDate(_iYear, _iMonth, 1); COleDateTime dt(dtStart); while (dt.GetDayOfWeek() != m_iFirstDayOfWeek) dt -= 1; // calculate starting X position int iStartX = ((_iLeftX + (m_szMonthSize.cx / 2))) - (((m_iIndividualDayWidth*7) + 30) / 2); int iEndX = ((_iLeftX + (m_szMonthSize.cx / 2))) + (((m_iIndividualDayWidth*7) + 30) / 2); int iX = iStartX; CFont* pOldFont = _dc.SelectObject(m_pFont); _dc.SetBkColor(::GetSysColor(COLOR_BTNFACE)); _dc.SetTextColor(::GetSysColor(COLOR_BTNTEXT)); _dc.SetBkMode(TRANSPARENT); int iDayCounter = 0; // we allow up to 6 rows of days. This is the actual maximum # of calendar // weeks that can occur in a month. int iRow; for (iRow = 1; iRow <= 6; iRow++) { int iX = iStartX; for (int iDayOfWeek = 1; iDayOfWeek <= 7; iDayOfWeek++) { if (dt.GetMonth() == dtStart.GetMonth() || (dt > dtStart && _iRow == m_iRows) || (dt < dtStart && _iRow == 1)) { CString strText = CCalendarUtils::LongToString(dt.GetDay()); COLORREF cTextColor = MINICAL_COLOUR_DAY; if (dt.GetMonth() != _iMonth) { cTextColor = MINICAL_COLOUR_DAY_DIFFERENTMONTH; } //initialize as a normal date pOldFont = _dc.SelectObject(m_pFont); _dc.SetTextColor(cTextColor); if (IsDateSelected(dt)) { //selected date if (m_pCalendarData->IsImportantDate(dt)) { //important date too pOldFont = _dc.SelectObject(m_pFontBold); } else { pOldFont = _dc.SelectObject(m_pFont); } _dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); _dc.FillSolidRect(iX-1, _iY, m_iIndividualDayWidth+3, m_iDaysHeight+1, ::GetSysColor(COLOR_HIGHLIGHT)); } else if (m_pCalendarData->IsImportantDate(dt)) { BOOL bImportantDate = TRUE; DWORD dwStyleCompletedTasks = m_pWnd->GetDisplayFlags(); if (dwStyleCompletedTasks & COMPLETEDTASKS_HIDDEN) { //completed tasks are hidden. only consider this date important if there is one or more non-hidden tasks bImportantDate = FALSE; CTaskInfoList listTasks; m_pCalendarData->GetTasks(dt, listTasks); ASSERT(!listTasks.IsEmpty()); //look for non-hidden tasks for (POSITION pos = listTasks.GetHeadPosition(); (pos != NULL) && !bImportantDate; ) { CTaskInfo ti = listTasks.GetNext(pos); if (!ti.IsComplete()) { bImportantDate = TRUE; } } } if (bImportantDate) { //important date pOldFont = _dc.SelectObject(m_pFontBold); if (m_pWnd->IsDateHidden(dt)) { //hidden weekend date _dc.SetTextColor(MINICAL_COLOUR_HIDDEN_WEEKEND_DAY); } _dc.FillSolidRect(iX-1, _iY, m_iIndividualDayWidth+3, m_iDaysHeight+1, MINICAL_COLOUR_IMPORTANTDAY_BACKGROUND); } } else if (m_pWnd->IsDateHidden(dt)) { //hidden weekend date pOldFont = _dc.SelectObject(m_pFont); _dc.SetTextColor(MINICAL_COLOUR_HIDDEN_WEEKEND_DAY); } _dc.DrawText(strText, CRect(iX, _iY, iX+m_iIndividualDayWidth,_iY+m_iDaysHeight), DT_BOTTOM | DT_RIGHT | DT_SINGLELINE); //highlight today if (IsToday(dt)) _dc.Draw3dRect(iX-2, _iY, m_iIndividualDayWidth+5, m_iDaysHeight+1, MINICAL_COLOUR_HEADERFONT, MINICAL_COLOUR_HEADERFONT); SetHotSpot(_iRow, iDayCounter, dt, CRect(iX-3,_iY,iX-3+m_iIndividualDayWidth+5, _iY+m_iDaysHeight+2)); } dt += 1; iX += (m_iIndividualDayWidth + 5); iDayCounter++; } _iY += (2 + m_iDaysHeight); iReturn += (2 + m_iDaysHeight); } _dc.SelectObject(pOldFont); // draw the divider line if (iRow == m_iRows) { CPen* pPen = new CPen(PS_SOLID, 1, ::GetSysColor(COLOR_3DSHADOW)); CPen* pOldPen = _dc.SelectObject(pPen); _dc.MoveTo(iStartX, _iY); _dc.LineTo(iEndX, _iY); _dc.SelectObject(pOldPen); delete pPen; } iReturn += 5; SetCellPosition(_iRow, CRect(iStartX, iStartY, iEndX, _iY)); return iReturn; }
UINT16 COnhookMgr::OnhookElitInstance( CPlayer* poPlayer, DT_INSTANCE_ID stDT_INSTANCE_ID, UINT8 &byMaxOnHookNum, DT_ONHOOK_RESULT& stOnhookResult, DT_DATA_AFTER_ONHOOK& stAfterOnhookData ) { UINT16 wErrCode = ERR_ELITE_INSTANCE_ON_HOOK::ID_SUCCESS; CInstanceRecord *pInstanceRecord = NULL; pInstanceRecord = poPlayer->GetInstance().GetSingleInstaceRecord(stDT_INSTANCE_ID.wSceneIdx, stDT_INSTANCE_ID.byTownIdx, stDT_INSTANCE_ID.byInstanceIdx); if(NULL == pInstanceRecord) { return ERR_ELITE_INSTANCE_ON_HOOK::ID_INSTANCE_NOT_BATTLED; } if(EIT_ELITE != stDT_INSTANCE_ID.wSceneIdx) { return ERR_ELITE_INSTANCE_ON_HOOK::ID_ONHOOK_UNLOCK; } //背包判断 CBag& oBag = poPlayer->GetBag(); if(0 == oBag.GetIdleSize()) { return ERR_ELITE_INSTANCE_ON_HOOK::ID_BAG_FULL; } if( IsToday( pInstanceRecord->GetDT_INSTANCE_DATA().qwLastPassTime ) ) { return ERR_ELITE_INSTANCE_ON_HOOK::ID_TODAY_ALREADY_BATTLED; } byMaxOnHookNum++; COnhook* poOnhook = poPlayer->GetOnhook(); if (NULL == poOnhook) { return ERR_COMMON::ID_OTHER_ERR; } poOnhook->SetOnHookParam(1, &stDT_INSTANCE_ID); DT_ONHOOK_RCD_DATA& stDT_ONHOOK_RCD_DATA = poOnhook->GetDT_ONHOOK_RCD_DATA(); //获取奖励 UINT8 byRunTimes = 1; if(poOnhook->OnHookEncourage(byRunTimes)) { wErrCode = ERR_ELITE_INSTANCE_ON_HOOK::ID_BAG_FULL; } //获取结果及玩家信息 poOnhook->GetOnhookResult(stOnhookResult, stAfterOnhookData); //一次性返回了,挂机结束 stDT_ONHOOK_RCD_DATA.byOnhookFlag = 0;//挂机结束 //poPlayer->GetLocale().OnOnhookEnd(); //要记录最后时间,用来限制次数 if (NULL != pInstanceRecord && EIT_ELITE == stDT_INSTANCE_ID.wSceneIdx && ERR_ELITE_INSTANCE_ON_HOOK::ID_BAG_FULL != wErrCode) { //pInstanceRecord->GetDT_INSTANCE_DATA().wPassTimes ++; pInstanceRecord->GetDT_INSTANCE_DATA().qwLastPassTime = SDTimeSecs(); } return wErrCode; }
UINT16 CGoods::Use(UINT8& byUseBoxFlag, DT_ITEM_DATA_LIST_CLI2& stBoxItemInfo, UINT16 wUseNum) { SGoodsProp* pstGoodsProp = GetGoodsProp(); if(NULL == pstGoodsProp) { RETURN_OTHER_ERR; } if(0 == m_stDT_GOODS_DATA.wPileCount) { return ERR_GOODS_USE::ID_GOODS_NOT_EXIST; } if(m_stDT_GOODS_DATA.wPileCount < wUseNum) { return ERR_GOODS_USE::ID_NOT_ENOUGH_NUM; } if(m_poOwner->GetLevel() < pstGoodsProp->wUseLevel) { return ERR_GOODS_USE::ID_NOT_REACH_USE_LEVEL; } BOOL bTodayFlag = FALSE; //每天使用次数判断 if(IsToday(m_stDT_GOODS_DATA.qwLastUseTime)) { bTodayFlag = TRUE; if((0 != pstGoodsProp->wUseTimesPerDay) && (m_stDT_GOODS_DATA.wLastUseNum >= pstGoodsProp->wUseTimesPerDay)) { return ERR_GOODS_USE::ID_REACH_MAX_TODAY; } } //CD判断 INT64 nPassTime = SDTimeSecs() - m_stDT_GOODS_DATA.qwLastUseTime; if(nPassTime < 0)//异常 { nPassTime = pstGoodsProp->wUseCD; } if(nPassTime < pstGoodsProp->wUseCD) { return ERR_GOODS_USE::ID_IN_CD; } //使用 UINT16 wErrCode = UseByMainKind(byUseBoxFlag, stBoxItemInfo, wUseNum); if(ERR_GOODS_USE::ID_SUCCESS == wErrCode) { m_stDT_GOODS_DATA.qwLastUseTime = SDTimeSecs(); m_stDT_GOODS_DATA.qwLastUseTime++; m_stDT_GOODS_DATA.wPileCount -= wUseNum; CRecordMgr::Instance()->RecordInfo(m_poOwner->GetID(), ERM_DECITEM, CRecordMgr::EDIT_USE, m_stDT_GOODS_DATA.wKindID, m_stDT_GOODS_DATA.wPileCount, m_poOwner->GetLevel(), m_poOwner->GetDT_PLAYER_BASE_DATA().byVipLevel, wUseNum); if(0 == m_stDT_GOODS_DATA.wPileCount) { m_poOwner->OnDeleteItem(this); } } return wErrCode; }
UINT16 CEatBread::OpenEatBread(PKT_CLIGS_OPNE_EAT_BREAD_ACK& pstAck) { UINT16 wTimePerPhyStrengthen = CEatBreadPropMgr::Instance()->GetTimePerPhyStrengthen(); UINT8 byMaxObtainPhyStrengthen = CEatBreadPropMgr::Instance()->GetMaxObtainPhyStrengthen(); pstAck.wEndCountDown = 0; pstAck.byMaxObtainPhyStrengthen = byMaxObtainPhyStrengthen; pstAck.wTimePerPhyStrengthen = wTimePerPhyStrengthen ; pstAck.wOarNumPerPhyStrengthen = CEatBreadPropMgr::Instance()->GetOarNumPerPhyStrengthen(); pstAck.dwOnceSpeedCoin = CEatBreadPropMgr::Instance()->GetOnceSpeedCoin(); if(0 != m_stDT_EAT_BREAD_DATA.qwEnterTime) //上次进入 { const SEatBreadActivityTimeProp* pstLastActivityTimeProp = CEatBreadPropMgr::Instance()->GetActivityTimeProp(m_stDT_EAT_BREAD_DATA.qwEnterTime); if(NULL == pstLastActivityTimeProp) //异常,重新进入当前活动 { //进入活动 Enter(pstAck); return ERR_OPNE_EAT_BREAD::ID_SUCCESS; } const SEatBreadActivityTimeProp* pstCurActivityTimeProp = CEatBreadPropMgr::Instance()->GetActivityTimeProp(); pstAck.byHaveObtainPhyStrengthen = m_stDT_EAT_BREAD_DATA.byHaveObtainPhyStrengthen; pstAck.dwHaveObtainCoin = m_stDT_EAT_BREAD_DATA.dwHaveObtainCoin; //上次进入的是今天的当前活动(当前活动没退出),返回已获得的信息 if((pstLastActivityTimeProp == pstCurActivityTimeProp) && (IsToday(m_stDT_EAT_BREAD_DATA.qwEnterTime))) { //上次没主动离开,则时间+上已过时间 if(0 == m_stDT_EAT_BREAD_DATA.byHaveLeaveFlag) { m_stDT_EAT_BREAD_DATA.wHaveUseTime = m_stDT_EAT_BREAD_DATA.wHaveUseTime + (UINT16)(GetDayPassSecond() - GetDayPassSecond(m_stDT_EAT_BREAD_DATA.qwEnterTime)); } else { if(m_stDT_EAT_BREAD_DATA.byHaveObtainPhyStrengthen <= byMaxObtainPhyStrengthen) //未达成目标,重新进入 { m_stDT_EAT_BREAD_DATA.byHaveLeaveFlag = 0;//重新进入,离开标志为0 } } pstAck.wHaveUseTime = m_stDT_EAT_BREAD_DATA.wHaveUseTime; pstAck.wEndCountDown = (UINT16)(pstLastActivityTimeProp->dwEndTime - GetDayPassSecond()); m_poOwner->GetLocale().OnEatBread(); } //上次进入的不是当前活动,给之前所得,重新进入当前活动 else if(pstLastActivityTimeProp != pstCurActivityTimeProp) { pstAck.wHaveUseTime = m_stDT_EAT_BREAD_DATA.wHaveUseTime + (UINT16)(pstLastActivityTimeProp->dwEndTime - GetDayPassSecond(m_stDT_EAT_BREAD_DATA.qwEnterTime)); //给之前收益 m_poOwner->AddPhyStrength(m_stDT_EAT_BREAD_DATA.byHaveObtainPhyStrengthen - m_stDT_EAT_BREAD_DATA.byHaveGivePhyStrengthen, CRecordMgr::EAPST_EATBREAD); m_poOwner->AddCoin(m_stDT_EAT_BREAD_DATA.dwHaveObtainCoin - m_stDT_EAT_BREAD_DATA.dwHaveGiveCoin, CRecordMgr::EACT_EATBREAD); //进入活动 Enter(pstAck); } //其他,重新进入活动 else { //进入活动 Enter(pstAck); } } else //没在活动内 { //进入活动 Enter(pstAck); } return ERR_OPNE_EAT_BREAD::ID_SUCCESS; }
UINT16 CMoneyTree::RockMoney(UINT32& dwGetCoin, UINT8 byGuideFlag, DT_MONEY_TREE_DATA_CLI& stMoneyTreeInfo, UINT16 &wGetCoinRate2) { UINT32 dwCostGold = 0; //心情时间 UINT16 wTotalRockNum = CVipPropMgr::Instance()->GetIncNum(EVINF_MONEYTREE, m_poOwner->GetDT_PLAYER_BASE_DATA().byVipLevel); stMoneyTreeInfo.wTotalCanRockNum = wTotalRockNum; stMoneyTreeInfo.wVipExtNum = CVipPropMgr::Instance()->GetIncNum(EVINF_MONEYTREE, m_poOwner->GetDT_PLAYER_BASE_DATA().byVipLevel); UINT16 wMoodKeepTime = CMoneyTreePropMgr::Instance()->GetMoodKeepTime(); //未引导 if(m_poOwner->CKGuide( EGF_ROCKMONEY)) { //引导,不判断次数及元宝,给心情1 m_stDT_MONEY_TREE_DATA.byMoodValue = 1; dwGetCoin = CMoneyTreeBasePropMgr::Instance()->GetProduceCoin(m_poOwner->GetLevel(), m_stDT_MONEY_TREE_DATA.byMoodValue); //m_poOwner->GetDT_PLAYER_BASE_DATA().qwCoin += dwGetCoin; m_poOwner->AddCoin(dwGetCoin, CRecordMgr::EACT_GUIDEROCKMONEY, m_stDT_MONEY_TREE_DATA.byMoodValue, m_stDT_MONEY_TREE_DATA.wRockNum); m_stDT_MONEY_TREE_DATA.qwRockTime = SDTimeSecs(); m_stDT_MONEY_TREE_DATA.wRockNum++; } //已引导 else { //客户端指引重试,直接返回数据,不判断次数及元宝,也不增加铜币 if(1 == byGuideFlag) { dwGetCoin = CMoneyTreeBasePropMgr::Instance()->GetProduceCoin(m_poOwner->GetLevel(), m_stDT_MONEY_TREE_DATA.byMoodValue); GetDT_MONEY_TREE_DATA_CLI(stMoneyTreeInfo, wGetCoinRate2); return ERR_ROCK_MONEY_TREE::ID_SUCCESS; } //今天 if(IsToday(m_stDT_MONEY_TREE_DATA.qwRockTime)) { //已不可再摇 if(m_stDT_MONEY_TREE_DATA.wRockNum >= wTotalRockNum) { return ERR_ROCK_MONEY_TREE::ID_USE_OUT_NUM; } else { //判断元宝 dwCostGold = CMoneyTreeBasePropMgr::Instance()->GetRockNeedGold(m_poOwner, m_stDT_MONEY_TREE_DATA.wRockNum); if(m_poOwner->GetDT_PLAYER_BASE_DATA().qwGold < dwCostGold) { return ERR_COMMON::ID_GOLD_NOT_ENOUGH; } //判断心情值保持期 INT64 dnGap = SDTimeSecs() - m_stDT_MONEY_TREE_DATA.qwMoodStartTime; if(dnGap < 0)//异常 { m_stDT_MONEY_TREE_DATA.qwMoodStartTime = 0; m_stDT_MONEY_TREE_DATA.byMoodValue = 0; } //已过保持期,重置 else if(dnGap >= wMoodKeepTime) { m_stDT_MONEY_TREE_DATA.qwMoodStartTime = 0; m_stDT_MONEY_TREE_DATA.byMoodValue = 0; } dwGetCoin = CMoneyTreeBasePropMgr::Instance()->GetProduceCoin(m_poOwner->GetLevel(), m_stDT_MONEY_TREE_DATA.byMoodValue); } } //不是今天,则重置摇钱值 else { m_stDT_MONEY_TREE_DATA.wRockNum = 0; m_stDT_MONEY_TREE_DATA.byMoodValue = 0; //判断元宝 dwCostGold = CMoneyTreeBasePropMgr::Instance()->GetRockNeedGold(m_poOwner, m_stDT_MONEY_TREE_DATA.wRockNum); if(m_poOwner->GetDT_PLAYER_BASE_DATA().qwGold < dwCostGold) { return ERR_COMMON::ID_GOLD_NOT_ENOUGH; } dwGetCoin = CMoneyTreeBasePropMgr::Instance()->GetProduceCoin(m_poOwner->GetLevel(), m_stDT_MONEY_TREE_DATA.byMoodValue); } //扣除元宝,给收获铜币 //m_poOwner->GetDT_PLAYER_BASE_DATA().qwGold -= dwCostGold; //m_poOwner->GetDT_PLAYER_BASE_DATA().qwCoin += dwGetCoin; m_poOwner->DecGold(dwCostGold, CRecordMgr::EDGT_ROCKMONEY, m_stDT_MONEY_TREE_DATA.byMoodValue, m_stDT_MONEY_TREE_DATA.wRockNum); m_poOwner->AddCoin(dwGetCoin, CRecordMgr::EACT_ROCKMONEY, m_stDT_MONEY_TREE_DATA.byMoodValue, m_stDT_MONEY_TREE_DATA.wRockNum); //随机赋值心情值 if(RandomReseed(100) < CMoneyTreePropMgr::Instance()->GetMoneyTreeMoodRate(m_stDT_MONEY_TREE_DATA.byMoodValue)) { UINT8 byMoodValue = m_stDT_MONEY_TREE_DATA.byMoodValue + 1; if(CMoneyTreePropMgr::Instance()->IsExist(byMoodValue)) { m_stDT_MONEY_TREE_DATA.byMoodValue++; } m_stDT_MONEY_TREE_DATA.qwMoodStartTime = SDTimeSecs();//命中则重置心情值保质期 } m_stDT_MONEY_TREE_DATA.qwRockTime = SDTimeSecs(); m_stDT_MONEY_TREE_DATA.wRockNum++; CPlayerMedal* poPlayerMedal = m_poOwner->GetPlayerMedal(); if ( NULL != poPlayerMedal) { poPlayerMedal->CheckMedalBySmallType(EMST_ROCK_MONEY); } } //SetSaveState(ESS_WANT_SAVE); //记录已引导 m_poOwner->AddGuideRecord( EGF_ROCKMONEY); GetDT_MONEY_TREE_DATA_CLI(stMoneyTreeInfo, wGetCoinRate2); return ERR_ROCK_MONEY_TREE::ID_SUCCESS; }
VOID CMoneyTree::GetDT_MONEY_TREE_DATA_CLI(DT_MONEY_TREE_DATA_CLI& stDT_MONEY_TREE_DATA_CLI, UINT16 &wGetCoinRate2) { //SMoneyTreeBaseProp& stMoneyTreeBaseProp = CMoneyTreeBasePropMgr::Instance()->GetMoneyTreeBaseProp(); UINT16 wTotalRockNum = CVipPropMgr::Instance()->GetIncNum(EVINF_MONEYTREE, m_poOwner->GetDT_PLAYER_BASE_DATA().byVipLevel); //心情时间 UINT16 wMoodKeepTime = CMoneyTreePropMgr::Instance()->GetMoodKeepTime(); stDT_MONEY_TREE_DATA_CLI.wTotalCanRockNum = wTotalRockNum; //今天 if(IsToday(m_stDT_MONEY_TREE_DATA.qwRockTime)) { INT16 shCanRockNum = wTotalRockNum - m_stDT_MONEY_TREE_DATA.wRockNum; stDT_MONEY_TREE_DATA_CLI.wCanRockNum = shCanRockNum > 0 ? shCanRockNum : 0; stDT_MONEY_TREE_DATA_CLI.dwRockNeedGold = CMoneyTreeBasePropMgr::Instance()->GetRockNeedGold(m_poOwner, m_stDT_MONEY_TREE_DATA.wRockNum); INT64 dnGap = SDTimeSecs() - m_stDT_MONEY_TREE_DATA.qwMoodStartTime; if(dnGap < 0)//异常 { stDT_MONEY_TREE_DATA_CLI.byMoodValue = 0; stDT_MONEY_TREE_DATA_CLI.wMoodOverCountDown = 0; } //wMoodKeepTime = CMoneyTreePropMgr::Instance()->GetMoodKeepTime(stDT_MONEY_TREE_DATA_CLI.byMoodValue + 1); //已过保持期,重置 else if(dnGap >= wMoodKeepTime) { stDT_MONEY_TREE_DATA_CLI.byMoodValue = 0; stDT_MONEY_TREE_DATA_CLI.wMoodOverCountDown = 0; } else { stDT_MONEY_TREE_DATA_CLI.byMoodValue = m_stDT_MONEY_TREE_DATA.byMoodValue; INT64 dnModGap = wMoodKeepTime - dnGap; if(dnModGap <= 0) { stDT_MONEY_TREE_DATA_CLI.wMoodOverCountDown = 0; } else { stDT_MONEY_TREE_DATA_CLI.wMoodOverCountDown = (UINT16)(dnModGap > wMoodKeepTime ? wMoodKeepTime : dnModGap); } //wMoodKeepTime = CMoneyTreePropMgr::Instance()->GetMoodKeepTime(stDT_MONEY_TREE_DATA_CLI.byMoodValue + 1); } } else { stDT_MONEY_TREE_DATA_CLI.byMoodValue = 0; stDT_MONEY_TREE_DATA_CLI.wMoodOverCountDown = 0; stDT_MONEY_TREE_DATA_CLI.wCanRockNum = wTotalRockNum; stDT_MONEY_TREE_DATA_CLI.dwRockNeedGold = CMoneyTreeBasePropMgr::Instance()->GetRockNeedGold(m_poOwner, 0); m_stDT_MONEY_TREE_DATA.wRockNum = 0; //重置 } //需引导,消耗0 if(m_poOwner->CKGuide( EGF_ROCKMONEY)) { stDT_MONEY_TREE_DATA_CLI.dwRockNeedGold = 0; } stDT_MONEY_TREE_DATA_CLI.dwRockBaseCoin = CMoneyTreeBasePropMgr::Instance()->GetProduceCoin(m_poOwner->GetLevel(), 0); wGetCoinRate2 = 100 + CMoneyTreePropMgr::Instance()->GetMoneyTreeIncMoneyRate(m_stDT_MONEY_TREE_DATA.byMoodValue); stDT_MONEY_TREE_DATA_CLI.byGetCoinRate = (UINT8)(wGetCoinRate2); stDT_MONEY_TREE_DATA_CLI.wMoodKeepTime = wMoodKeepTime; }
BOOL CDxDatePickerDay::DrawDay(CDCHandle dc) { // check this day item BOOL bThisMonthItem = FALSE; BOOL bNextMonthItem = FALSE; BOOL bPreviousMonthItem = FALSE; CDxMonthPicker* pControl = GetDatePicker(); CDxDatePickerMonth* pMonth = GetMonth(); COleDateTime dtDay = GetDate(); CRect rcDay = GetRect(); if (dtDay.GetYear() > pMonth->GetMonth().GetYear()) { bNextMonthItem = TRUE; } else if (dtDay.GetYear() < pMonth->GetMonth().GetYear()) { bPreviousMonthItem = TRUE; } else { // years the same if (dtDay.GetMonth() > pMonth->GetMonth().GetMonth()) bNextMonthItem = TRUE; else if (dtDay.GetMonth() < pMonth->GetMonth().GetMonth()) bPreviousMonthItem = TRUE; else // months the same bThisMonthItem = TRUE; } if (bPreviousMonthItem && !pMonth->GetShowDaysBefore()) return FALSE; if (bNextMonthItem && !pMonth->GetShowDaysAfter()) return FALSE; // apply settings to the DC dc.SetBkMode(TRANSPARENT); dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT)); dc.FillSolidRect(rcDay, GetSysColor(COLOR_WINDOW)); // change default drawing metrics if day is selected if (pControl->IsSelected(dtDay)) { dc.SetTextColor(GetSysColor(COLOR_WINDOW)); dc.FillSolidRect(rcDay, GetSysColor(COLOR_WINDOWTEXT)); } // make a text for drawing CString strText; strText.Format(_T("%i"), dtDay.GetDay()); // draw item content { // draw item text HFONT hFontOld = (HFONT)dc.SelectFont(CDxFontManager::GetSingleton().GetFont(DUIF_DEFAULTFONT)); dc.DrawText(strText, strText.GetLength(), &rcDay, DT_SINGLELINE | DT_VCENTER | DT_CENTER | DT_NOCLIP); } CRect rcFocus = rcDay; BOOL bToday = FALSE; // highlight today item if (IsToday(dtDay)) { dc.Draw3dRect(rcDay, GetSysColor(COLOR_HIGHLIGHT), GetSysColor(COLOR_HIGHLIGHT)); bToday = TRUE; } if (pControl->IsSelected(dtDay)) { if (!bToday) { dc.SetTextColor(0); dc.SetBkColor(RGB(255, 255, 255)); dc.DrawFocusRect(&rcFocus); } else { COLORREF clrFocus = GetSysColor(COLOR_HIGHLIGHT); clrFocus = clrFocus ^ RGB(255, 128, 128); rcFocus.DeflateRect(0, 0, 1, 1); CPen pen1; pen1.CreatePen(PS_DOT, 1, clrFocus); HPEN hOldPen = dc.SelectPen(pen1); dc.MoveTo(rcFocus.TopLeft()); dc.LineTo(rcFocus.right, rcFocus.top); dc.LineTo(rcFocus.right, rcFocus.bottom); dc.LineTo(rcFocus.left, rcFocus.bottom); dc.LineTo(rcFocus.left, rcFocus.top); dc.SelectPen(hOldPen); } } return TRUE; }