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

📄 handler_item.cpp

📁 真正的传奇源代码
💻 CPP
字号:
#include "stdafx.h"

int CItem::GetUpgrade(int nCount, int nRandom)
{
	int nResult = 0;

	for (int i = 0; i < nCount; i++)
	{
		if ((rand() % nRandom) == 0)
			nResult++;
		else
			break;
	}

	return nResult;
}

void CStdItem::GetStandardItem(_LPTCLIENTITEMRCD lpClientItemRcd)
{
	strcpy(lpClientItemRcd->tStdItem.szName, szName);

	lpClientItemRcd->tStdItem.btStdMode		= (BYTE)wStdMode;
	lpClientItemRcd->tStdItem.btShape		= (BYTE)wShape;
	lpClientItemRcd->tStdItem.btWeight		= (BYTE)wWeight;
	lpClientItemRcd->tStdItem.btAniCount	= 0;
	lpClientItemRcd->tStdItem.btSource		= 0;
	lpClientItemRcd->tStdItem.wLooks		= (WORD)dwLooks;
	lpClientItemRcd->tStdItem.wDuraMax		= (WORD)wDuraMax;
	lpClientItemRcd->tStdItem.btNeed		= 0;
	lpClientItemRcd->tStdItem.btNeedLevel	= 0;
	lpClientItemRcd->tStdItem.nPrice		= (UINT)dwPrice;
}

CStdItemSpecial::CStdItemSpecial()
{
}

void CStdItemSpecial::GetStandardItem(_LPTCLIENTITEMRCD lpClientItemRcd)
{
	memcpy(lpClientItemRcd->tStdItem.szName, szName, memlen(szName));

	lpClientItemRcd->tStdItem.btStdMode			= (BYTE)wStdMode;
	lpClientItemRcd->tStdItem.btShape			= (BYTE)wShape;
	lpClientItemRcd->tStdItem.btWeight			= (BYTE)wWeight;
	lpClientItemRcd->tStdItem.btAniCount		= (BYTE)wAniCount;
	lpClientItemRcd->tStdItem.btSource			= (BYTE)wSource;
//	lpClientItemRcd->tStdItem.btNeedIdentify	= (BYTE)g_pStdItemWeapon[nIdx].wNeedIdentify;
	lpClientItemRcd->tStdItem.wLooks			= (WORD)dwLooks;
	lpClientItemRcd->tStdItem.wDuraMax			= (WORD)wDuraMax;
	lpClientItemRcd->tStdItem.btNeed			= (BYTE)wNeed;
	lpClientItemRcd->tStdItem.btNeedLevel		= (BYTE)wNeedLevel;
	lpClientItemRcd->tStdItem.nPrice			= (UINT)dwPrice;
}

