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

📄 cursingmagic.cpp

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

#include "..\stdafx.h"
#include "CursingMagic.h"

#include "..\HigherLayers\Op_Magic.h"
#include "..\HigherLayers\Op_Battle.h"
#include "..\HigherLayers\Op_chr_status.h"
#include "..\HigherLayers\NationSys.h"

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

CCursingMagic::CCursingMagic()
{

}

CCursingMagic::~CCursingMagic()
{

}

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

bool CCursingMagic::Bind()
{ 
	Resist(CONFUSION, &CCursingMagic::Confusion);
	Resist(ABSOLUTE_PARALYSIS, &CCursingMagic::AbsoluteParalysis);
	Resist(STONELY, &CCursingMagic::Stonely);
	Resist(CURSE, &CCursingMagic::Curse);
	Resist(AREA_PARALYSIS, &CCursingMagic::AreaParalysis);
	Resist(AREA_CONFUSION, &CCursingMagic::AreaConfusion);
	Resist(SLOW, &CCursingMagic::Slow);
	Resist(SPIDER_WEB, &CCursingMagic::SpiderWeb);
	Resist(AREA_SLOW, &CCursingMagic::AreaSlow);
	Resist(FEATHER_OF_CURSE, &CCursingMagic::FeatherOfCurse);
	Resist(INTOXICATION, &CCursingMagic::Intoxication);
	Resist(TOXIC_CLOUD, &CCursingMagic::ToxicCloud);
	Resist(VAMPIRE_POISON, &CCursingMagic::VampirePoison);
	Resist(CURSE_OF_HELL, &CCursingMagic::CurseOfHell);
	Resist(AREA_POISON, &CCursingMagic::AreaPoison);
	Resist(LOST_SIGHT, &CCursingMagic::LostSight);
	Resist(AUTHORITY_LOST_SIGHT, &CCursingMagic::AuthorityLostSight);
	Resist(DISEASE_INDUCE, &CCursingMagic::DiseaseInduce);
	Resist(VAMPIRE_TOUCH, &CCursingMagic::VampireTouch);
	Resist(LIFE_DRAIN, &CCursingMagic::LifeDrain);
	Resist(GAZER, &CCursingMagic::Gazer); // 030509 kyo
	return true;
} 

bool CCursingMagic::Elapse(CHARLIST* pTarget)
{
	const int nState = pTarget->GetState();
	
	switch (nState)
	{ 
    case CON_NORMAL:
    case CON_DEATH:
		{
			break;
		}
    default:
		{ // 阿 历林惑怕 八荤
			CheckStun(pTarget);
			CheckSlow(pTarget);
			CheckPoison(pTarget);
			CheckBlind(pTarget);
			CheckFreeze(pTarget);
			// 惑怕函版
			if (nState != pTarget->GetState())
			{
				::SendCharacterCondition(pTarget, 0);
			}
			// 10檬俊 茄锅究 HP皑家
			if (pTarget->GetPoisonedCount() >= 10)
			{
				const int nPoison = pTarget->GetPoisonedPoint();
				const int nLife = pTarget->DecLife(nPoison, 10);
				
				if (nLife != 0)
				{
					::SendCharacterCondition(pTarget, -nLife);
				}
				
				pTarget->SetPoisonedCount(0);
			}
			
			break;    
		}
	} 
	
	return true;
}

bool CCursingMagic::Confusion()
{	// [11]去鄂 : 惑措规捞 付快胶 努腐茄 镑苞 促弗 镑栏肺 捞悼, 付过 荤侩 阂啊
	const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
	
	if (IsReturn(m_pTarget))
	{ // 矫傈磊啊 雀蓖狼 鼻瓷 付过 惑怕扼搁
		m_pCaster->dwDontCasting = m_dwNow + wPeriod;
		// 措惑磊狼 惑怕 汲沥
		m_pCaster->ApplyCurse(1, CON_DAZE, m_dwNow + wPeriod);
		// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
		InitMagicResult(CMD_MAGIC_RESULT_T);
		m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
		m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
		m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
		m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
		m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
		SendMagicResult();
		return true;
	}
	
	m_pTarget->dwDontCasting = m_dwNow + wPeriod;
	// 措惑磊狼 惑怕 汲沥
	m_pTarget->ApplyCurse(1, CON_DAZE, m_dwNow + wPeriod);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// NK俊 拌魂
	::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT_T);
	m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
	m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CCursingMagic::AbsoluteParalysis()
{	// [14]例措付厚 : 付过 荤侩 阂啊, 拱府利 傍拜 阂啊, 困摹 捞悼 阂啊
	const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
	
	if (IsReturn(m_pTarget))
	{
		m_pCaster->dwDontCasting = m_dwNow + wPeriod;
		m_pCaster->dwDontAttack = m_dwNow + wPeriod;
		m_pCaster->dwDontMove = m_dwNow + wPeriod;
		m_pCaster->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod); 
		// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
		InitMagicResult(CMD_MAGIC_RESULT_T);
		m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
		m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
		m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
		m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
		m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
		SendMagicResult();
		return true;
	}
	
	m_pTarget->dwDontCasting = m_dwNow + wPeriod;
	m_pTarget->dwDontAttack = m_dwNow + wPeriod;
	m_pTarget->dwDontMove = m_dwNow + wPeriod;
	m_pTarget->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// NK俊 拌魂
	::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT_T);
	m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
	m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CCursingMagic::Stonely()
{	// [13]籍拳 : 个捞 被绢辑 框流老 荐 绝绰 惑怕(拱府利 傍拜捞唱 付过 荤侩捞 阂啊,历林秦力甫 力寇茄 葛电 付过狼 利侩捞 救凳, 绢栋茄 单固瘤档 罐瘤 给窃)
	const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
	
	if (IsReturn(m_pTarget))
	{
		m_pCaster->dwDontCasting = m_dwNow + wPeriod;
		m_pCaster->dwDontAttack = m_dwNow + wPeriod;
		m_pCaster->dwDontMove = m_dwNow + wPeriod;
		m_pCaster->dwBlocking = m_dwNow + wPeriod;
		m_pCaster->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod);
		// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
		InitMagicResult(CMD_MAGIC_RESULT_T);
		m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
		m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
		m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
		m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
		m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
		SendMagicResult();
		return true;
	}
	
	m_pTarget->dwDontCasting = m_dwNow + wPeriod;
	m_pTarget->dwDontAttack = m_dwNow + wPeriod;
	m_pTarget->dwDontMove = m_dwNow + wPeriod;
	m_pTarget->dwBlocking = m_dwNow + wPeriod;
	m_pTarget->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// NK俊 拌魂
	::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT_T);
	m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
	m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CCursingMagic::Curse()
{	// [172]脚狼 历林 : 付过 荤侩 阂啊
	const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
	
	if (IsReturn(m_pTarget))
	{
		m_pCaster->dwDontCasting = m_dwNow + wPeriod;
		m_pCaster->ApplyCurse(1, CON_CURSE, m_dwNow + wPeriod);
		// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
		InitMagicResult(CMD_MAGIC_RESULT_T);
		m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
		m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
		m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
		m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
		m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
		SendMagicResult();
		return true;
	}
	
	m_pTarget->dwDontCasting = m_dwNow + wPeriod;
	m_pTarget->ApplyCurse(1, CON_CURSE, m_dwNow + wPeriod);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// NK俊 拌魂
	::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
	// 搬苞蔼 汲沥
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT_T);
	m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
	m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CCursingMagic::AreaParalysis()
{	// [112]瘤开 付厚
	const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
	m_pTarget->dwDontCasting = m_dwNow + wPeriod;
	m_pTarget->dwDontAttack = m_dwNow + wPeriod;
	m_pTarget->dwDontMove = m_dwNow + wPeriod;
	m_pTarget->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// NK俊 拌魂
	::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT_T);
	m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
	m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CCursingMagic::AreaConfusion()
{	// [114]瘤开 去鄂
	const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
	m_pTarget->dwDontCasting = m_dwNow + wPeriod;
	// 措惑磊狼 惑怕 汲沥
	m_pTarget->ApplyCurse(1, CON_DAZE, m_dwNow + wPeriod);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// NK俊 拌魂
	::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT_T);
	m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
	m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

⌨️ 快捷键说明

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