📄 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)
{
// RaMa - 04.11.24 ->¿î±âÁ¶½Ä½Ã°£
DWORD dwUngiTime = 5000;
dwUngiTime = dwUngiTime*(1/gUngiSpeed);
//·¹º§¿¡ »ó°ü¾øÀÌ 5Ãʸ¶´Ù Àüü·®ÀÇ 10(º¸Á¤Ä¡) + 3% ÀçÃæÀü
if(curTime - pPlayer->m_LifeRecoverTime.lastCheckTime > dwUngiTime)
{
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)
{
// RaMa - 04.11.24 ->¿î±âÁ¶½Ä½Ã°£
DWORD dwUngiTime = 5000;
dwUngiTime = dwUngiTime*(1/gUngiSpeed);
//·¹º§¿¡ »ó°ü¾øÀÌ 5Ãʸ¶´Ù Àüü·®ÀÇ 10(º¸Á¤Ä¡) + 8% ÀçÃæÀü
if(curTime - pPlayer->m_ShieldRecoverTime.lastCheckTime > dwUngiTime)
{
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)
{
// RaMa - 04.11.24 ->¿î±âÁ¶½Ä½Ã°£
DWORD dwUngiTime = 5000;
dwUngiTime = dwUngiTime*(1/gUngiSpeed);
//·¹º§¿¡ »ó°ü¾øÀÌ 5Ãʸ¶´Ù Àüü·®ÀÇ 10(º¸Á¤Ä¡) + 3% ÀçÃæÀü
if(curTime - pPlayer->m_NaeRyukRecoverTime.lastCheckTime > dwUngiTime)
{
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 + -