void CStdItemSpecial::GetUpgradeStdItem(_LPTCLIENTITEMRCD lpClientItemRcd, _LPTUSERITEMRCD lpUserItemRcd)
{
/*	switch (lpUserItemRcd->szMakeIndex[0])
	{
		case 'A': // Weapon
		{
			lpClientItemRcd->tStdItem.wDC		= MAKEWORD(g_pStdItemWeapon[nIdx].wDC, g_pStdItemWeapon[nIdx].wDC2 + lpUserItemRcd->btValue[0]);
			lpClientItemRcd->tStdItem.wMC		= MAKEWORD(g_pStdItemWeapon[nIdx].wMC, g_pStdItemWeapon[nIdx].wMC2 + lpUserItemRcd->btValue[1]);
			lpClientItemRcd->tStdItem.wSC		= MAKEWORD(g_pStdItemWeapon[nIdx].wSC, g_pStdItemWeapon[nIdx].wSC2 + lpUserItemRcd->btValue[2]);										//3:青款, 4:历林
			lpClientItemRcd->tStdItem.wAC		= MAKEWORD(g_pStdItemWeapon[nIdx].wAC + lpUserItemRcd->btValue[3], g_pStdItemWeapon[nIdx].wAC2 + lpUserItemRcd->btValue[5]);			//沥犬
			lpClientItemRcd->tStdItem.wMAC		= MAKEWORD(g_pStdItemWeapon[nIdx].wMAC + lpUserItemRcd->btValue[4], g_pStdItemWeapon[nIdx].wMAC2 + lpUserItemRcd->btValue[6]);		//傍拜加档(-/+)
			lpClientItemRcd->tStdItem.btSource	= (BYTE)lpUserItemRcd->btValue[7];

			if (lpUserItemRcd->btValue[10]) lpClientItemRcd->tStdItem.btNeedIdentify = 0x01;

			break;
		}
		case 'B': // Armor
		{
			lpClientItemRcd->tStdItem.wAC	= MAKEWORD(g_pStdItemArmor[nIdx].wAC, g_pStdItemArmor[nIdx].wAC2 + lpUserItemRcd->btValue[0]);
			lpClientItemRcd->tStdItem.wDC	= MAKEWORD(g_pStdItemArmor[nIdx].wDC, g_pStdItemArmor[nIdx].wDC2 + lpUserItemRcd->btValue[2]);
			lpClientItemRcd->tStdItem.wMAC	= MAKEWORD(g_pStdItemArmor[nIdx].wMAC, g_pStdItemArmor[nIdx].wMAC2 + lpUserItemRcd->btValue[1]);
			lpClientItemRcd->tStdItem.wMC	= MAKEWORD(g_pStdItemArmor[nIdx].wMC, g_pStdItemArmor[nIdx].wMC2 + lpUserItemRcd->btValue[3]);
			lpClientItemRcd->tStdItem.wSC	= MAKEWORD(g_pStdItemArmor[nIdx].wSC, g_pStdItemArmor[nIdx].wSC2 + lpUserItemRcd->btValue[4]);
			
			break;
		}
		case 'C': // Accessory
		{
			lpClientItemRcd->tStdItem.wAC  = MAKEWORD(g_pStdItemAccessory[nIdx].wAC, g_pStdItemAccessory[nIdx].wAC2 + lpUserItemRcd->btValue[0]);
			lpClientItemRcd->tStdItem.wMAC = MAKEWORD(g_pStdItemAccessory[nIdx].wMAC,g_pStdItemAccessory[nIdx].wMAC2+ lpUserItemRcd->btValue[1]);
			lpClientItemRcd->tStdItem.wDC  = MAKEWORD(g_pStdItemAccessory[nIdx].wDC, g_pStdItemAccessory[nIdx].wDC2 + lpUserItemRcd->btValue[2]);
			lpClientItemRcd->tStdItem.wMC  = MAKEWORD(g_pStdItemAccessory[nIdx].wMC, g_pStdItemAccessory[nIdx].wMC2 + lpUserItemRcd->btValue[3]);
			lpClientItemRcd->tStdItem.wSC  = MAKEWORD(g_pStdItemAccessory[nIdx].wSC, g_pStdItemAccessory[nIdx].wSC2 + lpUserItemRcd->btValue[4]);

			break;
		}
	}
*/	
	switch (btType)
	{
		case 0:
		{
			lpClientItemRcd->tStdItem.wDC		= MAKEWORD(wDC, wDC2 + lpUserItemRcd->btValue[0]);
			lpClientItemRcd->tStdItem.wMC		= MAKEWORD(wMC, wMC2 + lpUserItemRcd->btValue[1]);
			lpClientItemRcd->tStdItem.wSC		= MAKEWORD(wSC, wSC2 + lpUserItemRcd->btValue[2]); //3:青款, 4:历林
			lpClientItemRcd->tStdItem.wAC		= MAKEWORD(wAC + lpUserItemRcd->btValue[3], wAC2 + lpUserItemRcd->btValue[5]);  //沥犬
			lpClientItemRcd->tStdItem.wMAC		= MAKEWORD(wMAC + lpUserItemRcd->btValue[4], wMAC2 + lpUserItemRcd->btValue[6]);  //傍拜加档(-/+)
			lpClientItemRcd->tStdItem.btSource	= lpUserItemRcd->btValue[7];
		//	if (lpMakeItemRcd->btValue[10])
		//		lptWeaponItem->NeedIdentify := 0x01;
			break;
		}
		case 1:
		{
			lpClientItemRcd->tStdItem.wAC	= MAKEWORD(wAC, wAC2 + lpUserItemRcd->btValue[0]);
			lpClientItemRcd->tStdItem.wMAC	= MAKEWORD(wMAC, wMAC2 + lpUserItemRcd->btValue[1]);
			lpClientItemRcd->tStdItem.wDC	= MAKEWORD(wDC, wDC2 + lpUserItemRcd->btValue[2]);
			lpClientItemRcd->tStdItem.wMC	= MAKEWORD(wMC, wMC2 + lpUserItemRcd->btValue[3]);
			lpClientItemRcd->tStdItem.wSC	= MAKEWORD(wSC, wSC2 + lpUserItemRcd->btValue[4]);

			break;
		}
		case 2:
		{
			lpClientItemRcd->tStdItem.wAC  = MAKEWORD(wAC, wAC2 + lpUserItemRcd->btValue[0]);
			lpClientItemRcd->tStdItem.wMAC = MAKEWORD(wMAC,wMAC2+ lpUserItemRcd->btValue[1]);
			lpClientItemRcd->tStdItem.wDC  = MAKEWORD(wDC, wDC2 + lpUserItemRcd->btValue[2]);
			lpClientItemRcd->tStdItem.wMC  = MAKEWORD(wMC, wMC2 + lpUserItemRcd->btValue[3]);
			lpClientItemRcd->tStdItem.wSC  = MAKEWORD(wSC, wSC2 + lpUserItemRcd->btValue[4]);

			break;
		}
		default:
		{
			lpClientItemRcd->tStdItem.wAC		= 0;
			lpClientItemRcd->tStdItem.wMAC		= 0;
			lpClientItemRcd->tStdItem.wDC		= 0;
			lpClientItemRcd->tStdItem.wMC		= 0;
			lpClientItemRcd->tStdItem.wSC		= 0;
			lpClientItemRcd->tStdItem.btSource	= 0;

			break;
		}
	}
}

