📄 groupregeninfo.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 + -