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

📄 recoverymagic.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
字号:
// RecoveryMagic.cpp: implementation of the CRecoveryMagic class.
//
//////////////////////////////////////////////////////////////////////

#include "..\stdafx.h"
#include "RecoveryMagic.h"


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


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

CRecoveryMagic::CRecoveryMagic()
{
	
}

CRecoveryMagic::~CRecoveryMagic()
{
	
}

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

bool CRecoveryMagic::Bind()
{
	Resist(LIFE_UP, &CRecoveryMagic::Healing);
	Resist(DECIPHER, &CRecoveryMagic::Decipher);
	Resist(HEAL_DISEASE, &CRecoveryMagic::HealDisease);
	Resist(GREAT_HEAL, &CRecoveryMagic::GreatHeal);
	Resist(REMOVE_CURSE, &CRecoveryMagic::RemoveCurse);
	Resist(RESTORE_AUTHORITY, &CRecoveryMagic::RestoreAuthority);
	Resist(MIRACLE_RECOVER, &CRecoveryMagic::MiracleRecover);
	Resist(RELIEF_AUTHORITY, &CRecoveryMagic::ReliefAuthority);
	Resist(RECOVER_POISON, &CRecoveryMagic::RecoverPoison);
	Resist(AUTHORITY_RECOVER_SIGHT, &CRecoveryMagic::AuthorityRecoverSight);
	Resist(CURE_DISEASE, &CRecoveryMagic::CureDisease);
	Resist(AUTHORITY_SIMUNIAN, &CRecoveryMagic::AuthoritySimunian);
	Resist(HOLY_CURE, &CRecoveryMagic::HolyCure); // 030415 kyo 
	return true;
}

bool CRecoveryMagic::Healing()
{ // [1]眉仿雀汗 : HP 刘啊
	if (m_pTarget->IsFullLife())
	{ // MP啊 傈何 瞒乐促搁
		return false;
	}
	const int nInt = m_pCaster->GetAbility(INT_);
	const int nWsPs = m_pCaster->GetAbility(WSPS);
	const int nPlus = ((nInt + nWsPs)>>1)*(m_pCaster->Skill[TACTICS_Magery]>>1) + 100;
	const int nReal = m_pTarget->IncLife(nPlus);
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex, nReal);
	// 搬苞蔼阑 措惑磊俊霸 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 = nReal;
	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 CRecoveryMagic::Decipher()
{ // [4]秦刀 付过 : 历林拌凯 付过牢 吝刀, 刀备抚 惑怕甫 秦力
	m_pTarget->ClearCurse(3);
	// 矫傈磊狼 版氰摹 拌魂
	::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 CRecoveryMagic::HealDisease()
{ // [5]龙捍摹丰 : Health(硅绊悄 惑怕) 刘啊
	if (m_pTarget->IsFullHungry() == true)
	{ // 硅绊悄 荐摹啊 傈何 瞒乐促搁
		return false;
	}
	
	const int nPlus = m_pTarget->HungryMax/5;
	m_pTarget->IncHungry(nPlus);
	m_pTarget->SendCharInfoBasic(SP, m_pTarget->Hungry);//020704 lsw
	// 矫傈磊狼 版氰摹 拌魂
	::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 CRecoveryMagic::GreatHeal()
{ // [6]措眉仿雀汗 : HP甫 弥措鳖瘤 刘啊, 历林 1, 2拌凯狼 付过 惑怕 雀汗
	if (m_pTarget->IsFullLife())
	{ // MP啊 傈何 瞒乐促搁
		return false;
	}
	
	const int nInt = m_pCaster->GetAbility(INT_);
	const int nWsPs = m_pCaster->GetAbility(WSPS);
	const int nPlus = ((nInt + nWsPs)>>1)*((m_pCaster->Skill[TACTICS_Magery]*3)>>1) + 600;
	const int nReal = m_pTarget->IncLife(nPlus);
	// 历林 1, 2拌凯 付过 惑怕 雀汗
	m_pTarget->ClearCurse(1);
	m_pTarget->ClearCurse(2);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex, nReal);
	// 搬苞蔼阑 措惑磊俊霸 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 = nReal;
	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 CRecoveryMagic::RemoveCurse()
{ // [78]历林秦力 : 历林 1, 2, 3, 4拌凯 付过 秦力
	m_pTarget->ClearCurse(1);
	m_pTarget->ClearCurse(2);
	m_pTarget->ClearCurse(3);
	m_pTarget->ClearCurse(4);
	::SendMagicCommand(m_pTarget, SET_CUREBLIND, 0, 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 CRecoveryMagic::RestoreAuthority()
{ // [151]雀汗狼鼻瓷 : 弥措狼 HP肺 盲况淋
	if (m_pTarget->IsFullLife())
	{ // MP啊 傈何 瞒乐促搁
		return false;
	}
	
	const int nWis = m_pCaster->GetAbility(WIS);
	const int nWsPs = m_pCaster->GetAbility(WSPS);
	const int nPlus = ((nWis + nWsPs)>>1)*(m_pCaster->Skill[TACTICS_Orison]) + 400;
	const int nReal = m_pTarget->IncLife(nPlus);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex, nReal);
	// 搬苞蔼阑 措惑磊俊霸 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 = nReal;
	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 CRecoveryMagic::MiracleRecover()
{ // [156]肯摹狼 扁利 : 矫傈磊客 林函狼 老沥 芭府 郴俊 乐绰 某腐磐甸狼 HP阑 50000鳖瘤 棵妨淋
	if (m_pTarget->IsFullLife())
	{ // HP啊 傈何 瞒乐促搁
		return false;
	}
	// Life 刘啊
	const int nReal = m_pTarget->IncLife(50000);
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex, nReal);
	// 搬苞蔼阑 措惑磊俊霸 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 = nReal;
	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 CRecoveryMagic::ReliefAuthority()
{ // [164]备盔狼 鼻瓷 : 措惑磊甫 蜡飞 惑怕俊辑 沥惑 惑怕肺 父甸绊 HP客 付唱甫 弥措鳖瘤 硅绊悄 荐摹甫 例馆 棵妨淋
	//020501 lsw 混府扁率 绊魔
	if(!m_pCaster->bCanViewGhost)//蜡飞阑 杭 荐 绝绰 惑怕扼搁
	{
		return false;
	}
	if(m_pTarget->viewtype != VIEWTYPE_GHOST_) 
	{ // 蜡飞 惑怕啊 酒聪扼搁
		return false;
	}
	SkillMgr.CharacterToAlive(m_pTarget, 1); //硅绊悄 例馆牢单 钱肺 盲矿聪促.
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
	InitMagicResult(CMD_MAGIC_RESULT_M);
	m_packet.u.magic.server_magic_result_m.nMagic = m_nIndex;
	m_packet.u.magic.server_magic_result_m.idTarget = m_idTarget;
	m_packet.u.magic.server_magic_result_m.nLife = m_pTarget->HpMax;
	m_packet.u.magic.server_magic_result_m.nMana = m_pTarget->ManaMax;
	m_packet.u.magic.server_magic_result_m.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_m.nResult = HIT_AND_ALIVE;
	SendMagicResult();
	return true;
}

bool CRecoveryMagic::RecoverPoison()
{ // [154]秦刀狼 鼻瓷 : 历林拌凯 付过牢 吝刀, 刀备抚 惑怕甫 秦力
	m_pTarget->ClearCurse(3);
	// 矫傈磊狼 版氰摹 拌魂
	::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 CRecoveryMagic::AuthorityRecoverSight()
{ // [173]矫仿雀汗狼 鼻瓷 : 历林拌凯 付过牢 矫仿惑角阑 秦力
	m_pTarget->ClearCurse(4);
	::SendMagicCommand(m_pTarget, SET_CUREBLIND, 0, 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 CRecoveryMagic::CureDisease()
{ // [155]龙捍摹丰狼 鼻瓷 : Health(硅绊悄 惑怕) 刘啊
	if (m_pTarget->IsFullHungry()) 
	{ // 硅绊悄 荐摹啊 傈何 瞒乐促搁
		return false;
	}
	
	const int nPlus = m_pTarget->HungryMax/4;
	m_pTarget->IncHungry(nPlus);
	m_pTarget->SendCharInfoBasic( SP, m_pTarget->Hungry);//020704 lsw
	// 矫傈磊狼 版氰摹 拌魂
	::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.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CRecoveryMagic::AuthoritySimunian()
{ // [181]矫公聪救狼 鼻瓷
	if (m_pTarget->IsFullHungry()) 
	{ // 硅绊悄 荐摹啊 傈何 瞒乐促搁
		return false;
	}
	
	const int nPlus = m_pTarget->HungryMax/4;
	m_pTarget->IncHungry(nPlus);
	m_pTarget->SendCharInfoBasic(SP, m_pTarget->Hungry);//020704 lsw
	// 矫傈磊狼 版氰摹 拌魂
	::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.nState = m_pTarget->GetState();
	m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
	SendMagicResult();
	return true;
}

bool CRecoveryMagic::HolyCure()
{ // [179]脚己茄 摹蜡 = 历林秦力+肯摹狼扁利+橇府琉 秦力 // 030415 kyo
	
	m_pTarget->ClearCurse(1);
	m_pTarget->ClearCurse(2);
	m_pTarget->ClearCurse(3);
	m_pTarget->ClearCurse(4);
	m_pTarget->ClearCurse(6);//Freezn 秦力
	
	const int nPlus = m_pTarget->HungryMax; // 030516 kyo
	m_pTarget->IncHungry(nPlus);
	m_pTarget->SendCharInfoBasic(SP, m_pTarget->Hungry);//020704 lsw
	
	::SendMagicCommand(m_pTarget, SET_CUREBLIND, 0, 0);	//矫仿惑角 雀汗
	// 矫傈磊狼 版氰摹 拌魂
	::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
	// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁	
	if (m_pTarget->IsFullLife())
	{ // HP啊 傈何 瞒乐促搁 公炼扒 猾促. 
		m_pTarget->DecLife(1);
		//return false;
	}
	const int nReal = m_pTarget->IncLife(50000);
	
	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 = nReal;
	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;
}

⌨️ 快捷键说明

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