⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 groupregeninfo.cpp

📁 墨香最新私服
💻 CPP
字号:
// GroupRegenInfo.cpp: implementation of the CGroupRegenInfo class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GroupRegenInfo.h"
#include "RegenConditionInfo.h"
#include "RegenManager.h"
#include "AIGroupPrototype.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGroupRegenInfo::CGroupRegenInfo()
{

}

CGroupRegenInfo::~CGroupRegenInfo()
{
	m_RegenConditionList.DeleteAll();
}

DWORD CGroupRegenInfo::GetWaitRegenObjectNum()
{
	return m_RegenIDList.GetCount();
}

void CGroupRegenInfo::AddID(DWORD id)
{
	m_RegenIDList.AddTail(id);
}

void CGroupRegenInfo::RemoveID(DWORD id)
{
	DWORD dwID = 0;
	POS pos = m_RegenIDList.GetFirstPos();
	while(pos)
	{
		dwID = m_RegenIDList.GetAtPos(pos);
		if(dwID == id)
		{
			m_RegenIDList.DeletePos(pos);
			break;
		}
		m_RegenIDList.GetNextPos(pos);
	}
}

void CGroupRegenInfo::AddCondition(CRegenConditionInfo * pInfo)
{
	m_RegenConditionList.AddTail(pInfo);
}
void CGroupRegenInfo::RegenCheck(DWORD CurObjectNum, DWORD MaxObjectNum)
{
	float ratio = (float)CurObjectNum/(float)MaxObjectNum;
	
	if( CurObjectNum > MaxObjectNum )
		int kk =1;

	CRegenConditionInfo * pCInfo = NULL;
	for(int i = 0 ; i < m_RegenConditionList.GetCount() ; ++i)
	{
		pCInfo = m_RegenConditionList.GetAt(i);
		//taiyo
		// if(ratio <= pBObj->fRemainderRatio)捞搁 救凳
		// fRemainderRatio = 0牢巴篮 府哩窍瘤 臼绰 巴
		if( pCInfo->fRemainderRatio != 0 )
		if( ratio >= ( 1 - pCInfo->fRemainderRatio ) )
		{
			pCInfo->dwStartRegenTick = gCurTime;
			pCInfo->bRegen = TRUE;
			break;
			
		}
	}
}

void CGroupRegenInfo::RegenProcess()
{
	POS pos = m_RegenConditionList.GetFirstPos();
	while(pos)
	{
		CRegenConditionInfo * pConditionInfo = m_RegenConditionList.GetNextPos(pos);
		if(pConditionInfo->bRegen)
		{
			if(pConditionInfo->dwStartRegenTick + pConditionInfo->dwRegenDelay < gCurTime)
			{
				pConditionInfo->dwStartRegenTick = 0;
				pConditionInfo->bRegen = FALSE;

				REGENMGR->RegenGroup(pConditionInfo->dwTargetGroupID, m_pGroup->GetGridID());
			}
			break;
		}
	}
	
}

void CGroupRegenInfo::ForceRegen()
{
	// respawn start
	BOOL bRegenFailed = FALSE;
	DWORD dwID = 0;
	while(dwID = m_RegenIDList.DeleteHead())
	{	
		if(!RegenObject(dwID))
		{
			m_RegenIDTmpList.AddTail(dwID);
			bRegenFailed = TRUE;
		}
	}
	
	while(dwID = m_RegenIDTmpList.DeleteHead())
	{
		m_RegenIDList.AddTail(dwID);
	}

	if( bRegenFailed )
		m_pGroup->RegenCheck();



	/*
	
	POS pos = m_RegenIDList.GetFirstPos();
	while(pos)
	{
		dwID = m_RegenIDList.GetAtPos(pos);
		if(RegenObject(dwID))
		{
			m_RegenIDList.DeletePos(pos);
		}
		else
			m_RegenIDList.GetNextPos(pos);
	}
	*/
}

BOOL CGroupRegenInfo::RegenObject(DWORD dwID)
{
	return REGENMGR->RegenObject(m_pGroup->GetGroupID(), m_pGroup->GetGridID(), dwID);
}

void CGroupRegenInfo::SetGroup(CAIGroup * pGroup)
{
	m_pGroup = pGroup;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -