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

📄 magicstate.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MagicState.cpp: implementation of the CMagicState class.
//
//////////////////////////////////////////////////////////////////////

#include "..\stdafx.h"
#include "MagicState.h"

#include "..\LowerLayers\MyLog.h"

///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////

CMagicState::CMagicState()
{
  Clear();
}

///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////

void CMagicState::Clear()
{	//< CSD-TW-030623
	ClearTransMap();          // 厘家 扁撅 沥焊 檬扁拳
	ClearMagic();             // 付过 锅龋 檬扁拳

	ClearActiveState();
	ClearPassiveState();
	ClearRecoveryState();
	
	m_nAttack = 0;            // 拱府利 傍拜 雀荐 
	m_nNature = NAT_NORMAL;   // 己龙 惑怕 檬扁拳
	m_nState = CON_NORMAL;    // 付过 惑怕 檬扁拳
	m_bTamed = false;         // 抛捞怪 咯何 檬扁拳  
	m_bSummon = false;        // 家券 阁胶磐 咯何 檬扁拳
	m_wPoisonedPoint = 0;     // 吝刀登菌阑 锭 HP啊 皑家登绰 剧 檬扁拳
	m_wPoisonedCount = 0;     // 吝刀登菌阑 锭 HP啊 皑家登绰 檬 檬扁拳
	m_nLifeUp = 0;            // Life 刘啊樊
	
	m_dwAttack = 0;           // 拱府利 傍拜 矫埃 檬扁拳
	m_dwCasting = 0;          // 付过 矫傈 矫累 矫埃 檬扁拳
	m_dwContinue = 0;         // 付过 矫傈 蜡瘤 矫埃 檬扁拳
	m_bLock = true;           // 付过 矫傈 汲沥 檬扁拳
	
	apShort.Clear();          // 窜芭府 拱府利 傍拜仿
	apMiddle.Clear();         // 吝芭府 拱府利 傍拜仿
	apLong.Clear();           // 厘芭府 拱府利 傍拜仿
	
	dpShort.Clear();          // 窜芭府 拱府利 规绢仿
	dpMiddle.Clear();         // 吝芭府 拱府利 规绢仿
	dpLong.Clear();           // 厘芭府 拱府利 规绢仿
	
	dpFire.Clear();           // 阂拌凯 傍拜付过  规绢仿
	dpIce.Clear();            // 倔澜拌凯 傍拜付过 规绢仿
	dpElect.Clear();          // 傈拜拌凯 傍拜付过 规绢仿
	dpHoly.Clear();           // 脚仿拌凯 傍拜付过 规绢仿
	
	dpCurse1.Clear();         // 历林 1拌凯 付过 规绢仿
	dpCurse2.Clear();         // 历林 2拌凯 付过 规绢仿
	dpCurse3.Clear();         // 历林 3拌凯 付过 规绢仿
	dpCurse4.Clear();         // 历林 4拌凯 付过 规绢仿
	dpCurse5.Clear();         // 历林 5拌凯 付过 规绢仿
	dpFreeze.Clear();         // CSD-021216 : 倔覆 历林 付过 规绢仿
    
	amplify.Clear();          // 傍拜 付过 单固瘤
	speedUp.Clear();          // 捞悼加档 刘啊   
	speedDown.Clear();        // 捞悼加档 皑家  
	
	avoid.Clear();            // 雀乔啦
	agility.Clear();          // 刮酶己
	
	dwCurse1 = 0;             // 历林 1拌凯 付过 惑怕 
	dwCurse2 = 0;             // 历林 2拌凯 付过 惑怕 
	dwCurse3 = 0;             // 历林 3拌凯 付过 惑怕 
	dwCurse4 = 0;             // 历林 4拌凯 付过 惑怕 
	dwFreeze = 0;             // CSD-021024 : 倔覆 历林 付过 惑怕
	
	dwNormalProtect = 0;      // 老馆 焊龋拌凯 付过 惑怕
	dwSpecialProtect = 0;     // 漂荐 焊龋拌凯 付过 惑怕 
	dwExceptProtect = 0;      // 抗寇 焊龋拌凯 付过 惑怕 (葛电 付过捞 角菩)
	
	dwAttackDelay = 0;	      // 傍拜 加档 皑家(某腐磐啊 傍拜 且荐 乐绰 咯何)
	dwDontMove = 0;           // 捞悼捞 登瘤 臼澜
	dwDontAttack = 0;		      // 老馆利牢 傍拜捞 登瘤 臼澜
	dwDontCasting = 0;		    // 付过 某胶泼捞 登瘤 臼澜
	dwDontMiss = 0;           // 葛电 拱府利 傍拜苞 付过捞 己傍
	dwBlocking = 0;           // 寇何客 瞒窜等 惑怕
	dwLight = 0;              // 林困俊 蝴阑 灌洒绰 惑怕  
	dwMagicDamageToMana = 0;  // 惑措狼 傍拜 付过阑 付唱甫 家葛窍咯 阜酒晨
	dwReturnMagic = 0;		    // 付过狼 瓤苞甫 矫傈磊俊霸 登倒覆
	dwTransparency = 0;		    // 某腐磐啊 捧疙窍霸 凳 
	dwLifeUp = 0;             // 老沥 矫埃悼救 Life啊 棵扼皑
	dwStrikeReflect = 0;      // CSD-021015 : 拱府傍拜 单固瘤 馆荤
	dwMagicReflect = 0;       // CSD-021015 : 付过傍拜 单固瘤 馆荤
	dwUpDivineMana = 0;		// 030415 kyo

	for (int i = 0; i < NAT_NORMAL; ++i)
	{
		dwNature[i] = 0;
	}
}	//> CSD-TW-030623

void CMagicState::Recovery(DWORD dwNow)
{	//< CSD-TW-030623 : 蜡瘤矫埃捞 瘤抄 付过俊 措窍咯 惑怕甫 雀汗
	// 付过 惑怕 八荤
	if (apShort.IsContinue(dwNow) == false)  apShort.Clear();
	if (apMiddle.IsContinue(dwNow) == false)  apMiddle.Clear();
	if (apLong.IsContinue(dwNow) == false)  apLong.Clear();
	if (dpShort.IsContinue(dwNow) == false)  dpShort.Clear();
	if (dpMiddle.IsContinue(dwNow) == false)  dpMiddle.Clear();
	if (dpLong.IsContinue(dwNow) == false)  dpLong.Clear();
	
	if (dpFire.IsContinue(dwNow) == false)  dpFire.Clear();
	if (dpIce.IsContinue(dwNow) == false)  dpIce.Clear();
	if (dpElect.IsContinue(dwNow) == false)  dpElect.Clear();
	if (dpHoly.IsContinue(dwNow) == false)  dpHoly.Clear();
	
	if (dpCurse1.IsContinue(dwNow) == false)  dpCurse1.Clear();
	if (dpCurse2.IsContinue(dwNow) == false)  dpCurse2.Clear();
	if (dpCurse3.IsContinue(dwNow) == false)  dpCurse3.Clear();
	if (dpCurse4.IsContinue(dwNow) == false)  dpCurse4.Clear();
	if (dpCurse5.IsContinue(dwNow) == false)  dpCurse5.Clear();
	if (dpFreeze.IsContinue(dwNow) == false)  dpFreeze.Clear();
	
	if (amplify.IsContinue(dwNow) == false)  amplify.Clear();  
	if (speedUp.IsContinue(dwNow) == false)  speedUp.Clear();
	if (speedDown.IsContinue(dwNow) == false)  speedDown.Clear();  
	if (avoid.IsContinue(dwNow) == false)  avoid.Clear();
	if (agility.IsContinue(dwNow) == false)  agility.Clear();
	
	if (dwNormalProtect < dwNow)  dwNormalProtect = 0;
	if (dwSpecialProtect < dwNow)  dwSpecialProtect = 0;
	if (dwExceptProtect < dwNow)  dwExceptProtect = 0;
	
	if (dwAttackDelay < dwNow)  dwAttackDelay = 0;
	if (dwDontMove < dwNow)  dwDontMove = 0;
	if (dwDontAttack < dwNow)  dwDontAttack = 0;
	if (dwDontCasting < dwNow)  dwDontCasting = 0;
	if (dwDontMiss < dwNow)  dwDontMiss = 0;
	if (dwBlocking < dwNow)  dwBlocking = 0;
	if (dwLight < dwNow) dwLight = 0;
	if (dwTransparency < dwNow)  dwTransparency = 0;
	
	if (dwMagicDamageToMana < dwNow)  dwMagicDamageToMana = 0;
	if (dwReturnMagic < dwNow)  dwReturnMagic = 0;
	if (dwLifeUp < dwNow)  dwLifeUp = 0;
	if (dwStrikeReflect < dwNow)  dwStrikeReflect = 0;
	if (dwMagicReflect < dwNow)  dwMagicReflect = 0;
	if (dwUpDivineMana < dwNow) dwUpDivineMana = 0;
	
	for (int i = 0; i < NAT_NORMAL; ++i)
	{
		if (dwNature[i] < dwNow)
		{
			dwNature[i] = 0;
			m_nNature = NAT_NORMAL;
		}
	}
	
	if (dwCombatState < dwNow)  dwCombatState = 0;
	if (dwCombatRecovery < dwNow)  dwCombatRecovery = 0; 
}	//> CSD-TW-030623

bool CMagicState::CheckAttack(BYTE nCount, DWORD dwNow)
{
	if (m_dwAttack < dwNow)
	{
		m_dwAttack = dwNow;
		m_nAttack = 0;
	}
	else
	{
		if (m_nAttack >= nCount)
		{
			return false;
		}
		
		++m_nAttack;
	}
	
	return true;
}

bool CMagicState::CheckStart(BYTE nMagic, DWORD dwNow)
{	//< CSD-TW-030606
	switch (Magic_Ref[nMagic].magic_Type)
	{
	case 0:
	case 9: return false;
	}
	
	if (m_dwCasting > dwNow)
	{
		return false;
	}
	// 拳堪寒牢 版快 蜡瘤 矫埃 汲沥
	if (nMagic == FIRE_WALL)  
	{
		m_dwFireWall = dwNow + Magic_Ref[nMagic].continue_Time;
	}
	// 倔澜寒牢 版快 蜡瘤 矫埃 汲沥
	if (nMagic == ICE_WALL)  
	{
		m_dwIceWall = dwNow + Magic_Ref[nMagic].continue_Time;
	}
	
	m_nMagic = nMagic;                              // 矫傈且 付过 锅龋 汲沥
	m_dwCasting = dwNow + DELAY;                    // 付过 矫傈 矫累 矫埃
	m_dwContinue = dwNow + GetCastContinue(nMagic); // 某胶泼 蜡瘤 矫埃 汲沥
	m_bLock = true;                                 // 付过 矫傈 汲沥
	return true;
}	//> CSD-TW-030606

bool CMagicState::CheckDoing(BYTE nMagic, DWORD dwNow)
{ //
	switch (Magic_Ref[nMagic].Excute_Type)
	{
    case 0: // 茄锅 矫傈俊 某胶泼 蜡瘤 矫埃悼救 付过 荤侩
		{
			if (m_dwContinue < dwNow)  
			{ // 蜡瓤茄 付过 矫傈 啊瓷 矫埃牢瘤 八荤
				return false;
			}
			
			break;
		}
    case 1: // 茄锅 矫傈俊 茄锅 付过 荤侩
		{
			if (m_bLock == false)  
			{ // 矫傈阑 沁绰瘤 八荤
				return false;
			}
			
			break;
		}
    default: return false;
	}
	
	m_nMagic = nMagic; // 荤侩且 付过 锅龋 汲沥
	return true;
}

bool CMagicState::CheckEnd(BYTE nMagic, DWORD dwNow)
{ //
	// 拳堪寒 蜡瘤 矫埃 八荤
	if (nMagic == FIRE_WALL && m_dwFireWall < dwNow)  
	{ 
		return false;
	}
	// 倔澜寒 蜡瘤 矫埃 八荤
	if (nMagic == ICE_WALL && m_dwIceWall < dwNow)  
	{ 
		return false;
	}
	
	m_nMagic = nMagic; // 荤侩且 付过 锅龋 汲沥
	return true;
}

bool CMagicState::CheckDelay(BYTE nMagic, DWORD dwNow)
{ // 蜡瓤茄 付过 矫傈 啊瓷 矫埃牢瘤 八荤
	if (m_dwCasting > dwNow)  
	{ // 蜡瓤茄 付过 矫傈 啊瓷 矫埃牢瘤 八荤
		return false;
	}
	
	m_nMagic = nMagic;                             // 荤侩且 付过 锅龋 汲沥
	m_dwCasting = dwNow + GetCastContinue(nMagic); // 某胶泼 蜡瘤 矫埃 汲沥 
	return true;
}

bool CMagicState::CheckCombat(BYTE nCombat, DWORD dwNow)
{
	if (dwCombatState > dwNow)  
	{ // 蜡瓤茄 付过 矫傈 啊瓷 矫埃牢瘤 八荤
		return false;
	}
	
	return true;
}

void CMagicState::InitCurse()
{ //< CSD-021024 : 历林拌凯 付过 惑怕俊 措茄 檬扁拳
	dwCurse1 = 0;
	dwCurse2 = 0;
	dwCurse3 = 0;
	dwCurse4 = 0;
	dwFreeze = 0;
} //> CSD-021024

void CMagicState::ClearCurse(BYTE nType)
{
	switch (nType)
	{
    case 1: 
		{ 
			dwCurse1 = 0;
			dwDontCasting = 0;
			dwDontAttack = 0;
			dwBlocking = 0;
			DelState(CON_CURSE|CON_DAZE|CON_STONE);
			break;
		} 
    case 2: 
		{ //< CSD-021024
			dwCurse2 = 0;
			speedDown.Clear();
			DelState(CON_SLOW);
			break;
		} //> CSD-021024
    case 3: 
		{
			dwCurse3 = 0; 
			dwCurse3 = 0;
			m_wPoisonedPoint = 0;
			DelState(CON_POISON);
			break;
		}
    case 4: 
		{
			dwCurse4 = 0;
			DelState(CON_DARKNESS);
			break;
		}
    case 6:
		{ //< CSD-021024
			dwFreeze = 0;
			dwAttackDelay = 0;
			DelState(CON_FROZEN);
			break;
		} //> CSD-021024
	}
}

void CMagicState::ApplyCurse(BYTE nType, BYTE nState, DWORD dwTime)
{ //< CSD-021024 : 历林拌凯 付过 惑怕肺 利侩
	switch (nType)
	{
    case 1: dwCurse1 = dwTime; AddState(nState); break;
    case 2: dwCurse2 = dwTime; AddState(nState); break;
    case 3: dwCurse3 = dwTime; AddState(nState); break;
    case 4: dwCurse4 = dwTime; AddState(nState); break;
    case 6: dwFreeze = dwTime; AddState(nState); break;
    default: return;
	}
} //> CSD-021024

⌨️ 快捷键说明

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