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

📄 rareeffectmgr.cpp

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

#include "..\stdafx.h"
#include "NationSys_Define.h"
#include "CItem.h"
#include "Scrp_exe.h"
#include "op_magic.h"
#include "mysql.h"
#include "SymbolItemMgr.h" // soto-1.02
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRareEffectMgr RareEM;

CRareEffectMgr::CRareEffectMgr()
{

}

CRareEffectMgr::~CRareEffectMgr()
{

}

int CRareEffectMgr::CorrectByStaticRare(void *a, void *d, int &iDmg)
{	
	CHARLIST *Caster = (CHARLIST*)a;
	CHARLIST *Target = (CHARLIST*)d;
	if(!Caster) {return 0;}
	if(!Target) {return 0;}
  if(!Caster->IsPlayer()) {return 0;}//敲饭捞绢啊 酒聪搁 利侩 阂啊
	if(!Target->IsPlayer()) {return 0;}//敲饭捞绢啊 酒聪搁 利侩 阂啊
	//笛促 混酒 乐绢具(hp啊 0捞惑 捞绢具) 龋免 等促
	if( Caster->IsDead() || Target->IsDead() || !iDmg)	{ return 0;	}//笛嫡俊 窍唱扼档 磷菌栏搁 //单固瘤啊 绝栏搁 (固胶啊 车栏搁)
	
	const int iTempDmg = iDmg;	
	bool bManaSend = false, bHpSend = false, bHungrySend = false;
////////////////////////////////////////////////////////////////////////////////////////////////
// 锭赴磊俊 狼茄 贸府
{
	if( Target->Spell  == WIZARD_SPELL &&  (0 < Target->Mana) )//付唱啊 乐绢具 化绰促
	{
		const int nWitch = __min(iTempDmg	*	GetStaticRareWitch(Caster->StaticRare) / 1000 ,Caster->ManaMax-Caster->Mana);//单固瘤俊 厚肥 秦辑
		const int nDevil = __min(Target->Mana*	GetStaticRareDevil(Caster->StaticRare) / 100 ,Caster->ManaMax-Caster->Mana);
		if (nWitch > 0 && rand()%101 < RARE_MP_STEAL_RAND)
		{
			//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
			//软荐 且 荐 乐阑 锭
		//	if(nWitch < Target->Mana )//&& Caster->Mana < Caster->ManaMax )
			{
				Target->DecMana(nWitch);
				Caster->IncMana(nWitch);
				bManaSend = true;
			}
		}

		if (nDevil > 0 && rand()%101 < RARE_MP_STEAL_RAND)
		{
		//	if(nDevil < Target->Mana )//&& Caster->Mana < Caster->ManaMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
			{
				Target->DecMana(nDevil);
				Caster->IncMana(nDevil);
				bManaSend = true;
			}
		}
	}

	if( Target->Spell  == PRIEST_SPELL && (0 < Target->Mana) )//付唱啊 乐绢具 化绰促
	{
		const int nEvil		=	__min(iTempDmg		*	GetStaticRareEvil(Caster->StaticRare)  /1000,Caster->ManaMax-Caster->Mana);
		const int nSatan	=	__min(Target->Mana	*	GetStaticRareSatan(Caster->StaticRare) /100,,Caster->ManaMax-Caster->Mana);
		
		if (nEvil > 0 && rand()%101 < RARE_DIVINE_STEAL_RAND)
		{
		//	if(nEvil < Target->Mana )//&& Caster->Mana < Caster->ManaMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
			{
				Target->DecMana(nEvil);
				Caster->IncMana(nEvil);
				bManaSend = true;
			}
		}

		if (nSatan > 0 && rand()%101 < RARE_DIVINE_STEAL_RAND)
		{
		//	if(nSatan < Target->Mana )//&& Caster->Mana < Caster->ManaMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
			{
				Target->DecMana(nSatan);
				Caster->IncMana(nSatan);
				bManaSend = true;
			}
		}
	}
	
	if( 0 < Target->Hp )//眉仿捞 乐绢具 化绰促
	{	//HP 化绰 加己
		const int nDesire = __min(iTempDmg	 *GetStaticRareDesire(Caster->StaticRare) /100,	Caster->HpMax-Caster->Hp	);
		const int nRobber = __min(Target->Hp *GetStaticRareRobber(Caster->StaticRare) /100,	Caster->HpMax-Caster->Hp	);

		if (nDesire > 0 && rand()%101 < RARE_HP_STEAL_RAND)
		{
		//	if(nDesire < Target->Hp )//&& Caster->Hp < Caster->HpMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
			{
				Target->DecLife(nDesire);
				Caster->IncLife(nDesire);
				bHpSend = true;
			}
		}

		if (nRobber > 0 && rand()%101 < RARE_HP_STEAL_RAND)
		{
		//	if(nRobber < Target->Hp )//&& Caster->Hp < Caster->HpMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
			{
				Target->DecLife(nRobber);
				Caster->IncLife(nRobber);
				bHpSend = true;
			}
		}
	}
	if( 0 < Target->Hungry )//硅绊悄捞 乐绢具 化绰促 
	{//硅绊悄 霸捞瘤
		const int nWeary	=	__min(iTempDmg		*GetStaticRareWeary(Caster->StaticRare)	/1000,Caster->HungryMax - Caster->Hungry); 
		const int nFatigue	=	__min(Target->Hungry*GetStaticRareFatigue(Caster->StaticRare)/100,Caster->HungryMax - Caster->Hungry);
		
		if (nWeary > 0 && rand()%101 < RARE_HUNGRY_STEAL_RAND)
		{
		//	if(nWeary < Target->Hungry )//&& Caster->Hungry < Caster->HungryMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
			{
				Target->DecHungry(nWeary);
				Caster->IncHungry(nWeary);
				bHungrySend = true;
			}
		}

		if (nFatigue > 0 && rand()%101 < RARE_HUNGRY_STEAL_RAND)
		{
		//	if(nFatigue < Target->Hungry )//&& Caster->Hungry < Caster->HungryMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
			{
				Target->DecHungry(nFatigue);
				Caster->IncHungry(nFatigue);
				bHungrySend = true;
			}
		}
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////
//	嘎篮磊俊 狼茄 贸府 (馆拜捞骨肺 Caster狼 蔼阑 临咯 霖促)
{
//	if( 0 < Caster->Hp )//&& Caster->Spell  == PRIEST_SPELL)
	{	//馆拜
	//	const int nCounterattack	=	(Caster->Hp*GetStaticRareCounterattack(Target->StaticRare))/100;
		const int nCounterattack	=	Caster->HpMax	* GetStaticRareCounterattack(Target->StaticRare)/100;//HpMax俊辑
		const int nStrike			=	(iTempDmg		* GetStaticRareStrike(Target->StaticRare))/100;
		
		if (nCounterattack > 0 && rand()%101 < RARE_COUNTERATTCK_RAND)
		{
		//	if(nCounterattack < Caster->Hp )//馆拜樊捞 hp 焊促 利阑锭//锭赴仇
			{
				Caster->DecLife(nCounterattack);//锭赴仇捞 别捞绊
			//	Target->IncLife(nCounterattack);
				bHpSend = true;
			}
		}

		if (nStrike > 0 && rand()%101 < RARE_COUNTERATTCK_RAND)
		{
		//	if(nStrike < Caster->Hp )//馆拜樊捞 hp 焊促 利阑锭//锭赴仇
			{
				Caster->DecLife(nStrike);
			//	Target->IncLife(nStrike);
				bHpSend = true;
			}
		}
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////
//	焊郴扁
{
	if(bHpSend)//hp率俊 函拳啊 乐绰单 捞芭 锭巩俊 磷捞瘤 臼霸 窍扁 困秦辑
	{	
		if( !Caster->Hp )	{	Caster->Hp = 1;	}
		if( !Target->Hp )	{	Target->Hp = 1;	}
		Caster->SendCharInfoBasic( HP, Caster->Hp );//020704 lsw
		Target->SendCharInfoBasic( HP, Target->Hp );//020704 lsw
	}
	if(bManaSend)
	{
		Caster->SendCharInfoBasic( MP, Caster->Mana );//020704 lsw
		Target->SendCharInfoBasic( MP, Target->Mana );//020704 lsw
	}
	if(bHungrySend)
	{
		Caster->SendCharInfoBasic( SP, Caster->Hungry );//020704 lsw
		Target->SendCharInfoBasic( SP, Target->Hungry );//020704 lsw
	}
}
	return 0;
}

void CRareEffectMgr::ClearDynamicRareEffect(void* ch)
{
	CHARLIST *caster = (CHARLIST*)ch;
	memset(	&(caster->DynamicRare),		0,sizeof(DYNAMICRAREEFFECT));
	return;
}

void CRareEffectMgr::ClearRareEffect(void* ch)
{
	CHARLIST *caster = (CHARLIST*)ch;
	memset(	&(caster->StaticRare),		0,sizeof(STATICRAREEFFECT));
	return;
}

int CRareEffectMgr::ResetRareEffect(void* ch)//咯扁俊.. 馒侩 牢亥 捞繁 饭绢甫 持绢 临 荐啊 乐促 .
{
	CHARLIST *caster = (CHARLIST*)ch;
	bool bCanViewGhost	=false;
	bool bCanViewTrap	=false;
	bool bCanViewBomb	=false;
////////////////////////////////////////////////////////////////////////////////////////////////////
// 努府绢 傈俊 贸府 且巴
	if(GetStaticRareGhost(caster->StaticRare)){bCanViewGhost	= true;}//杭荐 绝瘤父 饭绢锭巩俊 夯促
	if(GetStaticRareLandmine(caster->StaticRare)){bCanViewBomb	= true;}
	if(GetStaticRareTraping(caster->StaticRare)){bCanViewTrap	= true;}

////////////////////////////////////////////////////////////////////////////////////////////////////
	ClearRareEffect(caster);//努府绢 
////////////////////////////////////////////////////////////////////////////////////////////////////
// 馒侩 窍绊 乐绰 饭绢 捞棋飘
{
	for(int i = 0; i <ITEM_EQUIP_MAX; i++)
	{
		const LPRareMain pRare = (LPRareMain)&caster->equip[i].attr[IATTR_RARE_MAIN];
		const int	iGrade		=	pRare->grade;
		if(	!iGrade 	||	pRare->IsDynamicRare){continue;}//扁瓷 酒捞袍 嘿篮芭
		const int	iHighLv		=	pRare->iHighLevel;
		const int	iPri		=	pRare->soksung1;
		const int	iSec		=	pRare->soksung2;
		const int	iThi		=	pRare->soksung3;
		switch(iHighLv)
		{
		case H_LV_NO_HIGH_ITEM://窍捞唱 焊烹 饭绢
			{
				ApplyStaticRareEffect(caster->StaticRare, iPri,	iGrade);
				ApplyStaticRareEffect(caster->StaticRare, iSec,	iGrade);
				ApplyStaticRareEffect(caster->StaticRare, iThi,	iGrade);
			}break;
		case H_LV_HIGH_ITEM://窍捞
		case H_LV_LEGEND_ITEM://饭傈靛 1
			{//窍捞唱 饭傈靛绰 霉 加己阑 利侩 矫挪促
				ApplyStaticRareEffect(caster->StaticRare, iPri,	iGrade);
			}break;
		default:{}break;
		}//switch(iHighLv)
	}
}	
////////////////////////////////////////////////////////////////////////////////////////////////////
//	何措饭绢
	const int iSqaudGrade	=	caster->SquadRare.grade;
	if(iSqaudGrade)
	{
		const int iSqaudPriType	=	caster->SquadRare.soksung1;
		const int iSqaudSecType	=	caster->SquadRare.soksung2;
		const int iSqaudThiType	=	caster->SquadRare.soksung3;
		ApplyStaticRareEffect(caster->StaticRare, iSqaudPriType	,	iSqaudGrade);
		ApplyStaticRareEffect(caster->StaticRare, iSqaudSecType	,	iSqaudGrade);
		ApplyStaticRareEffect(caster->StaticRare, iSqaudThiType	,	iSqaudGrade);
	}
////////////////////////////////////////////////////////////////////////////////////////////////////
//饭傈靛 眉农
{
	int aLegendGNo[ITEM_EQUIP_MAX] = {0,};
	int aLegendGIndex[ITEM_EQUIP_MAX] = {0,};
	for(int i = 0; i <ITEM_EQUIP_MAX; i++)
	{
		const LPRareMain pRare = (LPRareMain)&caster->equip[i].attr[IATTR_RARE_MAIN];
		if( H_LV_LEGEND_ITEM != pRare->iHighLevel){continue;}//饭傈靛啊 酒匆 版快
		aLegendGNo[i]	= pRare->soksung2;
		aLegendGIndex[i]= pRare->soksung3;
	}

	for(i = 0; i <ITEM_EQUIP_MAX; i++)//眉农秦辑 瞒绊 乐绰霸 饭傈靛 酒捞袍 捞扼搁
	{
		const int iGNo		= aLegendGNo[i];
		const int iGIndex	= aLegendGIndex[i];
		if(!iGNo || !iGIndex){continue;}
		const int iNeeds = m_aItemLegend[iGNo].aSub[iGIndex].iNeeds;
		int iLegendResult = 0;
		for(int aa = 0; aa <ITEM_EQUIP_MAX; aa++)//	needs 眉农饶 促矫 8俺甫 八祸秦辑 悸飘啊 登菌绰瘤 夯促
		{
			if( aLegendGNo[aa]		== iGNo	//郴 公扁啊 iGNo啊 鞍绊
			&&	aLegendGIndex[aa]	== iGIndex)//牢郸胶档 老摹 茄促搁
			{
				int iCmpKey = 0;
				switch(aa)
				{
				case WT_WEAPON:	{iCmpKey = LEGEND_NEED_WEAPON;}break;
				case WT_SHIELD:	{iCmpKey = LEGEND_NEED_SHIELD;}break;
				case WT_HELMET:	{iCmpKey = LEGEND_NEED_HELMET;}break;
				case WT_ARMOR:	{iCmpKey = LEGEND_NEED_ARMOR;}break;
				case WT_NECK:	{iCmpKey = LEGEND_NEED_NECK;}break;
				case WT_SHOES:	{iCmpKey = LEGEND_NEED_SHOES;}break;
				case WT_UNIQUE1:{iCmpKey = LEGEND_NEED_UNIQUE;}break;
				case WT_UNIQUE2:{iCmpKey = LEGEND_NEED_UNIQUE;}break;
				}
				if( iNeeds & iCmpKey)//泅犁 聪靛啊 aa甫 夸备 窍搁
				{
					iLegendResult |= iCmpKey;//饭傈靛俊 悸泼阑 沁促
					aLegendGNo[aa] = 0;//吝汗 眉农啊 救登霸 窍扁 困秦辑 瘤款促
					aLegendGIndex[aa] = 0;//吝汗 眉农啊 救登霸 窍扁 困秦辑 瘤款促
				}
			}
		}//for(int aa = 0; aa <ITEM_EQUIP_MAX; aa++)
		if(iNeeds == iLegendResult)
		{//促 谩匙.. 甭.
			for(int a= 0; MAX_ITEM_LEGEND_SUB_BONUS_MAX>a;a++)
			{
				const int iBonus = m_aItemLegend[iGNo].aSub[iGIndex].aiBonus[a];//焊呈胶 1狼 巴阑 盲款促
				for(int b = 0; MAX_ITEM_LEGEND_BONUS_KIND>b;b++)
				{
					ApplyStaticRareEffect(
						caster->StaticRare, 
						m_aLegendBonus[iBonus].aiKind[b],	
						m_aLegendBonus[iBonus].aiGrade[b]);
				}
			}
		}//(iNeeds == iLegendResult)
	}//for(i = 0; i <ITEM_EQUIP_MAX; i++)//眉农秦辑 瞒绊 乐绰霸 饭傈靛 酒捞袍 捞扼搁
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//	鉴埃 利栏肺 悸泼 登绢具 窍绰巴
	if( bCanViewGhost )//酒鳖 杭 荐 乐菌菌促
	{
		if(!GetStaticRareGhost(caster->StaticRare))//瘤陛篮 绊胶飘 饭绢啊 绝促
		{//弊贰辑 给夯促
			SkillMgr.SetCanViewGhost(caster,1);//郴何 俊辑 bCanViewGhost甫 false肺
		}
	}
	else
	{
		if(GetStaticRareGhost(caster->StaticRare))//瘤陛篮 绊胶飘 饭绢啊 绝促
		{
			SkillMgr.SetCanViewGhost(caster,5);//郴何 俊辑 bCanViewGhost甫 true肺
		}
	}

	if( bCanViewBomb )
	{
		if(!GetStaticRareLandmine(caster->StaticRare))//瘤陛篮 杭 荐 绝促
		{
			SkillMgr.SetCanViewBomb(caster,0);
		}
	}
	else	//酒鳖 给 好促
	{
		if(GetStaticRareLandmine(caster->StaticRare))//瘤陛篮 杭 荐 乐促
		{
			SkillMgr.SetCanViewBomb(caster,5);
		}
	}

	if( bCanViewTrap )
	{
		if(GetStaticRareTraping(caster->StaticRare))

⌨️ 快捷键说明

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