void CStdItemSpecial::UpgradeRandomItem(BYTE* btValue, WORD &nDura, WORD &nDuraMax)//_LPTMAKEITEMRCD lpMakeItemRcd)
{
	int nUpgrade, nIncp, nVal;

	switch (btType)
	{
		case 0:	// 公扁
		{
			// 颇鲍 可记
			nUpgrade = GetUpgrade(12, 15);
			if (rand() % 15 == 0) 
				btValue[0] = 1 + nUpgrade;	// DC

			// 傍拜 加档
			nUpgrade = GetUpgrade(12, 15);
			if (rand() % 20 == 0)
			{
				nIncp = (int)((1 + nUpgrade) / 3);

				if (nIncp > 0)
				{
					if (rand() % 3 != 0) btValue[6] = nIncp;	// 傍拜 加档 (-)
					else
						btValue[6] = 10 + nIncp; // 傍拜 加档 (+)
				}
			}

			// 付仿
			nUpgrade = GetUpgrade(12, 15);
			if (rand() % 15 == 0) 
				btValue[1] = 1 + nUpgrade;	// MC

			// 档仿
			nUpgrade = GetUpgrade(12, 15);
			if (rand() % 15 == 0) 
				btValue[2] = 1 + nUpgrade;	// SC

			// 沥犬
			nUpgrade = GetUpgrade(12, 15);
			if (rand() % 24 == 0) 
				btValue[5] = 1 + ((int)nUpgrade / 2);	// 沥犬 (+)

			// 郴备
			nUpgrade = GetUpgrade(12, 12);
			if (rand() % 3 < 2)
			{
				nVal = (1 + nUpgrade) * 2000;
				
				nDuraMax	= _MIN(65000, nDuraMax + nVal);
				nDura		= _MIN(65000, nDura + nVal);
			}

			// 碍档
			nUpgrade = GetUpgrade(12, 15);
			if (rand() % 10 == 0) 
				btValue[7] = 1 + ((int)nUpgrade / 2);

			break;
		}
		case 1:	// 规绢备幅
		{
			//规绢
			nUpgrade = GetUpgrade(6, 15);
			if (rand() % 40 == 0) 
				btValue[0] = 1 + nUpgrade;	// AC

			//付亲
			nUpgrade = GetUpgrade(6, 15);
			if (rand() % 40 == 0) 
				btValue[1] = 1 + nUpgrade;	// MAC

			//颇鲍
			nUpgrade = GetUpgrade(6, 20);
			if (rand() % 40 == 0) 
				btValue[2] = 1 + nUpgrade;	// DC

			//付过
			nUpgrade = GetUpgrade(6, 20);
			if (rand() % 40 == 0) 
				btValue[3] = 1 + nUpgrade;	// MC

			//档仿
			nUpgrade = GetUpgrade(6, 20);
			if (rand() % 40 == 0) 
				btValue[4] = 1 + nUpgrade;	// SC

			//郴备
			nUpgrade = GetUpgrade(6, 10);
			if (rand() % 8 < 6)
			{
				nVal = (1 + nUpgrade) * 2000;
				
				nDuraMax	= _MIN(65000, nDuraMax + nVal);
				nDura		= _MIN(65000, nDura + nVal);
			}

			break;
		}
		case 2:	// 馆瘤, 迫瘤, 格吧捞
		{
			// 沥犬
			nUpgrade = GetUpgrade(6, 30);
			if (rand() % 60 == 0) 
				btValue[0] = 1 + nUpgrade;	// AC(HIT)

			//刮酶
			nUpgrade = GetUpgrade(6, 30);
			if (rand() % 60 == 0) 
				btValue[1] = 1 + nUpgrade;	// MAC(SPEED)

			//颇鲍
			nUpgrade = GetUpgrade(6, 20);
			if (rand() % 30 == 0) 
				btValue[2] = 1 + nUpgrade;	// DC

			//付过
			nUpgrade = GetUpgrade(6, 20);
			if (rand() % 30 == 0) 
				btValue[3] = 1 + nUpgrade;	// MC

			//档仿
			nUpgrade = GetUpgrade(6, 20);
			if (rand() % 30 == 0) 
				btValue[4] = 1 + nUpgrade;	// SC

			//郴备
			nUpgrade = GetUpgrade(6, 12);
			if (rand() % 20 < 15)
			{
				nVal = (1 + nUpgrade) * 1000;
				
				nDuraMax	= _MIN(65000, nDuraMax + nVal);		//DURA Stuffs
				nDura		= _MIN(65000, nDura + nVal);
			}

			break;
		}
	}
}

void CStdItemSpecial::ApplyItemParameters(CObjectAddAbility *m_pAddAbility)
{
	switch (btType)
	{
		case 0:
		{
            m_pAddAbility->HIT			= m_pAddAbility->HIT + wAC2;

            if (wMAC2 > 10)
               m_pAddAbility->HitSpeed	= m_pAddAbility->HitSpeed + wMAC2 - 10; //傍拜加档 (+)
            else
               m_pAddAbility->HitSpeed	= m_pAddAbility->HitSpeed - wMAC2; //傍拜加档 (-)

            m_pAddAbility->Luck			= m_pAddAbility->Luck + wAC;   //霸烙惑狼 捞亥飘甫 烹秦 嘿澜
            m_pAddAbility->UnLuck		= m_pAddAbility->UnLuck + wMAC;  //霸烙惑狼 捞亥飘甫 烹秦 嘿澜(乔纳捞)

			break;
		}
		case 1:
		{															   
			m_pAddAbility->AC	= MAKEWORD(LOBYTE(m_pAddAbility->AC) + wAC, HIBYTE(m_pAddAbility->AC) + wAC2);
			m_pAddAbility->MAC	= MAKEWORD(LOBYTE(m_pAddAbility->MAC) + wMAC, HIBYTE(m_pAddAbility->MAC) + wMAC2);

			break;
		}
		case 2:
		{
			switch (wStdMode)
			{
				case 21: //格吧捞
					m_pAddAbility->AntiMagic	+= wAC2;
					m_pAddAbility->UnLuck		+= wMAC;
					m_pAddAbility->Luck			+= wMAC2;
					break;
				case 22: //格吧捞
				case 41: //迫骂
					m_pAddAbility->HIT			+= wAC2;
					m_pAddAbility->SPEED		+= wMAC2;
					break;
				case 23: //格吧捞
					m_pAddAbility->HealthRecover	+= wAC2;
					m_pAddAbility->SpellRecover		+= wMAC2;
					m_pAddAbility->HitSpeed			+= wAC;
					m_pAddAbility->HitSpeed			-= wMAC;
					break;
				case 32: //馆瘤
					m_pAddAbility->AntiPoison		+= wAC2;
					m_pAddAbility->PoisonRecover	+= wMAC2;
					m_pAddAbility->HitSpeed			+= wAC;
					m_pAddAbility->HitSpeed			-= wMAC;
					break;
				default:
					m_pAddAbility->AC	= MAKEWORD(LOBYTE(m_pAddAbility->AC) + wAC, HIBYTE(m_pAddAbility->AC) + wAC2);
					m_pAddAbility->MAC	= MAKEWORD(LOBYTE(m_pAddAbility->MAC) + wMAC, HIBYTE(m_pAddAbility->MAC) + wMAC2);
					break;
			}

			break;
		}
	}

	m_pAddAbility->DC = MAKEWORD(LOBYTE(m_pAddAbility->DC) + wDC, HIBYTE(m_pAddAbility->DC) + wDC2);
	m_pAddAbility->MC = MAKEWORD(LOBYTE(m_pAddAbility->MC) + wMC, HIBYTE(m_pAddAbility->MC) + wMC2);
	m_pAddAbility->SC = MAKEWORD(LOBYTE(m_pAddAbility->SC) + wSC, HIBYTE(m_pAddAbility->SC) + wSC2);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -