📄 charactercalcmanager.cpp
字号:
// CharacterCalcManager.cpp: implementation of the CCharacterCalcManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CharacterCalcManager.h"
#include "Player.h"
#include "KyungGongManager.h"
#include "CharMove.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCharacterCalcManager::CCharacterCalcManager()
{
}
CCharacterCalcManager::~CCharacterCalcManager()
{
}
void CCharacterCalcManager::StartUpdateLife( CObject* pObject, WORD plusLife, BYTE recoverInterval, DWORD recoverTime )
{
DWORD MaxVal = pObject->GetMaxLife();
DWORD CurVal = pObject->GetLife();
DWORD DamagedVal = MaxVal-CurVal;
if(DamagedVal < plusLife)
plusLife = DamagedVal;
pObject->m_YYLifeRecoverTime.bStart = TRUE;
pObject->m_YYLifeRecoverTime.count = recoverInterval; // 10锅俊 吧媚 雀汗茄促
pObject->m_YYLifeRecoverTime.recoverUnitAmout = plusLife/pObject->m_YYLifeRecoverTime.count; // 茄锅俊 雀汗瞪 剧
pObject->m_YYLifeRecoverTime.recoverDelayTime = recoverTime/pObject->m_YYLifeRecoverTime.count; // 6檬埃 雀汗捞 肯丰等促
pObject->m_YYLifeRecoverTime.lastCheckTime = 0; // 贸澜篮 官肺 雀汗茄促.
UpdateLife( pObject );
}
void CCharacterCalcManager::StartUpdateNaeRyuk( CPlayer* pPlayer, WORD plusNaeRyuk )
{
DWORD MaxVal = pPlayer->GetMaxNaeRyuk();
DWORD CurVal = pPlayer->GetNaeRyuk();
DWORD DamagedVal = MaxVal-CurVal;
if(DamagedVal < plusNaeRyuk)
plusNaeRyuk = DamagedVal;
pPlayer->m_YYNaeRyukRecoverTime.bStart = TRUE;
pPlayer->m_YYNaeRyukRecoverTime.count = RECOVERINTERVALUNIT; // 10锅俊 吧媚 雀汗茄促
pPlayer->m_YYNaeRyukRecoverTime.recoverUnitAmout = plusNaeRyuk/pPlayer->m_YYNaeRyukRecoverTime.count; // 茄锅俊 雀汗瞪 剧
pPlayer->m_YYNaeRyukRecoverTime.recoverDelayTime = RECOVERTIMEUNIT/pPlayer->m_YYNaeRyukRecoverTime.count; // 1檬埃 雀汗捞 肯丰等促
pPlayer->m_YYNaeRyukRecoverTime.lastCheckTime = 0; // 贸澜篮 官肺 雀汗茄促.
UpdateNaeRyuk( pPlayer );
}
void CCharacterCalcManager::UpdateNaeRyuk(CPlayer* pPlayer)
{
if( pPlayer->GetState() == eObjectState_Die )
return;
if( pPlayer->m_YYNaeRyukRecoverTime.bStart )
{
if(pPlayer->m_YYNaeRyukRecoverTime.recoverDelayTime + pPlayer->m_YYNaeRyukRecoverTime.lastCheckTime < gCurTime )
{
pPlayer->m_YYNaeRyukRecoverTime.lastCheckTime = gCurTime;
// 郴仿 刘啊
pPlayer->AddNaeRyuk( pPlayer->m_YYNaeRyukRecoverTime.recoverUnitAmout, NULL );
--pPlayer->m_YYNaeRyukRecoverTime.count;
if( pPlayer->m_YYNaeRyukRecoverTime.count ==0 )
{
pPlayer->m_YYNaeRyukRecoverTime.bStart = FALSE;
//CObjectEvent::ObjectEvent(pPlayer, OE_LEVELUP, &m_HeroCharacterInfo.Level);
}
}
}
}
void CCharacterCalcManager::UpdateLife(CObject* pObject)
{
if( pObject->GetState() == eObjectState_Die )
return;
if( pObject->m_YYLifeRecoverTime.bStart )
{
if(pObject->m_YYLifeRecoverTime.recoverDelayTime + pObject->m_YYLifeRecoverTime.lastCheckTime < gCurTime )
{
pObject->m_YYLifeRecoverTime.lastCheckTime = gCurTime;
// 积疙仿 刘啊
pObject->AddLife( pObject->m_YYLifeRecoverTime.recoverUnitAmout, NULL );
--pObject->m_YYLifeRecoverTime.count;
if( pObject->m_YYLifeRecoverTime.count ==0 )
{
pObject->m_YYLifeRecoverTime.bStart = FALSE;
//CObjectEvent::ObjectEvent(pObject, OE_LIFERECOVERCOMPLETED, NULL);
}
}
}
}
void CCharacterCalcManager::CalcMaxLife(CPlayer * pPlayer)
{
DWORD MaxLife = 0;
WORD Sta = pPlayer->GetCheRyuk();
LEVELTYPE level = pPlayer->GetLevel();
//[饭骇] * 5 + [眉仿] * 10
MaxLife = ( level * 5 ) + ( Sta * 10 );
// + 酒捞袍 啊魂
MaxLife += pPlayer->GetItemStats()->MaxLife;
// + 漂扁 啊魂
MaxLife += pPlayer->GetAbilityStats()->LifeUp;
pPlayer->SetMaxLife(MaxLife);
pPlayer->CheckLifeValid();
}
void CCharacterCalcManager::CalcMaxShield(CPlayer * pPlayer)
{
DWORD MaxShield = 0;
WORD Simmek = pPlayer->GetSimMek();
LEVELTYPE level = pPlayer->GetLevel();
// [饭骇] * 5 + [缴钙] * 10
MaxShield = ( level * 5 ) + ( Simmek * 10 );
// + 酒捞袍 啊魂
MaxShield += pPlayer->GetItemStats()->MaxShield;
// + 漂扁 啊魂
MaxShield += pPlayer->GetAbilityStats()->ShieldUp;
pPlayer->SetMaxShield(MaxShield);
pPlayer->CheckShieldValid();
}
void CCharacterCalcManager::CalcMaxNaeRyuk(CPlayer * pPlayer)
{
DWORD MaxEnergy = 0;
WORD Simmek = pPlayer->GetSimMek();
LEVELTYPE level = pPlayer->GetLevel();
// [饭骇] * 5 + [缴钙] * 10
MaxEnergy = ( level * 5 ) + ( Simmek * 10 );
MaxEnergy += pPlayer->GetItemStats()->MaxNaeRyuk;
// + 漂扁 啊魂
MaxEnergy += pPlayer->GetAbilityStats()->NaeRyukUp;
pPlayer->SetMaxNaeRyuk(MaxEnergy);
pPlayer->CheckNaeRyukValid();
}
void CCharacterCalcManager::ProcessLife(CPlayer * pPlayer)
{
if(pPlayer->GetState() == eObjectState_Die)
return;
DWORD life = pPlayer->GetLife();
DWORD maxlife = pPlayer->GetMaxLife();
LEVELTYPE level = pPlayer->GetLevel();
if(life == maxlife) return;
DWORD curTime = 0;
if(!pPlayer->m_LifeRecoverTime.bStart)
{
curTime = gCurTime;
}
else
{
curTime = pPlayer->m_LifeRecoverTime.lastCheckTime = gCurTime;
pPlayer->m_LifeRecoverTime.bStart = FALSE;
return;
}
if(pPlayer->GetState() != eObjectState_Ungijosik)
General_LifeCount(pPlayer, curTime, level, life, maxlife);
if(pPlayer->GetState() == eObjectState_Ungijosik)
Ungi_LifeCount(pPlayer,life,maxlife,curTime);
}
void CCharacterCalcManager::General_LifeCount(CPlayer * pPlayer, DWORD curTime, LEVELTYPE level, DWORD life, DWORD maxlife)
{
// 乞惑矫 雀汗 (5檬寸) 眉仿 : 傈眉狼 1%
if(curTime - pPlayer->m_LifeRecoverTime.lastCheckTime > 5000)
{
pPlayer->SetLife(life+(DWORD)(maxlife*0.01f));
pPlayer->m_LifeRecoverTime.lastCheckTime = curTime; //KES confirm
}
}
void CCharacterCalcManager::Ungi_LifeCount(CPlayer* pPlayer, DWORD life, DWORD maxlife, DWORD curTime)
{
//饭骇俊 惑包绝捞 5檬付促 傈眉樊狼 10(焊沥摹) + 3% 犁面傈
if(curTime - pPlayer->m_LifeRecoverTime.lastCheckTime > 5000)
{
DWORD baseplus = (DWORD)(10 + maxlife*(0.03f)) + pPlayer->m_AbilityStats.UngiUpVal;
DWORD pluslife = (DWORD)(maxlife*pPlayer->GetUngiPlusRate());
pPlayer->SetLife(life + baseplus + pluslife);
pPlayer->m_LifeRecoverTime.lastCheckTime = curTime;
}
}
void CCharacterCalcManager::ProcessShield(CPlayer * pPlayer)
{
if(pPlayer->GetState() == eObjectState_Die)
return;
DWORD shield = pPlayer->GetShield();
DWORD maxshield = pPlayer->GetMaxShield();
LEVELTYPE level = pPlayer->GetLevel();
if(shield == maxshield) return;
DWORD curTime = 0;
if(!pPlayer->m_ShieldRecoverTime.bStart)
{
curTime = gCurTime;
}
else
{
curTime = pPlayer->m_ShieldRecoverTime.lastCheckTime = gCurTime;
pPlayer->m_ShieldRecoverTime.bStart = FALSE;
return;
}
if(pPlayer->GetState() != eObjectState_Ungijosik)
General_ShieldCount(pPlayer, curTime, level, shield, maxshield);
if(pPlayer->GetState() == eObjectState_Ungijosik)
Ungi_ShieldCount(pPlayer,shield,maxshield,curTime);
}
void CCharacterCalcManager::General_ShieldCount(CPlayer * pPlayer, DWORD curTime, LEVELTYPE level, DWORD Shield, DWORD maxShield)
{
// 乞惑矫 雀汗 (5檬寸) 傈眉狼 1%
if(curTime - pPlayer->m_ShieldRecoverTime.lastCheckTime > 5000)
{
pPlayer->SetShield(Shield+(DWORD)(maxShield*0.05f));
pPlayer->m_ShieldRecoverTime.lastCheckTime = curTime; //KES捞犯霸 窍搁 救登瘤 臼巢? 沥犬洒 5檬付促啊 登瘤 给茄促.
}
}
void CCharacterCalcManager::Ungi_ShieldCount(CPlayer* pPlayer, DWORD Shield, DWORD maxShield, DWORD curTime)
{
//饭骇俊 惑包绝捞 5檬付促 傈眉樊狼 10(焊沥摹) + 8% 犁面傈
if(curTime - pPlayer->m_ShieldRecoverTime.lastCheckTime > 5000)
{
DWORD baseplus = (DWORD)(10 + maxShield*(0.08f)) + pPlayer->m_AbilityStats.UngiUpVal;
DWORD plusShield = (DWORD)(maxShield*pPlayer->GetUngiPlusRate());
pPlayer->SetShield(Shield + baseplus + plusShield);
pPlayer->m_ShieldRecoverTime.lastCheckTime = curTime;
}
}
void CCharacterCalcManager::ProcessNaeRyuk(CPlayer * pPlayer)
{
if(pPlayer->GetState() == eObjectState_Die)
return;
DWORD energy = pPlayer->GetNaeRyuk();
DWORD maxEnergy = pPlayer->GetMaxNaeRyuk();
LEVELTYPE level = pPlayer->GetLevel();
WORD KGIdx = pPlayer->m_MoveInfo.KyungGongIdx;
if(KGIdx != 0)
{
KyungGong_NaeRyukCount(pPlayer,gCurTime,KGIdx);
return;
}
if(energy == maxEnergy) return;
DWORD curTime = 0;
if(!pPlayer->m_NaeRyukRecoverTime.bStart)
{
curTime = gCurTime;
}
else
{
curTime = pPlayer->m_NaeRyukRecoverTime.lastCheckTime = gCurTime;
pPlayer->m_NaeRyukRecoverTime.bStart = FALSE;
return;
}
if(pPlayer->GetState() != eObjectState_Ungijosik)
General_NaeRyukCount(pPlayer, curTime, level, energy, maxEnergy);
else if(pPlayer->GetState() == eObjectState_Ungijosik)
Ungi_NaeRyukCount(pPlayer,curTime,energy,maxEnergy);
}
void CCharacterCalcManager::General_NaeRyukCount(CPlayer* pPlayer, DWORD curTime, LEVELTYPE level, DWORD energy, DWORD maxEnergy)
{
//乞惑矫 雀汗 (5檬寸) 郴仿 : 傈眉狼 1%
if(curTime - pPlayer->m_NaeRyukRecoverTime.lastCheckTime > 5000)
{
pPlayer->SetNaeRyuk(energy+(DWORD)(maxEnergy*0.01f));
pPlayer->m_NaeRyukRecoverTime.lastCheckTime = curTime;
}
}
void CCharacterCalcManager::Ungi_NaeRyukCount(CPlayer* pPlayer, DWORD curTime, DWORD energy, DWORD maxEnergy)
{
//饭骇俊 惑包绝捞 5檬付促 傈眉樊狼 10(焊沥摹) + 3% 犁面傈
if(curTime - pPlayer->m_NaeRyukRecoverTime.lastCheckTime > 5000)
{
DWORD baseplus = (DWORD)(10 + maxEnergy*(0.03f)) + pPlayer->m_AbilityStats.UngiUpVal;
DWORD plusval = (DWORD)(maxEnergy*pPlayer->GetUngiPlusRate());
pPlayer->SetNaeRyuk(energy + baseplus + plusval);
pPlayer->m_NaeRyukRecoverTime.lastCheckTime = curTime;
}
}
void CCharacterCalcManager::KyungGong_NaeRyukCount(CPlayer* pPlayer, DWORD curTime,WORD KyungGongIdx)
{
ASSERT(KyungGongIdx);
CKyungGongInfo* pKGInfo = KYUNGGONGMGR->GetKyungGongInfo(KyungGongIdx);
ASSERT(pKGInfo);
if(curTime - pPlayer->m_KyungGongNaeRyuk_LastCheckTime > 3000)
{
pPlayer->ReduceNaeRyuk(pKGInfo->GetNeedNaeRyuk());
if(pPlayer->GetNaeRyuk() == 0)
{
CCharMove::ForceStopKyungGong(pPlayer);
}
pPlayer->m_KyungGongNaeRyuk_LastCheckTime = curTime;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -