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

📄 cursingmagic.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	::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::AuthorityLostSight()
{	// [177] 矫仿惑角狼 鼻瓷 : 矫具甫 2鸥老肺 良塞
	const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
	
	if (IsReturn(m_pTarget))
	{
		m_pCaster->ApplyCurse(4, CON_DARKNESS, m_dwNow + wPeriod);
		// 矫具惑角 惑怕甫 努扼捞攫飘肺 傈价
		::SendMagicCommand(m_pCaster, SET_LOSTSIGHT, 0, 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->ApplyCurse(4, CON_DARKNESS, m_dwNow + wPeriod);
	
	if (m_pTarget->IsNpc())
	{ // NPC 棺 阁胶磐狼 矫具惑角 瓤苞 楷免窃荐 龋免
		::NPCLostSight(m_pTarget, m_dwNow  + wPeriod);
	}
	else
	{ // 矫具惑角 惑怕甫 努扼捞攫飘肺 傈价
		::SendMagicCommand(m_pTarget, SET_LOSTSIGHT, 0, 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::DiseaseInduce()
{	//< CSD-031007 : [16]龙捍蜡惯 : Health(硅绊悄 沥档) 皑家
	if (m_pTarget->IsNpc())
	{
		return true;
	}

	if (IsReturn(m_pTarget))
	{
		// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
		InitMagicResult(CMD_MAGIC_RESULT);
		m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
		m_packet.u.magic.server_magic_result.idTarget = m_idCaster;
		m_packet.u.magic.server_magic_result.nState = m_pCaster->GetState();
		m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
		SendMagicResult();
		return true;
	}
	
	if (m_pTarget->DecHungry(m_pTarget->HungryMax/2) > 0)
	{
		m_pTarget->SendCharInfoBasic(SP, m_pTarget->Hungry);
		// 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
		::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	}
	// NK俊 拌魂
	::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
	// 搬苞蔼阑 措惑磊俊霸 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;
}	//> CSD-031007

bool CCursingMagic::VampireTouch()
{	// [17]轨颇捞绢狼 颊辨 : 措惑磊狼 HP甫 哗狙酒 矫傈磊狼 HP俊 歹窃(措惑磊啊 磷瘤绰 臼澜)
	const int nDiff = m_pCaster->GetLevel() - m_pTarget->GetLevel(); // CSD-030806
	// HP甫 哗狙阑 % 拌魂
	int nPercent = (35 + nDiff) + m_pCaster->Skill[TACTICS_Magery]/4;
	if (nPercent > 80)  nPercent = 80;
	if (nPercent < 10)  nPercent = 10;
	
	if (IsReturn(m_pTarget))
	{
		const int nTemp = m_pTarget->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
		const int nMinus = m_pCaster->DecLife(nTemp, 1);    // 角力 HP甫 哗疽绰 樊
		const int nPlus = m_pTarget->IncLife(nMinus);       // 角力 HP甫 歹窍绰 樊
		::SendCharacterCondition(m_pTarget, nPlus);
		// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
		InitMagicResult(CMD_MAGIC_RESULT_H);
		m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
		m_packet.u.magic.server_magic_result_h.idTarget = m_idCaster;
		m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
		m_packet.u.magic.server_magic_result_h.nState = m_pCaster->GetState();
		m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
		SendMagicResult();
		return true;
	}
	
	const int nTemp = m_pCaster->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
	const int nMinus = m_pTarget->DecLife(nTemp, 1);    // 角力 HP甫 哗疽绰 樊
	const int nPlus = m_pCaster->IncLife(nMinus);       // 角力 HP甫 歹窍绰 樊
	::SendCharacterCondition(m_pCaster, nPlus);
	// 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 1, abs(nMinus));
	// NK俊 拌魂
	::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT_H);
	m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result_h.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
	m_packet.u.magic.server_magic_result_h.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CCursingMagic::LifeDrain()
{	// [190]积疙仿 呕秒 : 措惑磊狼 HP甫 哗狙酒 矫傈磊狼 HP俊 歹窃(饭骇俊 蝶弗 眉仿摹 软荐樊 瞒殿 利侩
	const int nDiff = m_pCaster->GetLevel() - m_pTarget->GetLevel(); // CSD-030806
	// HP甫 哗狙阑 % 拌魂
	int nPercent = (50 + nDiff) + m_pCaster->Skill[TACTICS_Orison]/3;
	if (nPercent > 90)  nPercent = 90;
	if (nPercent < 10)  nPercent = 10;
	
	if (IsReturn(m_pTarget))
	{
		const int nTemp = m_pTarget->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
		const int nMinus = m_pCaster->DecLife(nTemp, 1);    // 角力 HP甫 哗疽绰 樊
		const int nPlus = m_pTarget->IncLife(nMinus);       // 角力 HP甫 歹窍绰 樊
		::SendCharacterCondition(m_pTarget, nPlus);
		// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
		InitMagicResult(CMD_MAGIC_RESULT_H);
		m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
		m_packet.u.magic.server_magic_result_h.idTarget = m_idCaster;
		m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
		m_packet.u.magic.server_magic_result_h.nState = m_pCaster->GetState();
		m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
		SendMagicResult();
		return true;
	}
	
	const int nTemp = m_pCaster->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
	const int nMinus = m_pTarget->DecLife(nTemp, 1);    // 角力 HP甫 哗疽绰 樊
	const int nPlus = m_pCaster->IncLife(nMinus);       // 角力 HP甫 歹窍绰 樊
	::SendCharacterCondition(m_pCaster, nPlus);
	// 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 1, abs(nMinus));
	// NK俊 拌魂
	::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT_H);
	m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result_h.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
	m_packet.u.magic.server_magic_result_h.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CCursingMagic::Gazer()
{	// [109]30%狼 犬伏肺 脚狼 历林(付过荤侩阂啊)甫 角青茄促
	if( rand()%2 == 0 ) // 030514 kyo 50%犬伏
	{
		return false;
	}

	const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
	m_pTarget->dwDontCasting = m_dwNow + wPeriod;
	m_pTarget->ApplyCurse(1, CON_CURSE, m_dwNow + wPeriod);
	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;
}


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

bool CCursingMagic::CheckDeath(int nDamage)
{	//< CSD-TW-030627
	if (IsReturn(m_pCaster))    return false;
	// Life 皑家
	const int nLife = m_pTarget->DecLife(nDamage); 

	if (nLife > 0)
	{
		::SendCharacterCondition(m_pTarget, -nLife);
	}	
	
	if (m_pTarget->IsDead())
	{
		if (m_pCaster->IsPlayer() && m_pTarget->IsPlayer())
		{
			::KillWho(m_pTarget, m_pCaster);
		}

		if (m_pTarget->IsNpc())
		{
			m_pTarget->m_xSummon.Remove(KillMonster);
		}
		
		::killCharacter(m_pCaster, m_pTarget);
		// 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷篮 版快
		::AddCasterEXP(m_pCaster, m_pTarget, 1, 1, abs(nDamage));
		// NK俊 拌魂
		::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
		// 搬苞蔼阑 措惑磊俊霸 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 = CON_DEATH;
		m_packet.u.magic.server_magic_result.nResult = HIT_AND_DEAD;
		SendMagicResult();
		return true;
	}
	
	return false;
}	//> CSD-TW-030627

void CCursingMagic::CheckStun(CHARLIST* pTarget)
{
	if (pTarget->IsCurse(1, g_curr_time))
	{
		pTarget->ClearCurse(1);
	}
}

void CCursingMagic::CheckSlow(CHARLIST* pTarget)
{
	if (pTarget->IsCurse(2, g_curr_time))
	{
		pTarget->ClearCurse(2);
	}
}

void CCursingMagic::CheckPoison(CHARLIST* pTarget)
{
	if (pTarget->IsCurse(3, g_curr_time))
	{
		pTarget->ClearCurse(3);
	}
}

void CCursingMagic::CheckBlind(CHARLIST* pTarget)
{
	if (pTarget->IsCurse(4, g_curr_time))
	{
		pTarget->ClearCurse(4);
	}
}

void CCursingMagic::CheckFreeze(CHARLIST* pTarget)
{
	if (pTarget->IsCurse(6, g_curr_time))
	{
		pTarget->ClearCurse(6);
	}
}

///////////////////////////////////////////////////////////////////////////////
// Private Method
///////////////////////////////////////////////////////////////////////////////

bool CCursingMagic::IsReturn(CHARLIST* pTarget) const
{
	return (pTarget->IsPlayer() && pTarget->IsReturn()) ? true:false;
}

⌨️ 快捷键说明

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