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

📄 skillutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
void computeCriticalBonus(Ousters* pOusters, SkillType_t skillType, Damage_t& Damage, bool& bCriticalHit){	switch ( skillType )	{		case SKILL_KASAS_ARROW:		case SKILL_BLAZE_BOLT:		case SKILL_EARTHS_TEETH:		case SKILL_HANDS_OF_NIZIE:		case SKILL_STONE_AUGER:		case SKILL_EMISSION_WATER:		case SKILL_BEAT_HEAD:		case SKILL_MAGNUM_SPEAR:		case SKILL_FIRE_PIERCING:		case SKILL_SUMMON_FIRE_ELEMENTAL:		case SKILL_ICE_LANCE:		case SKILL_EXPLOSION_WATER:		case SKILL_METEOR_STORM:			{				OustersSkillSlot* pSkillSlot = pOusters->hasSkill( SKILL_CRITICAL_MAGIC );				if ( pSkillSlot == NULL ) return;				SkillLevel_t level = pSkillSlot->getExpLevel();				int Ratio = 5 + ( level / 3 );				if ( (rand()%100) < Ratio )				{					bCriticalHit = true;					if ( level <= 15 )					{						Damage += (Damage_t)(Damage * level / 19.5);					}					else					{						int bonus = (Damage_t)(Damage * ( 0.1 + ( level / 75.0 ) ));						if ( level == 30 ) bonus = (Damage_t)(bonus * 1.1);						Damage += bonus;					}				}			}		default:			return;	}}RankExp_t computeRankExp(int myLevel, int otherLevel) // by sigi. 2002.12.31{	RankExp_t rankExp = 0;	if (myLevel!=0 && otherLevel!=0)	{		int checkValue = otherLevel * 100 / myLevel;		if (checkValue > 120)		{			rankExp = (otherLevel-myLevel)*(otherLevel-myLevel)/10 + otherLevel*100/myLevel;		}		else		{			rankExp = otherLevel*100/myLevel - 10;		}		rankExp = max(0, (int)rankExp);		// by sigi. 2002.12.31		rankExp = getPercentValue( rankExp, g_pVariableManager->getVariable( RANK_EXP_GAIN_PERCENT ) );	}	rankExp = getPercentValue( rankExp, g_pVariableManager->getPremiumExpBonusPercent() );	return rankExp;}//////////////////////////////////////////////////////////////////////////////// Creature甫 磷看阑锭狼 瓤苞//// 磷篮 荤恩俊霸 KillCount甫 刘啊矫难霖促. --> 拌鞭 版氰摹// by sigi. 2002.8.31//////////////////////////////////////////////////////////////////////////////voidaffectKillCount(Creature* pAttacker, Creature* pDeadCreature){	// [贸府且 鞘夸 绝绰 版快]	// 傍拜茄 荤恩捞 绝芭唱	// 磷篮局啊 绝芭唱	// 傍拜茄 荤恩捞 荤恩捞 酒聪芭唱 -_-;	// 磷篮局啊 磷篮霸 酒聪搁 -_-; 	if (pAttacker==NULL 		|| pDeadCreature==NULL		|| !pAttacker->isPC()		|| pDeadCreature->isAlive())	{		return;	}#ifdef __UNDERWORLD__	if ( pDeadCreature->isMonster() )	{		Monster* pMonster = dynamic_cast<Monster*>(pDeadCreature);		Assert( pMonster != NULL );		if ( pMonster->isUnderworld() )		{			pMonster->setUnderworld(false);			giveUnderworldGift(pAttacker);		}	}#endif	if ( pDeadCreature->isMonster() )	{		Monster* pMonster = dynamic_cast<Monster*>(pDeadCreature);				if ( pMonster->getLastKiller() == 0 )			pMonster->setLastKiller( pAttacker->getObjectID() );	}	int myLevel = 0;	int otherLevel = 0;	int bonusPercent = 100;	if (pAttacker->isSlayer())	{		// 浇饭捞绢啊 浇饭捞绢甫 磷牢 版快		if (pDeadCreature->isSlayer()) return;		Slayer* pSlayer = dynamic_cast<Slayer*>(pAttacker);		myLevel = pSlayer->getHighestSkillDomainLevel();		// 浇饭捞绢老 版快 公扁甫 甸绊 乐瘤 臼促搁 公矫茄促.		if ( !pSlayer->isRealWearingEx( Slayer::WEAR_RIGHTHAND ) )			return;		// 浇饭捞绢啊 轨颇捞绢甫 磷牢 版快		if (pDeadCreature->isVampire())		{			Vampire* pVampire = dynamic_cast<Vampire*>(pDeadCreature);			otherLevel = pVampire->getLevel();			bonusPercent = 150;		}		// 浇饭捞绢啊 酒快胶磐胶甫 磷牢 版快		else if (pDeadCreature->isOusters())		{			Ousters* pOusters = dynamic_cast<Ousters*>(pDeadCreature);			otherLevel = pOusters->getLevel();			bonusPercent = 150;		}		// 浇饭捞绢啊 阁胶磐甫 磷牢 版快		else if (pDeadCreature->isMonster())		{			Monster* pMonster = dynamic_cast<Monster*>(pDeadCreature);			// 付胶磐绰 MasterLairManager俊辑 贸府茄促.			if (pMonster->isMaster())			{				// last kill茄 荤恩篮 版氰摹 茄锅 歹 冈绰促.				pSlayer->increaseRankExp( MASTER_KILL_RANK_EXP );				return;			}			otherLevel = pMonster->getLevel();		}		else return;	}	else if (pAttacker->isVampire())	{		// 轨颇捞绢啊 轨颇捞绢甫 磷牢 版快		if (pDeadCreature->isVampire()) return;		Vampire* pVampire = dynamic_cast<Vampire*>(pAttacker);		myLevel = pVampire->getLevel();		// 轨颇捞绢啊 浇饭捞绢甫 磷牢 版快		if (pDeadCreature->isSlayer())		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pDeadCreature);			otherLevel = pSlayer->getHighestSkillDomainLevel();			bonusPercent = 150;		}		// 轨颇捞绢啊 酒快胶磐胶甫 磷牢 版快		else if (pDeadCreature->isOusters())		{			Ousters* pOusters = dynamic_cast<Ousters*>(pDeadCreature);			otherLevel = pOusters->getLevel();			bonusPercent = 150;		}		// 轨颇捞绢啊 阁胶磐甫 磷牢 版快		else if (pDeadCreature->isMonster())		{			Monster* pMonster = dynamic_cast<Monster*>(pDeadCreature);			// 付胶磐绰 MasterLairManager俊辑 贸府茄促.			if (pMonster->isMaster())			{				// last kill茄 荤恩篮 版氰摹 茄锅 歹 冈绰促.				pVampire->increaseRankExp( MASTER_KILL_RANK_EXP );				return;			}			otherLevel = pMonster->getLevel();		}		else return;	}	else if (pAttacker->isOusters())	{		// 酒快胶磐胶啊 酒快胶磐胶甫 磷牢 版快		if (pDeadCreature->isOusters()) return;		Ousters* pOusters = dynamic_cast<Ousters*>(pAttacker);		myLevel = pOusters->getLevel();		// 酒快胶磐胶啊啊 浇饭捞绢甫 磷牢 版快		if (pDeadCreature->isSlayer())		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pDeadCreature);			otherLevel = pSlayer->getHighestSkillDomainLevel();			bonusPercent = 150;		}		// 酒快胶磐令啊 轨颇捞绢甫 磷牢 版快		if (pDeadCreature->isVampire())		{			Vampire* pVampire = dynamic_cast<Vampire*>(pDeadCreature);			otherLevel = pVampire->getLevel();			bonusPercent = 150;		}		// 轨颇捞绢啊 阁胶磐甫 磷牢 版快		else if (pDeadCreature->isMonster())		{			Monster* pMonster = dynamic_cast<Monster*>(pDeadCreature);			// 付胶磐绰 MasterLairManager俊辑 贸府茄促.			if (pMonster->isMaster())			{				// last kill茄 荤恩篮 版氰摹 茄锅 歹 冈绰促.				pOusters->increaseRankExp( MASTER_KILL_RANK_EXP );				return;			}			otherLevel = pMonster->getLevel();		}		else return;	}	else return;	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pAttacker);	if ( pDeadCreature->isMonster() )	{		Monster* pMonster = dynamic_cast<Monster*>(pDeadCreature);		PrecedenceTable* pTable = pMonster->getPrecedenceTable();		//		if ( pMonster->getLastKiller() == 0 )//			pMonster->setLastKiller( pAttacker->getObjectID() );		if ( pTable != NULL && pTable->canGainRankExp( pPC ) )		{			QuestManager* pQM = pPC->getQuestManager();			if ( pQM != NULL && pQM->killedMonster( pMonster ) )			{				pPC->sendCurrentQuestInfo();			}			if ( g_pEventQuestLootingManager->killed( pPC, pMonster ) )				pTable->setQuestHostName( pPC->getName() );			if ( pMonster->getQuestItem() == NULL && g_pVariableManager->isEventMoonCard() )			{				Item* pItem = getCardItem( getCardKind( pPC, pMonster ) );//				setItemGender( pItem, (pPC->getSex()==FEMALE)?GENDER_FEMALE:GENDER_MALE );				pMonster->setQuestItem( pItem );			}			if ( pMonster->getQuestItem() == NULL && g_pVariableManager->isEventLuckyBag() )			{				Item* pItem = getLuckyBagItem( getLuckyBagKind( pPC, pMonster ) );				pMonster->setQuestItem( pItem );			}			if ( pMonster->getQuestItem() == NULL && g_pVariableManager->getVariable(CLOVER_EVENT)!=0 && canGiveEventItem(pPC, pMonster))			{				int value = rand() % 100000;				if ( value < g_pVariableManager->getVariable(CLOVER_RATIO) )				{					Item* pItem = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_MOON_CARD, 3, list<OptionType_t>() );					pMonster->setQuestItem( pItem );				}			}			if ( g_pVariableManager->getVariable(NETMARBLE_CARD_EVENT) != 0 && pMonster->getQuestItem() == NULL					&& g_pVariableManager->getVariable(NETMARBLE_CARD_RATIO) > (rand()%100000) && canGiveEventItem( pPC, pMonster ) )			{				Item* pItem = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_MOON_CARD, 2, list<OptionType_t>() );				pMonster->setQuestItem( pItem );			}			if ( g_pVariableManager->isHeadCount() )			{				GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pAttacker->getPlayer());				if ( pGamePlayer != NULL )				{					EventHeadCount* pEvent = dynamic_cast<EventHeadCount*>(pGamePlayer->getEvent( Event::EVENT_CLASS_HEAD_COUNT ));					if ( pEvent != NULL ) pEvent->cutHead();				}			}			if ( g_pVariableManager->getVariable(PET_FOOD_EVENT) != 0 && pMonster->getQuestItem() == NULL					&& g_pVariableManager->getVariable(PET_FOOD_RATIO) > rand()%100000 && canGiveEventItem( pPC, pMonster ) )			{				bool isHigher = g_pVariableManager->getVariable(HIGHER_PET_FOOD_RATIO) > rand()%100;				int itemClassSeed = rand()%100;				int RacePetFoodRatio = g_pVariableManager->getVariable(RACE_PET_FOOD_RATIO);				int RevivalSetRatio = g_pVariableManager->getVariable(REVIVAL_SET_RATIO);				Item::ItemClass iClass = Item::ITEM_CLASS_PET_FOOD;				ItemType_t itemType = 1;				if ( itemClassSeed < RevivalSetRatio )				{					iClass = Item::ITEM_CLASS_PET_ENCHANT_ITEM;					itemType = 13;				}//				bool isRace = g_pVariableManager->getVariable(RACE_PET_FOOD_RATIO) > rand()%100;				else if ( itemClassSeed - RevivalSetRatio < RacePetFoodRatio )				{					switch ( pPC->getCreatureClass() )					{						case Creature::CREATURE_CLASS_SLAYER:							itemType = 6;							break;						case Creature::CREATURE_CLASS_VAMPIRE:							itemType = 10;							break;						case Creature::CREATURE_CLASS_OUSTERS:							itemType = 14;							break;						default:							break;					}				}				if ( iClass == Item::ITEM_CLASS_PET_FOOD && isHigher ) ++itemType;//				cout << "脐澜侥捞亥飘:" << iClass << ", " << itemType << endl;				Item* pItem = g_pItemFactoryManager->createItem( iClass, itemType, list<OptionType_t>() );				pMonster->setQuestItem( pItem );			}		}	}	int PartyID = pPC->getPartyID();	if (PartyID != 0)	{		// 颇萍俊 啊涝登绢 乐促搁 肺拿 颇萍 概聪历甫 烹秦 		// 林困狼 颇萍盔甸苞 版氰摹甫 傍蜡茄促.		LocalPartyManager* pLPM = pPC->getLocalPartyManager();		Assert(pLPM != NULL);		pLPM->shareRankExp(PartyID, pAttacker, otherLevel);	}	else	{		// 颇萍俊 啊涝登绢乐瘤 臼促搁 去磊 棵扼埃促.		RankExp_t rankExp = computeRankExp( myLevel, otherLevel );		if ( pDeadCreature->isMonster() )		{			Monster* pMonster = dynamic_cast<Monster*>(pDeadCreature);			PrecedenceTable* pTable = pMonster->getPrecedenceTable();			if ( pTable != NULL && pTable->canGainRankExp( pPC ) )			{				pPC->increaseRankExp( rankExp );			}		}		else		{			pPC->increaseRankExp( rankExp );		}	}}HP_t setCounterDamage( Creature* pAttacker, Creature* pTarget, Damage_t counterDamage, bool& bBroadcastAttackerHP, bool& bSendAttackerHP){	HP_t Result2 = 0;	// 救傈瘤措 眉农	// 2003.1.10 by bezz, Sequoia	if ( pAttacker != NULL && checkZoneLevelToHitTarget(pAttacker) )	{		if (pAttacker->isSlayer())		{			Slayer* pSlayerAttacker = dynamic_cast<Slayer*>(pAttacker);			Result2 = max(0, (int)pSlayerAttacker->getHP()-(int)counterDamage); 			pSlayerAttacker->setHP(Result2, ATTR_CURRENT);			bBroadcastAttackerHP = true;			bSendAttackerHP      = true;		}		else if (pAttacker->isVampire())

⌨️ 快捷键说明

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