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

📄 extramagic.cpp

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

#include "..\stdafx.h"
#include "ExtraMagic.h"

#include "..\HigherLayers\OP_Magic.h"
#include "..\HigherLayers\OP_Battle.h"

int	PRAY_RECOVER_DIVINE_TIME			=	0	; // 030520 kyo
///////////////////////////////////////////////////////////////////////////////
// Static Variable
///////////////////////////////////////////////////////////////////////////////

static POINT s_aPlace[8][5] =
{
	{{ 0, -5}, {-3, -5}, { 3, -5}, {-5, -5}, { 5, -5}},
	{{-3, -3}, {-4,  0}, { 0, -4}, {-6,  3}, { 3, -6}},
	{{-5,  0}, {-5,  3}, {-5, -3}, {-5,  5}, {-5, -5}},
	{{-2,  2}, { 0,  4}, {-4,  0}, { 2,  6}, {-6, -2}},
	{{ 0,  5}, {-3,  5}, { 3,  5}, {-5,  5}, { 5,  5}},
	{{ 3,  3}, { 4,  0}, { 0,  4}, { 6, -3}, {-3,  6}},
	{{ 5,  0}, { 5,  3}, { 5, -3}, { 5,  5}, { 5, -5}},
	{{ 3, -3}, { 0, -4}, { 4,  0}, {-3, -6}, { 6,  3}}
};

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

CExtraMagic::CExtraMagic()
{
    
}

CExtraMagic::~CExtraMagic()
{
	
}

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

bool CExtraMagic::Bind()
{ 
	Resist(PHASING, &CExtraMagic::Phasing);
	Resist(TELEPORT, &CExtraMagic::Teleport);
	Resist(MEMORIZING_LOCATION, &CExtraMagic::MemorizingLocation);
	Resist(TOWN_PORTAL, &CExtraMagic::TownPortal);
	Resist(MULTI_PORT, &CExtraMagic::MultiPort);
	Resist(VAMPIRE_DODGE, &CExtraMagic::VampireDodge);
	Resist(LOW_MONSTER_RECALL, &CExtraMagic::LowMonsterRecall);
	Resist(MIDDLE_MONSTER_RECALL, &CExtraMagic::MiddleMonsterRecall);
	Resist(SUMMONING_SKELETON, &CExtraMagic::SummoningSkeleton);
	Resist(SUMMONING_UNDEAD, &CExtraMagic::SummoningUndead);
	Resist(RECALL_FOLLOW, &CExtraMagic::RecallFollow);
	Resist(MAGICAL_TRAP, &CExtraMagic::MagicalTrap);
	Resist(MAGIC_DETECT, &CExtraMagic::MagicDetect);
	Resist(ANTHEM, &CExtraMagic::Anthem);
	Resist(INFLUENCE_DIVINE, &CExtraMagic::InfluenceDivine);
	Resist(VOICE_SOUL, &CExtraMagic::VoiceSoul);
	Resist(APPRECIATE, &CExtraMagic::Appreciate);
	Resist(PRAY, &CExtraMagic::Pray);	// 030415 kyo
	return true;
} 

bool CExtraMagic::Phasing()
{	// [64]厘家捞悼 : 烙狼利栏肺 困摹啊 鉴埃利栏肺 捞悼
	int nCount = 0;
	
	do	
	{
		m_nX = (m_pCaster->X>>5);
		m_nY = (m_pCaster->Y>>5);
		// 困摹 掘扁
		GetArea(m_nX, m_nY);
		//< CSD-030930
		if (m_nX < 0)
		{
			return false;
		}

		if (m_nY < 0)
		{
			return false;
		}
		//> CSD-030930
		if (++nCount > MAX_COUNT)
		{	// 10雀 捞惑 矫档矫 角菩沁促搁 付过捞 角菩茄 巴栏肺 埃林
			return false;
		}
	} 
	while (!::IsMovable(m_nX, m_nY));
	
	::TransArea(PT_PHASING, m_pCaster, m_nX, m_nY);
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex); // 矫傈磊狼 版氰摹 拌魂
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT);
	m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CExtraMagic::Teleport()
{	// [66]鉴埃捞悼 : 急琶茄 厘家肺 鉴埃利栏肺 捞悼
	if (::IsMovable(m_nX, m_nY) == false)  
	{ // 捞悼阑 且 荐 绝绰 镑捞扼搁
		return false;
	}
	
	::TransArea(PT_TELEPORT, m_pCaster, m_nX, m_nY);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT);
	m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CExtraMagic::MemorizingLocation()
{ // [65]捞悼厘家扁撅 : 瞒盔捞悼捞唱 汗荐瞒盔栏肺 捞悼瞪 厘家(甘捞抚, 谅钎蔼)甫 扁撅矫糯
	if (::IsMovable(m_nX, m_nY) == false)  
	{ // 捞悼阑 且 荐 绝绰 镑捞扼搁
		return false;
	}
	// 捞悼且 厘家俊 措茄 沥焊(甘捞抚, 困摹) 汲沥
	const int nPort = ::MapPort(m_pCaster->MapName);
	m_pCaster->SetTransMap(nPort, m_nX, m_nY);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT);
	m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CExtraMagic::TownPortal()
{ // [68]瞒盔捞悼 : 磊扁磊脚阑 扁撅等 厘家(甘捞抚, 谅钎蔼)肺 捞悼
	if (!m_pCaster->IsTransMap())
	{ // 扁撅等 捞悼 厘家 沥焊啊 绝促搁
		return false;
	}
	
	::TransMap(m_pCaster);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT);
	m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CExtraMagic::MultiPort()
{ // [67]汗荐瞒盔捞悼 : 老沥 康开俊 乐绰 荤恩甸阑 扁撅等 厘家(甘捞抚, 谅钎蔼)肺 捞悼
	if (m_pCaster->IsTransMap() == false)  
	{ // 扁撅等 捞悼 厘家 沥焊啊 绝促搁 角菩
		return false;
	}
	
	::TransMap(m_pCaster);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT);
	m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CExtraMagic::VampireDodge()        
{ // [91]轨颇捞绢 雀乔
	int nCount = 0;
	
	do	
	{
		m_nX = (m_pCaster->X>>5);
		m_nY = (m_pCaster->Y>>5);
		// 困摹 掘扁
		GetArea(m_nX, m_nY);    
		// 10雀 捞惑 矫档矫 角菩沁促搁 付过捞 角菩茄 巴栏肺 埃林
		if (++nCount > MAX_COUNT)	 
		{
			return false;
		}
	} 
	while (!::IsMovable(m_nX, m_nY));
	
	::TransArea(PT_DODGE, m_pCaster, m_nX, m_nY);
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex); // 矫傈磊狼 版氰摹 拌魂
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT);
	m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CExtraMagic::LowMonsterRecall()
{	// [55]历鞭 阁胶磐 家券
	if (m_pCaster->m_xSummon.IsExist() == true)
	{ // 家券等 阁胶磐啊 乐促搁
		m_pCaster->m_xSummon.Remove(KillMonster);
	}
	
	int nCreate = 0;
	
	switch (rand()%3)
	{
    case 0:  nCreate = 14; break; // 扼捞沫胶酚
    case 1:  nCreate = 47; break; // 档付轨牢埃
    case 2:  nCreate = 42; break; // 公瘤唱
    default: nCreate = -1; break;
	}
	
	if (::SummonMonster(m_pCaster, nCreate, m_nX, m_nY) == false)  
	{ // 家券俊 角菩沁促搁
		return false;
	}
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT);
	m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CExtraMagic::MiddleMonsterRecall()
{ // [58]吝鞭 阁胶磐 家券
	if (m_pCaster->m_xSummon.IsExist() == true)
	{ // 家券等 阁胶磐啊 乐促搁
		m_pCaster->m_xSummon.Remove(KillMonster);
	}
	
	int nCreate = 0;
	
	switch (rand()%2)
	{
    case 0:  nCreate = 34; break; // 宏风靛
    case 1:  nCreate = 38; break; // 胶沛榜方
    default: nCreate = -1; break;
	}
	
	if (::SummonMonster(m_pCaster, nCreate, m_nX, m_nY) == false)  
	{ // 家券俊 角菩沁促搁
		return false;
	}
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT);
	m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

⌨️ 快捷键说明

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