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

📄 skillutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : SkillUtil.cpp// Written by  : excel96// Description ://////////////////////////////////////////////////////////////////////////////#include "SkillUtil.h"#include "SkillInfo.h"#include "Player.h"#include "Monster.h"//#include "AttrBalanceInfo.h"#include "VampEXPInfo.h"#include "OustersEXPInfo.h"#include "SkillDomainInfoManager.h"#include "Party.h"#include "AlignmentManager.h"#include "ItemUtil.h"#include "ZoneUtil.h"#include "CreatureUtil.h"#include "Zone.h"#include "PrecedenceTable.h"#include "LogClient.h"#include "Thread.h"#include "HitRoll.h"#include "GamePlayer.h"#include "MasterLairInfoManager.h"#include "PacketUtil.h"#include "billing/BillingInfo.h"#include <stdio.h>#include <math.h>#include "ItemFactoryManager.h"#include "EventItemUtil.h"#include "EffectAuraShield.h"#include "EffectAlignmentRecovery.h"#include "EffectEnemyErase.h"#include "EffectPrecedence.h"#include "EffectRevealer.h"#include "EffectMephisto.h"#include "EffectHymn.h"#include "EffectGrandMasterSlayer.h"#include "EffectGrandMasterVampire.h"#include "EffectGrandMasterOusters.h"#include "EffectSharpShield.h"#include "EffectAirShield.h"#include "EffectArmageddon.h"#include "EffectSleep.h"#include "EffectRequital.h"#include "EffectHandsOfFire.h"#include "EffectWaterBarrier.h"#include "EffectIceOfSoulStone.h"#include "EffectBlockHead.h"#include "EffectDivineSpirits.h"#include "EffectRediance.h"#include "EffectExpansion.h"#include "EffectStoneSkin.h"#include "EffectFrozenArmor.h"#include "EffectIceFieldToCreature.h"#include "EffectExplosionWater.h"#include "EffectStriking.h"#include "VariableManager.h"#include "SkillPropertyManager.h"#include "PKZoneInfoManager.h"#include "SummonGroundElemental.h"#include "EventHeadCount.h"#include "mission/QuestManager.h"#include "mission/MonsterKillQuestStatus.h"#include "mission/EventQuestLootingManager.h"#include "Gpackets/GCLearnSkillReady.h"#include "Gpackets/GCRemoveFromGear.h"#include "Gpackets/GCStatusCurrentHP.h"#include "Gpackets/GCRemoveEffect.h"#include "Gpackets/GCAddEffect.h"#include "Gpackets/GCAddEffectToTile.h"#include "Gpackets/GCAddInjuriousCreature.h"#include "Gpackets/GCSkillFailed1.h"#include "Gpackets/GCSkillFailed2.h"#include "Gpackets/GCSystemMessage.h"#include "Gpackets/GCOtherModifyInfo.h"#include "Gpackets/GCKickMessage.h"#include "Gpackets/GCSkillToObjectOK4.h"#include "Gpackets/GCSkillToObjectOK6.h"//////////////////////////////////////////////////////////////////////////////// data structure & helper functions//////////////////////////////////////////////////////////////////////////////typedef struct DomainStruct {    int DomainType;    int DomainLevel;} SDomain;class isBig{public:	isBig () {};	bool operator () (const DomainStruct &t, const DomainStruct &b)	{		if (t.DomainLevel > b.DomainLevel)			return true;		else return false;	}};voidcheckFreeLevelLimit( PlayerCreature* pPC ) 	throw (Error){	__BEGIN_TRY//	static const char MsgLevelLimitOver[] = "公丰肺 荤侩且 荐 乐绰 饭骇 力茄俊 档崔秦辑";	// by sigi. 2002.11.19	// 蜡丰 荤侩磊啊 酒聪芭唱	// 公丰 荤侩扁埃捞 巢酒乐瘤 臼栏搁(趣篮 瓷仿摹 over) 楼弗促.	// 局靛呼 呼傅 矫胶袍篮 荤侩窍瘤 臼绊 荤侩磊 力茄篮 窍绰 版快. by sigi. 2003.2.21#if defined(__PAY_SYSTEM_FREE_LIMIT__)	if (!pPC->isPayPlayAvaiable())	{		GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPC->getPlayer());		pGamePlayer->kickPlayer( 30, KICK_MESSAGE_EXPIRE_FREEPLAY );		//pGamePlayer->setPenaltyFlag(PENALTY_TYPE_KICKED);/*		EventKick* pEventKick = new EventKick(pGamePlayer);		pEventKick->setDeadline(30*10);		pGamePlayer->addEvent(pEventKick);		// 割 檬饶俊 漏赴促..绊 焊郴霖促.		//pEventKick->setMessage( MsgLevelLimitOver );		//pEventKick->sendMessage();		// 割 檬饶俊 漏赴促..绊 焊郴霖促.		GCKickMessage gcKickMessage;		gcKickMessage.setType( KICK_MESSAGE_EXPIRE_FREEPLAY );		gcKickMessage.setSeconds( 30 );		pGamePlayer->sendPacket( &gcKickMessage );*/	}#endif	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 蜡丰拳粮 版氰摹 磺唱胶////////////////////////////////////////////////////////////////////////////////const uint g_pVariableManager->getPremiumExpBonusPercent() = 150;//////////////////////////////////////////////////////////////////////////////// 傍拜磊客 乔傍拜磊 荤捞狼 颇扼固磐甫 拌魂秦 弥辆 单固瘤甫 魂免茄促.//////////////////////////////////////////////////////////////////////////////Damage_t computeDamage(Creature* pCreature, Creature* pTargetCreature){	Assert(pCreature != NULL);	Assert(pTargetCreature != NULL);	Damage_t Damage       = 0;	bool     bCriticalHit = false;	try 	{		if (pCreature->isSlayer()) 		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			Assert(pSlayer != NULL);			Damage = computeSlayerDamage(pSlayer, pTargetCreature, bCriticalHit);		} 		else if (pCreature->isVampire()) 		{			Vampire* pVampire = dynamic_cast<Vampire *>(pCreature);			Assert(pVampire != NULL);			Damage = computeVampireDamage(pVampire, pTargetCreature, bCriticalHit);		} 		else if ( pCreature->isOusters() )		{			Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);			Assert( pOusters != NULL);			Damage = computeOustersDamage(pOusters, pTargetCreature, bCriticalHit);		}		else if (pCreature->isMonster()) 		{			Monster* pMonster = dynamic_cast<Monster *>(pCreature);			Assert(pMonster != NULL);			Damage = computeMonsterDamage(pMonster, pTargetCreature, bCriticalHit);		}		else		{			// NPC扼绰 富牢啊...			return 0;		}	} 	catch (Throwable & t) 	{ 		cerr << t.toString() << endl; 	}	return Damage;}//////////////////////////////////////////////////////////////////////////////// 傍拜磊狼 鉴荐 单固瘤甫 拌魂茄促.//////////////////////////////////////////////////////////////////////////////Damage_t computePureDamage(Creature* pCreature){	Damage_t Damage = 0;		if ( pCreature == NULL )		return Damage;	if (pCreature->isSlayer()) 	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		Assert(pSlayer != NULL);		Damage = computePureSlayerDamage(pSlayer);	} 	else if (pCreature->isVampire()) 	{		Vampire* pVampire = dynamic_cast<Vampire *>(pCreature);		Assert(pVampire != NULL);		Damage = computePureVampireDamage(pVampire);	} 	else if ( pCreature->isOusters() )	{		Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);		Assert(pOusters != NULL );		Damage = computePureOustersDamage(pOusters);	}	else if (pCreature->isMonster()) 	{		Monster* pMonster = dynamic_cast<Monster *>(pCreature);		Assert(pMonster != NULL);		Damage = computePureMonsterDamage(pMonster);	}	else	{		// NPC扼绰 富牢啊...		return 0;	}	return Damage;}//////////////////////////////////////////////////////////////////////////////// 傍拜磊客 乔傍拜磊 荤捞狼 颇扼固磐甫 拌魂秦 弥辆 单固瘤甫 魂免茄促.// 困狼 窃荐客 鞍栏唱, 捞 窃荐甫 何甫 版快俊绰 郴何利栏肺 农府萍拿 // 洒飘客 包访等 何盒捞 贸府等促.//////////////////////////////////////////////////////////////////////////////Damage_t computeDamage(Creature* pCreature, Creature* pTargetCreature, int CriticalBonus, bool& bCritical){	Assert(pCreature != NULL);	Assert(pTargetCreature != NULL);	Damage_t Damage       = 0;	bool     bCriticalHit = HitRoll::isCriticalHit(pCreature, CriticalBonus);	try 	{		if (pCreature->isSlayer()) 		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			Assert(pSlayer != NULL);			Damage = computeSlayerDamage(pSlayer, pTargetCreature, bCriticalHit);		} 		else if (pCreature->isVampire()) 		{			Vampire* pVampire = dynamic_cast<Vampire *>(pCreature);			Assert(pVampire != NULL);			Damage = computeVampireDamage(pVampire, pTargetCreature, bCriticalHit);		} 		else if (pCreature->isOusters()) 		{			Ousters* pOusters = dynamic_cast<Ousters *>(pCreature);			Assert(pOusters != NULL);			Damage = computeOustersDamage(pOusters, pTargetCreature, bCriticalHit);		} 		else if (pCreature->isMonster()) 		{			Monster* pMonster = dynamic_cast<Monster *>(pCreature);			Assert(pMonster != NULL);			Damage = computeMonsterDamage(pMonster, pTargetCreature, bCriticalHit);		}		else		{			// NPC扼绰 富牢啊...			return 0;		}	} 	catch (Throwable & t) 	{ 		cerr << t.toString() << endl; 	}	bCritical = bCriticalHit;	// 农府萍拿 洒飘捞绊, 嘎绰 仇捞 阁胶磐扼搁 150%狼 单固瘤甫 林霸 等促. 	if (bCritical && pTargetCreature->isMonster())	{		Damage = getPercentValue(Damage, 150);	}	return Damage;}//////////////////////////////////////////////////////////////////////////////// 盔贰 单固瘤俊辑 橇肺咆记阑 力寇茄 弥辆 单固瘤甫 府畔茄促.//////////////////////////////////////////////////////////////////////////////double computeFinalDamage(Damage_t minDamage, Damage_t maxDamage, Damage_t realDamage, Protection_t Protection, bool bCritical){	// 农府萍拿 洒飘扼搁 橇肺咆记阑 绊妨窍瘤 臼绊, 单固瘤 弊措肺 甸绢埃促.	if (bCritical) return realDamage;	if ( Protection > 640 ) Protection = 640;	Damage_t FinalDamage;	FinalDamage = realDamage - ( realDamage * ( Protection / 8 ) ) / 100;	//FinalDamage = realDamage - ( realDamage * ( Protection / 10 ) ) / 100;	return max( 1, (int)FinalDamage );/*	Damage_t avgDamage   = (minDamage + maxDamage) >> 1;	int      DamageRatio = 100;	if (Protection < avgDamage)	{		DamageRatio = 100;	}	else if (Protection < getPercentValue(avgDamage, 150))	{		DamageRatio = 90;	}	else if (Protection < getPercentValue(avgDamage, 200))	{		DamageRatio = 80;	}	else if (Protection < getPercentValue(avgDamage, 250))	{		DamageRatio = 70;	}	else if (Protection < getPercentValue(avgDamage, 300))	{		DamageRatio = 60;	}	else	{		DamageRatio = 50;	}	return max(1, getPercentValue(realDamage, DamageRatio));*/}//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 傍拜磊客 乔傍拜磊 荤捞狼 单固瘤甫 拌魂茄促.//////////////////////////////////////////////////////////////////////////////Damage_t computeSlayerDamage(Slayer* pSlayer, Creature* pTargetCreature, bool bCritical){	Assert(pSlayer != NULL);	Assert(pTargetCreature != NULL);	Item*    pItem       = pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND);	uint     timeband    = getZoneTimeband( pSlayer->getZone() );	double   FinalDamage = 0;	// 老窜 盖颊狼 单固瘤甫 罐酒柯促.	Damage_t MinDamage  = pSlayer->getDamage(ATTR_CURRENT);	Damage_t MaxDamage  = pSlayer->getDamage(ATTR_MAX);	// 公扁甫 甸绊 乐促搁, min, max俊 公扁狼 min, max甫 拌魂秦 霖促.	if (pItem != NULL && pSlayer->isRealWearingEx(Slayer::WEAR_RIGHTHAND))	{		// 胶飘扼捞欧 单固瘤甫 拌魂窍绰 何盒阑 Slayer::initAllStat() 何盒栏肺		// 颗扁搁辑 弊镑俊辑 m_Damage[]甫 技泼秦 滚府扁 锭巩俊, 咯扁辑 歹且 		// 鞘夸啊 绝绢脸促. -- 2002.01.17 辫己刮		//MinDamage += (pItem->getMinDamage() + pItem->getBonusDamage());		//MaxDamage += (pItem->getMaxDamage() + pItem->getBonusDamage());		MinDamage += pItem->getMinDamage();		MaxDamage += pItem->getMaxDamage();	}	// 角力 罚待 单固瘤甫 拌魂茄促.	Damage_t RealDamage = max(1, Random(MinDamage, MaxDamage));	if (pTargetCreature->isSlayer())	{		Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pTargetCreature);		Assert(pTargetSlayer != NULL);		Protection_t Protection = pTargetSlayer->getProtection();		FinalDamage = computeFinalDamage(MinDamage, MaxDamage, RealDamage, Protection, bCritical);	} 	else if (pTargetCreature->isVampire()) 

⌨️ 快捷键说明

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