Exemple #1
0
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;
    }
}
Exemple #2
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;
}
Exemple #3
0
void CPlayerPet::CheckCrossDay()
{
    if (!IsToday(m_PlayerPetData.qwProductLastTime)){
        m_PlayerPetData.wNormalProductNum = 0;
        m_PlayerPetData.wGoodProductNum = 0;
        m_PlayerPetData.wFreeNormalProductCnt = CPetPropMng::Instance()->GetPetSysCfg().usNormalFreeProductCnt;
    }
}
Exemple #4
0
//有且未完成活动则返回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;
}
Exemple #6
0
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;
}
Exemple #7
0
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;
}
Exemple #8
0
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;
}
Exemple #9
0
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;
}
Exemple #10
0
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;
}