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

📄 skillutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		{			Vampire* pVampireAttacker = dynamic_cast<Vampire*>(pAttacker);			Result2 = max(0, (int)pVampireAttacker->getHP()-(int)counterDamage); 			pVampireAttacker->setHP(Result2, ATTR_CURRENT);			bBroadcastAttackerHP = true;			bSendAttackerHP      = true;			// Mephisto 捞棋飘 吧妨乐栏搁 HP 30% 捞窍老锭 钱赴促.			if (pVampireAttacker->isFlag(Effect::EFFECT_CLASS_MEPHISTO))			{				HP_t maxHP = pVampireAttacker->getHP(ATTR_MAX);				// 33% ... 纳纳..				if (Result2*3 < maxHP)				{					Effect* pEffect = pVampireAttacker->findEffect( Effect::EFFECT_CLASS_MEPHISTO );					if ( pEffect != NULL )					{						pEffect->setDeadline(0);					}					else					{						pVampireAttacker->removeFlag(Effect::EFFECT_CLASS_MEPHISTO);					}//					pVampireAttacker->getEffectManager()->deleteEffect( Effect::EFFECT_CLASS_MEPHISTO );				}			}		}		else if (pAttacker->isOusters())		{			Ousters* pOustersAttacker = dynamic_cast<Ousters*>(pAttacker);			Result2 = max(0, (int)pOustersAttacker->getHP()-(int)counterDamage); 			pOustersAttacker->setHP(Result2, ATTR_CURRENT);			bBroadcastAttackerHP = true;			bSendAttackerHP      = true;		}		else if (pAttacker->isMonster())		{			Monster* pMonsterAttacker = dynamic_cast<Monster*>(pAttacker);			Result2 = max(0, (int)pMonsterAttacker->getHP()-(int)counterDamage); 			pMonsterAttacker->setHP(Result2, ATTR_CURRENT);			pMonsterAttacker->setDamaged(true);			// 阁胶磐啊 开 单固瘤甫 罐阑 版快俊档 箕橇角靛 静绊 傍拜罐篮 浇饭捞绢俊霸 快急鼻捞 林绢柳促.			pMonsterAttacker->addPrecedence(pTarget->getName(), pTarget->getPartyID(), counterDamage);			pMonsterAttacker->setLastHitCreatureClass(pTarget->getCreatureClass());			bBroadcastAttackerHP = true;			if (pMonsterAttacker->getHP(ATTR_CURRENT)*3 < pMonsterAttacker->getHP(ATTR_MAX))			{				PrecedenceTable* pTable = pMonsterAttacker->getPrecedenceTable();				// HP啊 3盒狼 1 捞窍牢 惑怕扼绊 公炼扒 拌魂阑 窍搁, 				// 概畔付促 狼固啊 绝绰 拌魂阑 拌加 窍霸 登骨肺, 				// 茄锅 拌魂阑 窍绊 唱搁, 磷扁 傈鳖瘤绰 促矫 拌魂窍瘤 臼档废				// 敲贰弊甫 技泼秦 霖促. 捞 敲贰弊甫 捞侩窍咯 鞘夸绝绰 拌魂阑 临牢促.				if (pTable->getComputeFlag() == false)				{					// 拌魂阑 秦霖促.					pTable->compute();					// 龋胶飘狼 捞抚苞 颇萍 ID甫 捞侩窍咯, 捞棋飘甫 吧绢霖促.					EffectPrecedence* pEffectPrecedence = new EffectPrecedence(pMonsterAttacker);					pEffectPrecedence->setDeadline(100);					pEffectPrecedence->setHostName(pTable->getHostName());					pEffectPrecedence->setHostPartyID(pTable->getHostPartyID());					pMonsterAttacker->setFlag(Effect::EFFECT_CLASS_PRECEDENCE);					pMonsterAttacker->addEffect(pEffectPrecedence);				}			}		}	}	return Result2;}bool canBlockByWaterBarrier( SkillType_t SkillType ){	switch ( SkillType )	{		case SKILL_METEOR_STRIKE:		case SKILL_POISON_STORM:		case SKILL_GREEN_POISON:		case SKILL_GREEN_STALKER:		case SKILL_ACID_STORM:		case SKILL_ACID_BOLT:		case SKILL_ACID_STRIKE:		case SKILL_ACID_SWAMP:		case SKILL_BLOODY_KNIFE:		case SKILL_BLOODY_WAVE:		case SKILL_BLOODY_STRIKE:		case SKILL_BLOODY_BALL:		case SKILL_BLOODY_WALL:		case SKILL_BLOODY_SPEAR:		case SKILL_WIND_DIVIDER:		case SKILL_SWORD_RAY:		case SKILL_WIDE_LIGHTNING:		case SKILL_EARTHQUAKE:		case SKILL_POWER_OF_LAND:		case SKILL_MULTI_AMPUTATE:		case SKILL_WILD_TYPHOON:		case SKILL_ATTACK_ARMS:		case SKILL_DOUBLE_SHOT:		case SKILL_TRIPLE_SHOT:		case SKILL_MULTI_SHOT:		case SKILL_HEAD_SHOT:		case SKILL_QUICK_FIRE:		case SKILL_ULTIMATE_BLOW:		case SKILL_PIERCING:		case SKILL_THROW_BOMB:		case SKILL_BULLET_OF_LIGHT:		case SKILL_GUN_SHOT_GUIDANCE:		case SKILL_HOLY_ARROW:		case SKILL_CAUSE_LIGHT_WOUNDS:		case SKILL_CAUSE_SERIOUS_WOUNDS:		case SKILL_CAUSE_CRITICAL_WOUNDS:		case SKILL_VIGOR_DROP:		case SKILL_TURN_UNDEAD:		case SKILL_ILLENDUE:		case SKILL_THROW_HOLY_WATER:		case SKILL_LIGHT_BALL:		case SKILL_AURA_BALL:		case SKILL_AURA_RING:		case SKILL_ENERGY_DROP:		case SKILL_REBUKE:		case SKILL_SPIRIT_GUARD:		case SKILL_KASAS_ARROW:		case SKILL_PROMINENCE:		case SKILL_RING_OF_FLARE:		case SKILL_BLAZE_BOLT:		case SKILL_HANDS_OF_NIZIE:		case SKILL_STONE_AUGER:		case SKILL_EARTHS_TEETH:			return true;		default:			return false;	}}bool canBlockByGrayDarkness( SkillType_t skillType ){	switch( skillType )	{		case SKILL_SWORD_WAVE:		case SKILL_SWORD_RAY:		case SKILL_WIND_DIVIDER:		case SKILL_THUNDER_BOLT:		case SKILL_THUNDER_STORM:		case SKILL_WIDE_LIGHTNING:		case SKILL_TORNADO_SEVER:		case SKILL_EARTHQUAKE:		case SKILL_POWER_OF_LAND:		case SKILL_WILD_TYPHOON:		case SKILL_MULTI_SHOT:		case SKILL_MOLE_SHOT:		case SKILL_GUN_SHOT_GUIDANCE:		case SKILL_VIGOR_DROP:		case SKILL_TURN_UNDEAD:		case SKILL_ENERGY_DROP:			return true;		default:			return false;	}}bool canGiveSkillExp( Slayer* pSlayer, SkillDomainType_t SkillDomainType, SkillType_t UseSkillType ){	if ( pSlayer == NULL ) return false;	if ( !pSlayer->isRealWearing( Slayer::WEAR_RIGHTHAND ) ) return false;	Item* pWeapon = pSlayer->getWearItem( Slayer::WEAR_RIGHTHAND );	if ( pWeapon == NULL ) return false;	switch ( SkillDomainType )	{		case SKILL_DOMAIN_BLADE:			if ( pWeapon->getItemClass() != Item::ITEM_CLASS_BLADE ) return false;			break;		case SKILL_DOMAIN_SWORD:			if ( pWeapon->getItemClass() != Item::ITEM_CLASS_SWORD ) return false;			break;		case SKILL_DOMAIN_GUN:			if ( !isArmsWeapon( pWeapon ) ) return false;			break;		case SKILL_DOMAIN_HEAL:			if ( pWeapon->getItemClass() != Item::ITEM_CLASS_CROSS ) return false;			break;		case SKILL_DOMAIN_ENCHANT:			if ( pWeapon->getItemClass() != Item::ITEM_CLASS_MACE ) return false;			break;		default:			return false;	}	if ( UseSkillType < SKILL_DOUBLE_IMPACT ) return true;	SkillInfo* pUseSkillInfo = g_pSkillInfoManager->getSkillInfo( UseSkillType );	if ( SkillDomainType != pUseSkillInfo->getDomainType() ) return false;	return true;}void giveSkillExp( Slayer* pSlayer, SkillType_t SkillType, ModifyInfo& AttackerMI ){	if ( pSlayer == NULL ) return;	SkillSlot* pSkillSlot = pSlayer->getSkill( SkillType );	SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo( SkillType );	if ( pSkillSlot != NULL && pSkillInfo != NULL )	{		//cout << pSlayer->getName() << "俊霸 " << pSkillInfo->getName() << "胶懦狼 版氰摹甫 凛聪促." << endl;		increaseSkillExp(pSlayer, pSkillInfo->getDomainType(), pSkillSlot, pSkillInfo, AttackerMI);	}}//////////////////////////////////////////////////////////////////////////////// 流立利栏肺 单固瘤甫 技泼茄促.//////////////////////////////////////////////////////////////////////////////HP_t setDamage(Creature* pTargetCreature, Damage_t Damage,                Creature* pAttacker, SkillType_t SkillType,                ModifyInfo* pMI, ModifyInfo* pAttackerMI, bool canKillTarget){	Assert(pTargetCreature != NULL);	if (pTargetCreature->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE)	|| pTargetCreature->isFlag(Effect::EFFECT_CLASS_TENDRIL)	|| pTargetCreature->isDead())	{		//if (pTargetCreature->isVampire())		// return蔼栏肺 泅犁 HP甫 逞败拎具 沥惑捞摆瘤父		// return蔼阑 荤侩窍绰 何盒捞 绝绢辑 老窜 公矫茄促.		// by sigi. 2002.9.5		return 0;	}//	bool canKillTarget = (SkillType==SKILL_ACID_SWAMP)?false:true;	Zone* pZone = pTargetCreature->getZone();	Assert(pZone != NULL);	HP_t        Result  = 0;	HP_t        Result2 = 0;	HP_t        hp      = 0;	MP_t        mp      = 0;	ZoneCoord_t TX      = 0;	ZoneCoord_t TY      = 0;	ObjectID_t  TOID    = 0;	ZoneCoord_t AX      = 0;	ZoneCoord_t AY      = 0;	ObjectID_t  AOID    = 0;	Damage_t	OriginalDamage = Damage;	bool bBroadcastTargetHP   = false; // 乔傍拜磊狼 HP甫 宏肺靛某胶泼窍唱?	bool bSendTargetHP        = false; // 乔傍拜磊狼 HP甫 焊郴林唱?	bool bSendTargetMP        = false; // 乔傍拜磊狼 MP甫 焊郴林唱?	bool bBroadcastAttackerHP = false; // 傍拜磊狼 HP甫 宏肺靛某胶泼窍唱?	bool bSendAttackerHP      = false; // 傍拜磊狼 HP甫 焊郴林唱?	bool bSendAttackerMP      = false; // 傍拜磊狼 MP甫 焊郴林唱?	GCStatusCurrentHP gcTargetHP;	GCStatusCurrentHP gcAttackerHP;	SkillProperty* pSkillProperty = g_pSkillPropertyManager->getSkillProperty( SkillType );	// 酒付霸捣 捞棋飘啊 吧妨乐阑 版快 荐沥备浇(?)狼 HP甫 别酒林绊 鸥百篮 傍拜罐瘤 臼绰促.	// SKILL_ARMAGEDDON老 版快 酒付霸捣 捞棋飘 磊眉狼 单固瘤捞骨肺 弊成 鸥百阑 傍拜窍绰 率栏肺 逞绢埃促.	/*	if( pTargetCreature != NULL && pTargetCreature->isFlag( Effect::EFFECT_CLASS_ARMAGEDDON ) && SkillType != SKILL_ARMAGEDDON )	{		EffectArmageddon* pEffect = dynamic_cast<EffectArmageddon*>(pTargetCreature->findEffect(Effect::EFFECT_CLASS_ARMAGEDDON));		Assert( pEffect != NULL );		Damage = computePureDamage( pAttacker );		pEffect->decreaseHP( Damage );		if ( pTargetCreature->isSlayer() )		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pTargetCreature);			Result = pSlayer->getHP( ATTR_CURRENT );		}		else if ( pTargetCreature->isVampire() )		{			Vampire* pVampire = dynamic_cast<Vampire*>(pTargetCreature);			Result = pVampire->getHP( ATTR_CURRENT );		}		else if ( pTargetCreature->isMonster() )		{			Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);			Result = pMonster->getHP( ATTR_CURRENT );		}		return Result;	}	*/	if ( pTargetCreature != NULL && pTargetCreature->isMonster() )	{		Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);		if ( pMonster != NULL && pMonster->getMonsterType() == GROUND_ELEMENTAL_TYPE )			if ( pAttacker != NULL && pAttacker->isOusters() ) return 0;	}	// 胶飘扼捞欧捞 吧妨乐栏搁 付过 单固瘤 唤脾扁	if ( pAttacker != NULL && pSkillProperty->isMagic() && pAttacker->isFlag( Effect::EFFECT_CLASS_STRIKING ) )	{		EffectStriking* pEffect = dynamic_cast<EffectStriking*>(pAttacker->findEffect( Effect::EFFECT_CLASS_STRIKING ));		if ( pEffect != NULL )		{			Damage += pEffect->getDamageBonus();		}	}	// Denial Magic 捞 吧妨乐阑 版快 付过单固瘤牢瘤 眉农秦辑 硅虏促.	if ( pTargetCreature != NULL &&		pTargetCreature->isFlag( Effect::EFFECT_CLASS_DENIAL_MAGIC ) &&		pSkillProperty->isMagic()	)	{		// 扁夯胶懦篮 SkillInfo 啊 绝促.		if ( SkillType >= SKILL_DOUBLE_IMPACT )		{			SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType);			Assert(pSkillInfo != NULL);			// 轨颇捞绢狼 付过单固瘤父 阜酒霖促.			if ( pSkillInfo->getDomainType() == SKILL_DOMAIN_VAMPIRE || pSkillInfo->getDomainType() == SKILL_DOMAIN_OUSTERS )			{				// 己傍利栏肺 阜疽阑 版快 捞棋飘甫 岗瘤霸 朝妨霖促.				GCAddEffect gcAddEffect;				gcAddEffect.setObjectID( pTargetCreature->getObjectID() );				gcAddEffect.setEffectID( Effect::EFFECT_CLASS_DENIAL_MAGIC_DAMAGED );				gcAddEffect.setDuration(0);				pTargetCreature->getZone()->broadcastPacket( pTargetCreature->getX(), pTargetCreature->getY(), &gcAddEffect );//				return 0;				// 硅掳瘤 富绊 单固瘤 60%...... ぬ.ば				Damage = max( 1, (int)(Damage * 0.4) );			}		}	}	// Water Barrier 啊 吧妨乐阑 版快 醚浇 傍拜俊 措秦辑父 单固瘤甫 临咯霖促.	if ( pTargetCreature != NULL &&		pTargetCreature->isFlag( Effect::EFFECT_CLASS_WATER_BARRIER ) &&		!pSkillProperty->isMelee()	)	{		// 扁夯胶懦篮 SkillInfo 啊 绝促.		if ( canBlockByWaterBarrier( SkillType ) )		{			EffectWaterBarrier* pEWB = dynamic_cast<EffectWaterBarrier*>(pTargetCreature->findEffect(Effect::EFFECT_CLASS_WATER_BARRIER));			if ( pEWB != NULL )			{				int bonus = pEWB->getBonus();				if ( bonus > 100 ) bonus = 100;				Damage = (Damage_t)(Damage * ((float)(100-bonus) / 100.0));				Damage = max( 1, (int)Damage );			}		}	}	// Water Shield 啊 吧副 荐 乐绰 版快 拱府 傍拜俊 措秦辑绰 单固瘤甫 林瘤 臼绰促	if ( pTargetCreature != NULL &&		pSkillProperty->isPhysic()	)	{		if ( pTargetCreature->isOusters() )		{			Ousters* pOusters = dynamic_cast<Ousters*>(pTargetCreature);			if ( pOusters->isPassiveAvailable(SKILL_WATER_SHIELD) )			{				if ( (rand()%100) < min(20, (int)(pOusters->getPassiveRatio() * 3/2)) )				{					GCAddEffect gcAddEffect;					gcAddEffect.setObjectID( pOusters->getObjectID() );					gcAddEffect.setEffectID( Effect::EFFECT_CLASS_WATER_SHIELD );					gcAddEffect.setDuration( 0 );					pZone->broadcastPacket( pOusters->getX(), pOusters->getY(), &gcAddEffect );					//cout << "况磐角靛 惯悼沁嚼聪促." << endl;					return 0;				}			}		}	}	if ( pTargetCreature != NULL &&		pTargetCreature->isFlag( Effect::EFFECT_CLASS_STONE_SKIN ) &&		( SkillType >= SKILL_DOUBLE_IMPACT || SkillType == SKILL_ATTACK_ARMS )	)	{		if ( SkillType == SKILL_ATTACK_ARMS || g_pSkillInfoManager->getSkillInfo( SkillType )->getDomainType() == SKILL_DOMAIN_GUN )		{			EffectStoneSkin* pStoneSkin = dynamic_cast<EffectStoneSkin*>(pTargetCreature->findEffect( Effect::EFFECT_CLASS_STONE_SKIN ));			if ( pStoneSkin != NULL )			{				if ( (rand()%100) < pStoneSkin->getBonus() )

⌨️ 快捷键说明

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