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

📄 rareeffectmgr.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		{
			SkillMgr.SetCanViewTrap(caster,0);
		}
	}
	else
	{
		if(GetStaticRareTraping(caster->StaticRare))
		{
			SkillMgr.SetCanViewTrap(caster,5);
		}
	}
	return 0;
}

inline int	CRareEffectMgr::CheckFaultStaticRareType(const int iKind)const
{
	//力累 啊瓷 殿殿狼 炼扒阑 持绢霖促
	if( iKind	> MAX_ITEM_RARE	|| iKind	<	1	)	{ return 0; }
	return 1;
}

inline int	CRareEffectMgr::CheckFaultDynamicRareType(const int iKind)const
{
	//力累 啊瓷 殿殿狼 炼扒阑 持绢霖促
	if( iKind	> MAX_ITEM_FUNCTION	|| iKind	<	1	)	{ return 0; }
	return 1;
}

inline int	CRareEffectMgr::CheckFaultRareGrade(const int iGrade)const
{
	//力累 啊瓷 殿殿狼 炼扒阑 持绢霖促
	if( iGrade	> MAX_ITEM_GRADE		|| iGrade	<	1	)	{ return 0; }
	return 1;
}

inline int	CRareEffectMgr::GetStaticRareEffectValue(const int iKind, const int iGrade)const
{
	if(!CheckFaultStaticRareType(iKind)){ return 0;}
	if(!CheckFaultRareGrade(iGrade)){ return 0;}

	return ItemRare[iKind].GRADE[iGrade];
}

inline int	CRareEffectMgr::GetDynamicRareEffectValue(const int iKind, const int iGrade)const
{
	if(!CheckFaultDynamicRareType(iKind)){ return 0;}
	if(!CheckFaultRareGrade(iGrade)){ return 0;}

	return ItemFunction[iKind].iGrade[iGrade];
}

inline DWORD	CRareEffectMgr::GetDynamicRareEffectTime(const int iKind, const int iGrade)const
{
	if(!CheckFaultDynamicRareType(iKind)){ return 0;}
	if(!CheckFaultRareGrade(iGrade)){ return 0;}

	return ItemFunction[iKind].iTime[iGrade];
}


inline short CRareEffectMgr::GetStaticRareMaxValue(const int iKind)const
{
	if(!CheckFaultStaticRareType(iKind)){ return 0;}

	const short nMax = (short)ItemRare[iKind].GRADE[0];//0锅捞 钙胶促

	return nMax;
}

inline int	CRareEffectMgr::GetDynamicRareMaxValue(const int iKind)const
{
	return 0;
}

inline int	CRareEffectMgr::AddANDCheckStaticRareMaxValue(const int iKind,short &nNow, const int iAddValue,bool bSymbol)//soto-1.02
{
	int iMax	= 0;
	int iAdded	= 0;
	
	if(bSymbol)
	{
		nNow += iAddValue;
	}
	else
	{
		iMax		= GetStaticRareMaxValue(iKind);
		iAdded	= nNow+iAddValue;//歹秦柳 蔼 
		if( !iMax ) { return 0; }//钙胶蔼捞 0 牢芭绰 扁瓷 绝促.

		if( iMax <= iAdded )//钙胶 焊促 歹秦 初篮 蔼捞 歹 腹栏搁
		{
			nNow = iMax;//钙胶肺 悸泼
		}
		else
		{
			nNow = iAdded;
		}
		
		if(nNow < 0)
		{
			nNow = 0;
		}
	}

	return 1;
}

//soto-1.02
inline int	CRareEffectMgr::ApplyStaticRareEffect(STATICRAREEFFECT	&SR, const int iKind, const int iGrade,bool bSymbol)
{
	int iValue  = 0;
	if(bSymbol)
	{
		iValue = iGrade; //缴杭 酒捞袍老锭绰. iGrade 函荐啊 角力 利侩蔼栏肺 静牢促.
	}
	else
	{
		iValue  = GetStaticRareEffectValue(iKind,iGrade);
	}
	
	if( !iValue ) {return 0;}
	
	switch(iKind)
	{
	case  RARE_POWER			:{AddANDCheckStaticRareMaxValue(iKind, SR.nPower			, iValue);	}break;	
	case  RARE_ACCURATE			:{AddANDCheckStaticRareMaxValue(iKind, SR.nAccurate			, iValue);	}break;	
	case  RARE_WISE				:{AddANDCheckStaticRareMaxValue(iKind, SR.nWise				, iValue);	}break;	
	case  RARE_BEAR				:{AddANDCheckStaticRareMaxValue(iKind, SR.nBear				, iValue);	}break;	
	case  RARE_DISTANT			:{AddANDCheckStaticRareMaxValue(iKind, SR.nDistant			, iValue);	}break;	
//	case  RARE_VIGOR			:{AddANDCheckStaticRareMaxValue(iKind, SR.nVigor			, iValue);	}break;	
	case  RARE_VIGOR			:{AddANDCheckStaticRareMaxValue(iKind, SR.nPower			, iValue);	}break;	//厚芭客 颇况 烹钦
	case  RARE_CURSE			:{AddANDCheckStaticRareMaxValue(iKind, SR.nCurse			, iValue);	}break;	
	case  RARE_AID				:{AddANDCheckStaticRareMaxValue(iKind, SR.nAid				, iValue);	}break;	
	case  RARE_MASKING			:{AddANDCheckStaticRareMaxValue(iKind, SR.nMasking			, iValue);	}break;	
	//	case  RARE_PIERCING			:{AddANDCheckStaticRareMaxValue(iKind, SR.nPiercing			, iValue);	}break;
	case  RARE_PIERCING			:{AddANDCheckStaticRareMaxValue(iKind, SR.nPower			, iValue);	}break;//020823 lsw
	case  RARE_BASIC_RESIST		:{AddANDCheckStaticRareMaxValue(iKind, SR.nBasicResist		, iValue);	}break;	
	case  RARE_HARDEST			:{AddANDCheckStaticRareMaxValue(iKind, SR.nHardest			, iValue);	}break;	
	case  RARE_SMART			:{AddANDCheckStaticRareMaxValue(iKind, SR.nSmart			, iValue);	}break;	
	case  RARE_RESIST_FREEZE	:{AddANDCheckStaticRareMaxValue(iKind, SR.nResist_freeze	, iValue);	}break;	
	case  RARE_RESIST_VENOM		:{AddANDCheckStaticRareMaxValue(iKind, SR.nResist_venom		, iValue);	}break;	
	case  RARE_RESIST_LIGHTNING	:{AddANDCheckStaticRareMaxValue(iKind, SR.nResist_lightning	, iValue);	}break;	
	case  RARE_RESIST_BLAZE		:{AddANDCheckStaticRareMaxValue(iKind, SR.nResist_blaze		, iValue);	}break;	
	case  RARE_RESIST_PARALYSIS	:{AddANDCheckStaticRareMaxValue(iKind, SR.nResist_paralysis	, iValue);	}break;	
	case  RARE_RESIST_HOLY		:{AddANDCheckStaticRareMaxValue(iKind, SR.nResist_holy		, iValue);	}break;	
	case  RARE_RESIST_ALL		:{AddANDCheckStaticRareMaxValue(iKind, SR.nResist_all		, iValue);	}break;	
	case  RARE_SPEED			:{AddANDCheckStaticRareMaxValue(iKind, SR.nSpeed			, iValue);	}break;	
	case  RARE_LIFE				:{AddANDCheckStaticRareMaxValue(iKind, SR.nLife				, iValue);	}break;	
	case  RARE_MANA				:{AddANDCheckStaticRareMaxValue(iKind, SR.nMana				, iValue);	}break;	
	case  RARE_DIVINE			:{AddANDCheckStaticRareMaxValue(iKind, SR.nDivine			, iValue);	}break;	
	case  RARE_HEALTH			:{AddANDCheckStaticRareMaxValue(iKind, SR.nHealth			, iValue);	}break;	
	case  RARE_BROOD			:{AddANDCheckStaticRareMaxValue(iKind, SR.nBrood			, iValue);	}break;	
	case  RARE_MIND				:{AddANDCheckStaticRareMaxValue(iKind, SR.nMind				, iValue);	}break;	
	case  RARE_SPIRIT			:{AddANDCheckStaticRareMaxValue(iKind, SR.nSpirit			, iValue);	}break;	
	case  RARE_YOUTH			:{AddANDCheckStaticRareMaxValue(iKind, SR.nYouth			, iValue);	}break;	
	case  RARE_FATAL			:{AddANDCheckStaticRareMaxValue(iKind, SR.nFatal			, iValue);	}break;	
	case  RARE_MAGIC			:{AddANDCheckStaticRareMaxValue(iKind, SR.nMagic			, iValue);	}break;	
	case  RARE_NATURE			:{AddANDCheckStaticRareMaxValue(iKind, SR.nNature			, iValue);	}break;	
	case  RARE_STRENGTH			:{AddANDCheckStaticRareMaxValue(iKind, SR.nStrength			, iValue);	}break;	
	case  RARE_DEXTERITY		:{AddANDCheckStaticRareMaxValue(iKind, SR.nDexterity		, iValue);	}break;	
	case  RARE_CONSTITUTION		:{AddANDCheckStaticRareMaxValue(iKind, SR.nConstitution		, iValue);	}break;	
	case  RARE_WISDOM			:{AddANDCheckStaticRareMaxValue(iKind, SR.nWisdom			, iValue);	}break;	
	case  RARE_INTELLIGENCE		:{AddANDCheckStaticRareMaxValue(iKind, SR.nIntelligence		, iValue);	}break;	
	case  RARE_CHARISMA			:{AddANDCheckStaticRareMaxValue(iKind, SR.nCharisma			, iValue);	}break;	
	case  RARE_ENDURANCE		:{AddANDCheckStaticRareMaxValue(iKind, SR.nEndurance		, iValue);	}break;	
	case  RARE_MOVEMENT			:{AddANDCheckStaticRareMaxValue(iKind, SR.nMovement			, iValue);	}break;	
	case  RARE_MORAL			:{AddANDCheckStaticRareMaxValue(iKind, SR.nMoral			, iValue);	}break;	
	case  RARE_LUCKY			:{AddANDCheckStaticRareMaxValue(iKind, SR.nLucky			, iValue);	}break;	
	case  RARE_WIZARD			:{AddANDCheckStaticRareMaxValue(iKind, SR.nWizard			, iValue);	}break;	
	case  RARE_PRIEST			:{AddANDCheckStaticRareMaxValue(iKind, SR.nPriest			, iValue);	}break;	
//	case  RARE_MAGIC_POWER		:{AddANDCheckStaticRareMaxValue(iKind, SR.nMagic_power		, iValue);	}break;	
	case  RARE_MAGIC_VIGOR		:{AddANDCheckStaticRareMaxValue(iKind, SR.nMagic_vigor		, iValue);	}break;	
	case  RARE_MAGIC_STAY		:{AddANDCheckStaticRareMaxValue(iKind, SR.nMagic_stay		, iValue);	}break;	
//	case  RARE_NATURE_POWER		:{AddANDCheckStaticRareMaxValue(iKind, SR.nNature_power		, iValue);	}break;	
	case  RARE_NATURE_VIGOR		:{AddANDCheckStaticRareMaxValue(iKind, SR.nNature_vigor		, iValue);	}break;	
	case  RARE_NATURE_STAY		:{AddANDCheckStaticRareMaxValue(iKind, SR.nNature_stay		, iValue);	}break;	
//	case  RARE_LIFE_RECOVERY	:{AddANDCheckStaticRareMaxValue(iKind, SR.cLife_recovery	, iValue);	}break;	
//	case  RARE_MANA_RECOVERY	:{AddANDCheckStaticRareMaxValue(iKind, SR.cMana_recovery	, iValue);	}break;	
	case  RARE_CRITICAL			:{AddANDCheckStaticRareMaxValue(iKind, SR.nCritical			, iValue);	}break;	
//	case  RARE_GUARDIAN			:{AddANDCheckStaticRareMaxValue(iKind, SR.nGuardian			, iValue);	}break;	
	case  RARE_EVASION			:{AddANDCheckStaticRareMaxValue(iKind, SR.nEvasion			, iValue);	}break;	
	case  RARE_56				:{					}break;	
	case  RARE_57				:{					}break;	
	case  RARE_58				:{					}break;	
	case  RARE_59				:{					}break;	
	case  RARE_60				:{					}break;	
	case  RARE_61				:{					}break;	
	case  RARE_62				:{					}break;	
	case  RARE_63				:{					}break;	
	case  RARE_64				:{					}break;	
	case  RARE_65				:{					}break;	
	case  RARE_66				:{					}break;	
	case  RARE_67				:{					}break;	
	case  RARE_WITCH			:{AddANDCheckStaticRareMaxValue(iKind, SR.nWitch			, iValue);	}break;	
	case  RARE_DEVIL			:{AddANDCheckStaticRareMaxValue(iKind, SR.nDevil			, iValue);	}break;	
	case  RARE_DESIRE			:{AddANDCheckStaticRareMaxValue(iKind, SR.nDesire			, iValue);	}break;	
	case  RARE_ROBBER			:{AddANDCheckStaticRareMaxValue(iKind, SR.nRobber			, iValue);	}break;	
	case  RARE_EVIL				:{AddANDCheckStaticRareMaxValue(iKind, SR.nEvil				, iValue);	}break;	
	case  RARE_SATAN			:{AddANDCheckStaticRareMaxValue(iKind, SR.nSatan			, iValue);	}break;	
	case  RARE_WEARY			:{AddANDCheckStaticRareMaxValue(iKind, SR.nWeary			, iValue);	}break;	
	case  RARE_FATIGUE			:{AddANDCheckStaticRareMaxValue(iKind, SR.nFatigue			, iValue);	}break;	
	case  RARE_COUNTERATTACK	:{AddANDCheckStaticRareMaxValue(iKind, SR.nCounterattack	, iValue);	}break;	
	case  RARE_STRIKE			:{AddANDCheckStaticRareMaxValue(iKind, SR.nStrike			, iValue);	}break;	
//	case  RARE_78				:{		}break;	
	case  RARE_SNAG				:{AddANDCheckStaticRareMaxValue(iKind, SR.nSnag				, iValue);	}break;	
	case  RARE_VERTIGLY			:{AddANDCheckStaticRareMaxValue(iKind, SR.nVertigly			, iValue);	}break;	
	case  RARE_POISON			:{AddANDCheckStaticRareMaxValue(iKind, SR.nPoison			, iValue);	}break;	
	case  RARE_STIFF			:{AddANDCheckStaticRareMaxValue(iKind, SR.nStiff			, iValue);	}break;	
	case  RARE_SLACK			:{AddANDCheckStaticRareMaxValue(iKind, SR.nSlack			, iValue);	}break;	
//	case  RARE_84				:{		}break;	
	case  RARE_GHOST			:{AddANDCheckStaticRareMaxValue(iKind, SR.nGhost			, iValue);	}break;	
	case  RARE_LANDMINE			:{AddANDCheckStaticRareMaxValue(iKind, SR.nLandmine			, iValue);	}break;	
	case  RARE_TRAPING			:{AddANDCheckStaticRareMaxValue(iKind, SR.nTraping			, iValue);	}break;	
	case  RARE_DETECT			://滴啊瘤甫 钦模 瓤苞
		{	
			AddANDCheckStaticRareMaxValue(RARE_LANDMINE, SR.nLandmine		, iValue);
			AddANDCheckStaticRareMaxValue(RARE_TRAPING, SR.nTraping		, iValue);
		}
		break;	
	case  RARE_HIGH_POWER:{AddANDCheckStaticRareMaxValue(iKind, SR.nHighPower			, iValue);	}break;	
	case  RARE_HIGH_SHIELD:{AddANDCheckStaticRareMaxValue(iKind, SR.nHighShield			, iValue);	}break;	
	case  RARE_HIGH_BLOOD:{AddANDCheckStaticRareMaxValue(iKind, SR.nHighBlood			, iValue);	}break;	
	case  RARE_HIGH_MAGIC:{AddANDCheckStaticRareMaxValue(iKind, SR.nHighMagic			, iValue);	}break;	
	case  RARE_HIGH_NATURE:{AddANDCheckStaticRareMaxValue(iKind, SR.nHighNature			, iValue);	}break;		
	case  RARE_HIGH_RESIST_ALL:{AddANDCheckStaticRareMaxValue(iKind, SR.nResist_all		, iValue);	}break;	
	default						:{return 0;} break;	
	}
	return 1;
}

inline int	CRareEffectMgr::AddANDCheckDynamicRareMaxValue(const int iKind,const int iValue)
{
	return 0;
}
	

int	CRareEffectMgr::ApplyDynamicRareEffect(void* ch, const int iKind, const int iGrade, const int iOrder)
{
	const int iValue  = GetDynamicRareEffectValue(iKind,iGrade);
	const DWORD dwTime  = GetDynamicRareEffectTime(iKind,iGrade);
	CHARLIST *Caster = (CHARLIST*)ch;
	if( !iValue ) {return 0;}
	switch(iKind)//唱吝俊 康绢捞抚 叼颇牢栏肺 官曹巴  g_curr_time; 阑 荤侩 茄促
	{
	case FITEM_MOVABLE			:	
		{
			Caster->ClearCurse(1);	
			::SendCharacterCondition(Caster, 0);
		}break;	//付厚,籍拳,去鄂 秦力	付厚拌凯秦力	
	case FITEM_RECOVERY			:	
		{
			Caster->ClearCurse(2);	
			Caster->ClearCurse(6);
			::SendCharacterCondition(Caster, 0);
		}break;	//加档历窍 秦力	加档历窍 秦力	
	case FITEM_DETOX			:	
		{	
			Caster->ClearCurse(3);	
			::SendCharacterCondition(Caster, 0);
		}break;	//秦刀累侩	秦刀	
	case FITEM_ENLIGHT			:	
		{	
			Caster->ClearCurse(4);	
			SendMagicCommand(Caster, SET_CUREBLIND, 0, 0);	//矫仿惑角 雀汗
		}break;	//矫仿 雀汗	矫仿惑角	
	//case FITEM_NULL			:	//	5	NULL	NULL	
	//case FITEM_NULL			:	//	6	NULL	NULL	
	//case FITEM_REVIVAL			:	//	7	//磊悼 何劝	KillCharacter 俊 乐澜 case 巩俊辑 滑巴
	case FITEM_COME_BACK		:	//	8	//付阑肺狼 蓖券	磊脚捞 加茄 惫啊狼 付阑肺 倒酒咳 	
		{
			MoveToHomeTown(Caster);
		}break;
	case FITEM_GHOST			:	//	23	//蜡飞阑 杭 荐 乐澜	蜡飞阑 杭 荐 乐澜	
		{
			SkillMgr.SetCanViewGhost(Caster,dwTime);//郴何 俊辑 bCanViewGhost甫 true肺
		}break;
	//诀弊饭捞靛 啊瓷幅绰 捞芭 眉农
	//CheckDynamicRareMaxValue
	case FITEM_RESIST_UP		://	9	//葛电 拌凯 历亲仿 惑铰	葛电 拌凯 付过 历亲仿 惑铰	
	case FITEM_STEALTH			://	10	//捧疙 惑怕 蜡瘤	老沥 矫埃 捧疙 惑怕 蜡瘤	
	case FITEM_INVALID_CURSE	://	11	//历林 拌凯 付过 公瓤拳	惑措狼 历林 拌凯 付过 公瓤拳	
	case FITEM_INVALID_OFFENCE	://	12	//傍拜 拌凯 付过 公瓤拳	惑措狼 傍拜 拌凯 付过 公瓤拳	
	case FITEM_POWER_UP			://	13	//拱府利 傍拜仿 刘啊	拱府利 傍拜仿 刘啊(%)	
	case FITEM_SPEED_UP			://	14	//捞悼 加档 刘啊	捞悼 加档 (捞悼仿) 刘啊	
	case FITEM_HEAVY_ARMOR		://	15	//AC 刘啊	AC 荐摹 刘啊	
	case FITEM_SPELL_UP			://	16	//付过 单固瘤 刘气	付过 单固瘤 刘气(%)	
	//case FITEM_					://	17	//付过 瘤加 矫埃 刘气	付过 瘤加 矫埃 刘气(msec)	
	case FITEM_CRITICAL			://	18	//CRITICAL DAMAGE 	农府萍拿 单固瘤肺 拱府利 傍拜	
	case FITEM_STROKE			:	//	19	//拱府利 傍拜 己傍伏 100%	拱府利 傍拜 己傍伏 100%	
	case FITEM_AGILITY			://	20	//拱府利 傍拜 雀乔啦 90%	拱府利 傍拜 雀乔啦 90%	
	case FITEM_INVALID_PROTECT	://	21	//惑措狼 焊龋 拌凯 付过 公矫	惑措狼 焊龋 拌凯 付过阑 公炼扒 公矫窍咯 傍拜(拱府/付过 葛滴)	
	case FITEM_INVALID_RESIST	://	22	//惑措狼 付过 历亲仿 公矫	惑措狼 付过 历亲仿 公炼扒 公矫 (付过 历亲仿 0栏肺 利侩)	
	case FITEM_SAMARITAN		:	//	24	//NK狼 傍拜阑 公矫	NK狼 拱府利/付过 傍拜 葛滴 公矫	
	case FITEM_SLIGHT			://25	//付过 某胶泼 矫埃 窜绵	付过 某胶泼 矫埃 窜绵(%)	
		{
		switch(iOrder)
			{
			case 1:
				{
				Caster->DynamicRare.cRareType1	= iKind;
				Caster->DynamicRare.iValue1		= iValue;
				Caster->DynamicRare.iRareTime1	= g_curr_time+dwTime;
				
				}break;
			case 2:
				{
				Caster->DynamicRare.cRareType2	= iKind;
				Caster->DynamicRare.iValue2		= iValue;
				Caster->DynamicRare.iRareTime2	= g_curr_time+dwTime;
				}break;
			case 3:
				{
				Caster->DynamicRare.cRareType3	= iKind;
				Caster->DynamicRare.iValue3		= iValue;
				Caster->DynamicRare.iRareTime3	= g_curr_time+dwTime;
				}break;
			default:break;
			}
		}break;
	default:{return 0;}break;
	}
	
	return 1;
}

