📄 statscalcmanager.cpp
字号:
// StatsCalcManager.cpp: implementation of the CStatsCalcManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "StatsCalcManager.h"
#include "GameResourceManager.h"
#ifdef _MHCLIENT_
#include "Hero.h"
#include "GameIn.h"
#endif
#ifdef _MAPSERVER_
#include "Player.h"
#endif
#include "CharacterCalcManager.h"
#include "ItemManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CStatsCalcManager::CStatsCalcManager()
{
}
CStatsCalcManager::~CStatsCalcManager()
{
}
void CStatsCalcManager::Clear(player_calc_stats * pStats)
{
memset(pStats, 0, sizeof(player_calc_stats));
}
// ÀåÂøÃ¢¿¡ ¾ÆÀÌÅÛ ÀåÂø,ÇØÁ¦½Ã
void CStatsCalcManager::CalcItemStats(PLAYERTYPE* pPlayer)
{
player_calc_stats * item_stats = pPlayer->GetItemStats();
Clear(item_stats);
// WORD ItemIdx;
// for(int part=0;part<eWearedItem_Max;++part)
// {
// ItemIdx = pPlayer->GetWearedItemIdx(part);
// if(ItemIdx == 0)
// continue;
for(POSTYPE part = TP_WEAR_START ; part < TP_WEAR_END ; ++part )
{
const ITEMBASE * pTargetItemBase = ITEMMGR->GetItemInfoAbsIn(pPlayer, part);
// yh óÀ½ µé¾î°¥¶§ ¹®Á¦°¡... -_-a
if(pTargetItemBase == NULL)
continue;
if(pTargetItemBase->dwDBIdx == 0)
continue;
ITEM_INFO * pItemInfo = ITEMMGR->GetItemInfo(pTargetItemBase->wIconIdx);
/// ASSERT(pItemInfo);
if(pItemInfo == NULL)
continue;
item_stats->MeleeAttackPowerMin += pItemInfo->MeleeAttackMin;
item_stats->MeleeAttackPowerMax += pItemInfo->MeleeAttackMax;
item_stats->RangeAttackPowerMin += pItemInfo->RangeAttackMin;
item_stats->RangeAttackPowerMax += pItemInfo->RangeAttackMax;
item_stats->PhysicalDefense += pItemInfo->PhyDef;
item_stats->AttributeAttack.AddATTRIBUTE_VAL(pItemInfo->AttrAttack);
item_stats->AttributeResist.AddATTRIBUTE_VAL(pItemInfo->AttrRegist);
item_stats->GenGol += pItemInfo->GenGol;
item_stats->MinChub += pItemInfo->MinChub;
item_stats->CheRyuk += pItemInfo->CheRyuk;
item_stats->SimMaek += pItemInfo->SimMek;
item_stats->MaxLife += pItemInfo->Life;
item_stats->MaxShield += pItemInfo->Shield;
item_stats->MaxNaeRyuk += pItemInfo->NaeRyuk;
if(ITEMMGR->IsOptionItem(pTargetItemBase->wIconIdx, pTargetItemBase->Durability))
{
#ifdef _MHCLIENT_
ITEM_OPTION_INFO * pOptionInfo = ITEMMGR->GetItemOption(pTargetItemBase->Durability);
#else
ITEM_OPTION_INFO * pOptionInfo = pPlayer->GetItemOption(pTargetItemBase->Durability);
#endif
item_stats->MeleeAttackPowerMin += pOptionInfo->PhyAttack;
item_stats->MeleeAttackPowerMax += pOptionInfo->PhyAttack;
item_stats->RangeAttackPowerMin += pOptionInfo->PhyAttack;
item_stats->RangeAttackPowerMax += pOptionInfo->PhyAttack;
item_stats->PhysicalDefense += pOptionInfo->PhyDefense;
item_stats->AttributeAttack.AddATTRIBUTE_VAL(pOptionInfo->AttrAttack);
item_stats->AttributeResist.AddATTRIBUTE_VAL(pOptionInfo->AttrRegist);
item_stats->GenGol += pOptionInfo->GenGol;
item_stats->MinChub += pOptionInfo->MinChub;
item_stats->CheRyuk += pOptionInfo->CheRyuk;
item_stats->SimMaek += pOptionInfo->SimMek;
item_stats->MaxLife += pOptionInfo->Life;
item_stats->MaxShield += pOptionInfo->Shield;
item_stats->MaxNaeRyuk += pOptionInfo->NaeRyuk;
item_stats->Critical += pOptionInfo->CriticalPercent;
}
}
if(item_stats->MeleeAttackPowerMax == 0) // ±âº» ¹«±â °ø°Ý·ÂÀº 5
{
item_stats->MeleeAttackPowerMax = 5;
item_stats->MeleeAttackPowerMin = 5;
}
if(item_stats->RangeAttackPowerMax == 0)
{
item_stats->RangeAttackPowerMax = 5;
item_stats->RangeAttackPowerMin = 5;
}
item_stats->AttributeResist.CheckLimit(1); // ÀúÇ×·ÂÀº ÃÖ´ë°ªÀÌ 1
// ¾ÆÀÌÅÛ ¼öÄ¡°¡ º¯°æµÇ¸é ij¸¯ÅÍ ¼öÄ¡µµ º¯°æ
CalcCharStats(pPlayer);
}
// ij¸¯°ÔÀÓIn
// ·¹º§¾÷½Ã ( ´É·ÂÄ¡ ¹Ù²ð¶§)
// ¹«°ø¹ßµ¿½Ã(+´É·ÂÄ¡) : ±¸Á¶Ã¼¸¦ Çϳª ´õ µÖ¾ß Çϳª?
void CStatsCalcManager::CalcCharStats(PLAYERTYPE* pPlayer)
{
player_calc_stats * char_stats = pPlayer->GetCharStats();
Clear(char_stats);
HERO_TOTALINFO pHeroInfo;
pPlayer->GetHeroTotalInfo(&pHeroInfo);
// ¾ÆÀÌÅÛ ÀåÂøÇѰſ¡ µû¸¥ ij¸¯ÅÍ ¼öÄ¡ ¼ÂÆÃ
char_stats->MinChub = pHeroInfo.wMinChub;
char_stats->GenGol = pHeroInfo.wGenGol;
char_stats->PhysicalDefense = (WORD)((pPlayer->GetCheRyuk()/1.5)*0.6);
// 10/27 ¼öÄ¡ º¯°æÀü char_stats->PhysicalDefense = pHeroInfo.wCheRyuk/3;
char_stats->Critical = pPlayer->GetGenGol() / 4;
#ifdef _MAPSERVER_
CCharacterCalcManager::CalcMaxLife(pPlayer);
CCharacterCalcManager::CalcMaxShield(pPlayer);
CCharacterCalcManager::CalcMaxNaeRyuk(pPlayer);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -