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

📄 extramagic.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
bool CExtraMagic::SummoningSkeleton()
{ // [88]胶奶饭沛欧 家券
	if (m_pCaster->m_xSummon.Count() >= GetSummonMax(m_nIndex))
	{ // 家券等 阁胶磐啊 乐促搁
		return false;
	}
	
	if (::SummonMonster(m_pCaster, 49, 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_SUMMONING;
	SendMagicResult();
	return true;
}

bool CExtraMagic::SummoningUndead()
{ // [92]攫单靛 家券
	if (m_pCaster->m_xSummon.Count() >= GetSummonMax(m_nIndex))
	{ // 家券等 阁胶磐啊 乐促搁
		return false;
	}
	
	if (!::IsMovable(m_nX, m_nY))  return false;
	if (!::SummonMonster(m_pCaster, 81, m_nX, m_nY))  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_SUMMONING;
	SendMagicResult();
	return true;
}

bool CExtraMagic::RecallFollow()
{	// [95]何窍 家券
	/*
	if (m_pCaster->m_xSummon.Count() >= GetSummonMax(m_nIndex))
	{ // 家券等 阁胶磐啊 乐促搁
		return false;
	}
	*/
	//< CSD-030324
	int nX = 0, nY = 0;
	// 家券且 困摹 备窍扁
	if (!GetRecallPlace(m_nX, m_nY, nX, nY))
	{
		return false;
	}
	
	const int nMonster = m_pCaster->GetFollow();

	if (!::SummonMonster(m_pCaster, nMonster, nX, nY))  
	{
		return false;
	}
	//> CSD-030324
	// 矫傈磊狼 版氰摹 拌魂
	::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_SUMMONING;
	SendMagicResult();
	return true;
}

bool CExtraMagic::MagicalTrap()
{	// [20]付过飘乏 : 瘤沥等 困摹俊 拳堪, 倔澜, 汗钦 付过 瓤苞甫 啊柳 担 汲摹
	// 30檬(1 饭骇) ~ 150檬(99 饭骇)
	const WORD	wDuration = TRAP_TIME + ((m_pCaster->GetLevel()/5 - 5)*TRAP_TIME/10); // CSD-030806
	const int nX = m_nX;
	const int nY = m_nY;
	// 担狼 辆幅 沥狼(0->X/1->+/2->汗钦)
	switch (rand()%3)
	{
	case 0:	// け屈 飘乏	(拳堪) - 单固瘤:版
		{
			::InsertTrap(nX,     nY,     0, g_curr_time + wDuration);
			::InsertTrap(nX + 1, nY,     0, g_curr_time + wDuration);
			::InsertTrap(nX,     nY + 1, 0, g_curr_time + wDuration);
			::InsertTrap(nX + 1, nY + 1, 0, g_curr_time + wDuration);
			break;
		}
	case 1:	// +屈 飘乏	(倔澜) - 单固瘤:吝
		{
			::InsertTrap(nX,     nY - 1, 1, g_curr_time + wDuration);
			::InsertTrap(nX,     nY,     1, g_curr_time + wDuration);
			::InsertTrap(nX,     nY + 1, 1, g_curr_time + wDuration);
			::InsertTrap(nX - 1, nY,     1, g_curr_time + wDuration);
			::InsertTrap(nX + 1, nY,     1, g_curr_time + wDuration);
			break;
		}
	case 2:	// け屈 飘乏 (汗钦眉) - 单固瘤:碍
		{
			::InsertTrap(nX,     nY,     2, g_curr_time + wDuration);
			::InsertTrap(nX + 1, nY,     2, g_curr_time + wDuration);
			::InsertTrap(nX,     nY + 1, 2, g_curr_time + wDuration);
			::InsertTrap(nX + 1, nY + 1, 2, g_curr_time + wDuration);
			break;
		}
	}
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// 搬苞蔼阑 措惑磊俊霸 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 = wDuration;
	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 CExtraMagic::MagicDetect()
{ // [75]付过沤瘤 : 付过担 沤瘤
	if (::SearchTrap(m_pCaster, 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::Anthem()
{	// [163]己啊 : 措惑狼 NK荐摹甫 皑家矫虐绊 措脚 版氰摹甫 临烙
	if (::IsHeNK(m_pTarget, MapInfo[MapNumber].nation) <= 0)  
	{ // 泅犁乐绰 甘狼 NK 荐摹 八荤
		return false;
	}
	//< CSD-030314 : 版氰摹 皑家
	const bool bNK = (IsHeNK(m_pTarget, MapInfo[MapNumber].nation) > 0) ? true: false; 
	m_pTarget->DecExperience(bNK);
	//> CSD-030314 : NK 荐摹 10 皑家
	::InNK(m_pTarget, MapInfo[MapNumber].nation, -10); 
	// 矫傈磊狼 版氰摹 拌魂
	::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::InfluenceDivine()
{	// [168]脚俊狼 皑拳 : 固搬沥
	// 矫傈磊狼 版氰摹 拌魂
	::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::VoiceSoul()
{ // [169]康去狼 家府 : 1盒俊辑 1盒30檬埃 蜡飞阑 焊绊 甸阑 荐 乐澜
	const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
	SkillMgr.SetCanViewGhost(m_pCaster, wPeriod);
	::SendSkillResult(m_pCaster->GetServerID(), 1, m_pTarget->GetServerID(), 0, 0, wPeriod);
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex); // 矫傈磊狼 版氰摹 拌魂
	// 搬苞蔼阑 措惑磊俊霸 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 CExtraMagic::Appreciate()
{	// [167]官弗 柄崔澜 : 惑措规狼 wis甫 舅 荐 乐澜
	// 惑措狼 葛电 沥焊(惑怕/瓷仿)甫 犬牢
	::SendMagicCommand(m_pCaster, SET_INFORMATION, m_pTarget->GetServerID(), 0);
	// 矫傈磊狼 版氰摹 拌魂
	::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::Pray()
	{	//< CSD-TW-030606 : [178]扁档 : 付唱甫 PRAY_RECOVER_DIVINE_TIME(5)檬 歹 弧府 盲款促. // 030415 kyo
	const WORD wPeriod = CalcMaintain(); // 030521 kyo
	m_pCaster->dwUpDivineMana = m_dwNow + wPeriod;
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex); // 矫傈磊狼 版氰摹 拌魂
	// 搬苞蔼阑 措惑磊俊霸 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;
}	//> CSD-TW-030606

///////////////////////////////////////////////////////////////////////////////
// Protected Method
///////////////////////////////////////////////////////////////////////////////

void CExtraMagic::GetArea(int& rX, int& rY)
{  
	const int nLeft = rX - 3;
	const int nTop = rY - 2;
	const int nRight = rX + 3;
	const int nBottom = rY + 2;
	
	RECT aArea[4] =
	{
		{nLeft - 5, nTop - 7, nLeft, nTop},
		{nRight, nTop - 7, nRight + 5, nTop},
		{nLeft - 5, nBottom, nLeft, nBottom + 7},
		{nRight, nBottom, nRight + 5, nBottom + 7}
	};
	
	RECT rtRand = aArea[rand()%4];
	rX = rtRand.left + rand()%5;
	rY = rtRand.top + rand()%7;
}

bool CExtraMagic::GetRecallPlace(int nSrcX, int nSrcY, int& rDstX, int& rDstY)
{	//< CSD-030324 : 家券且 镑狼 困摹 备窍扁
	const int nDir = m_pCaster->Direction;
	int nX = nSrcX + s_aPlace[nDir][rand()%5].x;
	int nY = nSrcY - s_aPlace[nDir][rand()%5].y;

	if (::IsMovable(nX, nY))
	{
		rDstX = nX;
		rDstY = nY;
		return true;
	}
	// 家券窍绰 磊狼 林函阑 八祸
	for (int i = DIRECTION_DOWN; i <= DIRECTION_RIGHTDOWN; ++i)
	{
		nX = nSrcX + s_aPlace[i][rand()%5].x;
		nY = nSrcY - s_aPlace[i][rand()%5].y;

		if (::IsMovable(nX, nY))
		{
			rDstX = nX;
			rDstY = nY;
			return true;
		}
	}

	return false;
}	//> CSD-030324

⌨️ 快捷键说明

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