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

📄 statscalcmanager.cpp

📁 墨香最新私服
💻 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 + -