void ResetAbility(CHARLIST *ch)
{
	if(!ch){return;}

	RareEM.ResetRareEffect(ch);	
	g_CSymbolMgr.AddSymbolEffect(ch);//soto-1.02 缴杭狼 瓷仿阑 利侩矫挪促.
	const int nPassive = ch->GetPassiveCombat();
	ch->ResetAbility(nPassive);
	::SendAbilityOpen(ch->GetServerID());
}

int	CRareEffectMgr::GetDynamicRareValue(const int iDRType,const	DYNAMICRAREEFFECT	&DR) const
{
	if(!iDRType ) {return 0;}

	if(iDRType == DR.cRareType1)
	{
		return DR.iValue1;
	}
	if(iDRType == DR.cRareType2)
	{
		return DR.iValue2;
	}
	if(iDRType == DR.cRareType3)
	{
		return DR.iValue3;
	}
	return 0;
}

void CRareEffectMgr::AutoCheckDynamicRare(DYNAMICRAREEFFECT	&DR)
{	//瓤侩 矫埃捞 粮犁窍绰单 辑滚 矫埃焊促 陋栏搁
	if( DR.iRareTime1 && (g_curr_time > DR.iRareTime1))
	{
		DR.iRareTime1	= 0;
		DR.cRareType1	= 0;
		DR.iValue1		= 0;
	}
	if( DR.iRareTime2 && (g_curr_time > DR.iRareTime2))
	{

⌨️ 快捷键说明

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