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

📄 creatureutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
{	__BEGIN_TRY	if (pCreature == NULL) return NULL;	PlayerCreature* pPC        = dynamic_cast<PlayerCreature*>(pCreature);	Inventory*      pInventory = pPC->getInventory();	Stash*          pStash     = pPC->getStash();	Item*           pItem      = NULL;	CoordInven_t    tx         = 0;	CoordInven_t    ty         = 0;	// 牢亥配府 八祸	pItem = pInventory->findItemIID(id, IClass, tx, ty);	if (pItem != NULL)	{		storage = STORAGE_INVENTORY;		x       = tx;		y       = ty;		return pItem;	}	// 扁绢芒 八祸	if (pCreature->isSlayer())	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		for (int i=0; i<Slayer::WEAR_MAX; i++)		{			pItem = pSlayer->getWearItem((Slayer::WearPart)i);			if (pItem != NULL && 				pItem->getItemID() == id && pItem->getItemClass() == IClass)			{				storage = STORAGE_GEAR;				x       = i;				return pItem;			}		}	}	else if (pCreature->isVampire())	{		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		for (int i=0; i<Vampire::VAMPIRE_WEAR_MAX; i++)		{			pItem = pVampire->getWearItem((Vampire::WearPart)i);			if (pItem != NULL && 				pItem->getItemID() == id && pItem->getItemClass() == IClass)			{				storage = STORAGE_GEAR;				x       = i;				return pItem;			}		}	}	else if (pCreature->isOusters())	{		Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);		for (int i=0; i<Ousters::OUSTERS_WEAR_MAX; i++)		{			pItem = pOusters->getWearItem((Ousters::WearPart)i);			if (pItem != NULL && 				pItem->getItemID() == id && pItem->getItemClass() == IClass)			{				storage = STORAGE_GEAR;				x       = i;				return pItem;			}		}	}	// 付快胶 八祸	pItem = pPC->getExtraInventorySlotItem();	if (pItem != NULL && 		pItem->getItemID() == id && pItem->getItemClass() == IClass)	{		storage = STORAGE_EXTRASLOT;		return pItem;	}	// 焊包窃 八祸	for (int r=0; r<STASH_RACK_MAX; r++)	{		for (int i=0; i<STASH_INDEX_MAX; i++)		{			pItem = pStash->get(r, i);			if (pItem != NULL && 				pItem->getItemID() == id && pItem->getItemClass() == IClass)			{				storage = STORAGE_STASH;				x       = r;				y       = i;				return pItem;			}		}	}	return NULL;	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// 版氰摹 拌魂窍扁// 轨颇捞绢啊 绢恫 农府媚甫 软趋窍芭唱, 磷看阑 版快俊 棵扼啊绰 版氰摹甫 // 拌魂窍绰 窃荐////////////////////////////////////////////////////////////////////////////////int computeCreatureExp(Creature* pCreature, int percent, Ousters* pOusters)	throw(){	__BEGIN_TRY	Assert(pCreature != NULL);	Assert(percent >= 0  && percent <= 100);	int exp = 0;	if (pCreature->isSlayer())	{		// 父距 KILL_AFTERMATH啊 嘿篮 惑怕俊辑 促矫 磷绰促芭唱,		// AFTERMATH啊 嘿篮 惑炔俊辑 促矫 软趋捞 登绰 版快俊绰 版氰摹甫 罐瘤 臼绰促.		if ((pCreature->isFlag(Effect::EFFECT_CLASS_KILL_AFTERMATH) == true && percent != BLOODDRAIN_EXP)				|| (pCreature->isFlag(Effect::EFFECT_CLASS_AFTERMATH) == true && percent == BLOODDRAIN_EXP))		{			exp = 0;		}		else		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			exp += pSlayer->getSTR(ATTR_BASIC);			exp += pSlayer->getDEX(ATTR_BASIC);			exp += pSlayer->getINT(ATTR_BASIC);		}		// 父距 浇饭捞绢甫 软趋茄 版快俊绰 BLOODDRAIN苞 KILL狼 exp甫 背券茄促.		if (g_pCombatInfoManager->isCombat())		{			if ( percent == BLOODDRAIN_EXP)				percent = KILL_EXP;			else if ( percent == KILL_EXP)				percent = BLOODDRAIN_EXP;		}	}	else if (pCreature->isVampire())	{		if ( pCreature->isFlag(Effect::EFFECT_CLASS_KILL_AFTERMATH ) )			exp = 0;		else if ( pOusters != NULL )			{			Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);			exp += pVampire->getSTR(ATTR_MAX);			exp += pVampire->getDEX(ATTR_MAX);			exp += pVampire->getINT(ATTR_MAX);		}	}	else if (pCreature->isOusters())	{		// 父距 KILL_AFTERMATH啊 嘿篮 惑怕俊辑 促矫 磷绰促芭唱,		// AFTERMATH啊 嘿篮 惑炔俊辑 促矫 软趋捞 登绰 版快俊绰 版氰摹甫 罐瘤 臼绰促.		if ((pCreature->isFlag(Effect::EFFECT_CLASS_KILL_AFTERMATH) == true && percent == KILL_EXP)				|| (pCreature->isFlag(Effect::EFFECT_CLASS_AFTERMATH) == true && percent == BLOODDRAIN_EXP)				|| pOusters != NULL )		{			exp = 0;		}		else		{			Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);			exp += pOusters->getSTR(ATTR_BASIC);			exp += pOusters->getDEX(ATTR_BASIC);			exp += pOusters->getINT(ATTR_BASIC);		}	}	else if (pCreature->isMonster())	{		Monster* pMonster = dynamic_cast<Monster*>(pCreature);		if ( pMonster->getMonsterType() == GROUND_ELEMENTAL_TYPE )		{			return 0;		}				// 酒快胶磐胶绰 蝶肺 贸府秦霖促. 快窍窍..ぱぱ;		if ( pOusters != NULL )		{			return getPercentValue((int)( pMonster->getOustersExp( pOusters ) ), g_pVariableManager->getVariable( MONSTER_EXP_RATIO ) );		}		exp += pMonster->getSTR();		exp += pMonster->getDEX();		exp += pMonster->getINT();		exp = (int)(exp * (0.75 + (double)(pMonster->getLevel()/200.0)));				// 5岿 15老 捞亥飘 阁胶磐绰 软趋阑 寸窍瘤 臼栏骨肺 磷菌阑锭 傈何 焊惑茄促.		MonsterType_t MonsterType = pMonster->getMonsterType();		if(MonsterType == 358 || MonsterType == 359)			exp = 1144;		else if(MonsterType==360 || MonsterType==361)			exp = 1076;		//cout << pMonster->getName() << " exp = " << exp << "  percent=" << percent << endl;		// Enhance 鞘靛俊 狼茄 函拳 版氰摹甫 拌魂秦 霖促.		/*		const MonsterInfo* pMonsterInfo = g_pMonsterInfoManager->getMonsterInfo(pMonster->getMonsterType());		int HPBoost = pMonsterInfo->getEnhanceHP();		int ToHitBoost = pMonsterInfo->getEnhanceToHit();		int DefenseBoost = pMonsterInfo->getEnhanceDefense();		int ProtectionBoost = pMonsterInfo->getEnhanceProtection();		int DamageBoost = pMonsterInfo->getEnhanceDamage();		int bonusPercent = (int)(HPBoost*0.4 + ToHitBoost*0.2 + DefenseBoost*0.4 + ProtectionBoost*0.3 + DamageBoost*0.5);		exp += getPercentValue(exp, bonusPercent);		*/	}	else Assert(false);	// 瓷仿摹 焊惑阑 困茄 内靛...	//exp = (int)((float)exp * 1.5);	exp = getPercentValue(exp, percent);	exp = getPercentValue(exp, g_pVariableManager->getVariable( MONSTER_EXP_RATIO ) );		return exp;	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// computeCreatureExp客 鞍篮单 AFTERMATH 锭巩俊 // 软趋且锭 HP 棵扼啊绰芭父 蝶肺 拌魂茄促. 吝汗 内靛.. -_-; by sigi. 2002.11.19////////////////////////////////////////////////////////////////////////////////int computeBloodDrainHealPoint(Creature* pCreature, int percent)	throw(){	__BEGIN_TRY	Assert(pCreature != NULL);	Assert(percent >= 0  && percent <= 100);	int exp = 0;	if (pCreature->isSlayer())	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		exp += pSlayer->getSTR(ATTR_BASIC);		exp += pSlayer->getDEX(ATTR_BASIC);		exp += pSlayer->getINT(ATTR_BASIC);		// 父距 浇饭捞绢甫 软趋茄 版快俊绰 BLOODDRAIN苞 KILL狼 exp甫 背券茄促.		if (g_pCombatInfoManager->isCombat())		{			if ( percent == BLOODDRAIN_EXP)				percent = KILL_EXP;			else if ( percent == KILL_EXP)				percent = BLOODDRAIN_EXP;		}	}	else if (pCreature->isVampire())	{		/*		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		exp += pVampire->getSTR(ATTR_MAX);		exp += pVampire->getDEX(ATTR_MAX);		exp += pVampire->getINT(ATTR_MAX);		*/	}	else if (pCreature->isOusters())	{		Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);		exp += pOusters->getSTR(ATTR_BASIC);		exp += pOusters->getDEX(ATTR_BASIC);		exp += pOusters->getINT(ATTR_BASIC);	}	else if (pCreature->isMonster())	{		Monster* pMonster = dynamic_cast<Monster*>(pCreature);		exp += pMonster->getSTR();		exp += pMonster->getDEX();		exp += pMonster->getINT();		exp = (int)(exp * (0.75 + (double)(pMonster->getLevel()/200.0)));				// 5岿 15老 捞亥飘 阁胶磐绰 软趋阑 寸窍瘤 臼栏骨肺 磷菌阑锭 傈何 焊惑茄促.		MonsterType_t MonsterType = pMonster->getMonsterType();		if(MonsterType == 358 || MonsterType == 359)			exp = 1144;		else if(MonsterType==360 || MonsterType==361)			exp = 1076;		//cout << pMonster->getName() << " exp = " << exp << "  percent=" << percent << endl;		// Enhance 鞘靛俊 狼茄 函拳 版氰摹甫 拌魂秦 霖促.		/*		const MonsterInfo* pMonsterInfo = g_pMonsterInfoManager->getMonsterInfo(pMonster->getMonsterType());		int HPBoost = pMonsterInfo->getEnhanceHP();		int ToHitBoost = pMonsterInfo->getEnhanceToHit();		int DefenseBoost = pMonsterInfo->getEnhanceDefense();		int ProtectionBoost = pMonsterInfo->getEnhanceProtection();		int DamageBoost = pMonsterInfo->getEnhanceDamage();		int bonusPercent = (int)(HPBoost*0.4 + ToHitBoost*0.2 + DefenseBoost*0.4 + ProtectionBoost*0.3 + DamageBoost*0.5);		exp += getPercentValue(exp, bonusPercent);		*/	}	else Assert(false);	// 瓷仿摹 焊惑阑 困茄 内靛...	//exp = (int)((float)exp * 1.5);	exp = getPercentValue(exp, percent);		return exp;	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// 捞亥飘侩 各牢瘤 八荤窍扁...////////////////////////////////////////////////////////////////////////////////bool isEventMonster(Creature* pCreature) 	throw(){	__BEGIN_TRY	Assert(pCreature != NULL);	if (!pCreature->isMonster()) return false;	Monster* pMonster = dynamic_cast<Monster*>(pCreature);	switch (pMonster->getMonsterType())	{		case 358:		case 359:		case 360:		case 361:			return true;		default:			break;	}	return false;	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// 烙狼狼 农府媚啊 泅犁 框流老 荐 乐绰 惑怕牢啊甫 八荤窍绰 窃荐////////////////////////////////////////////////////////////////////////////////bool isAbleToMove(Creature* pCreature){	Assert(pCreature != NULL);	// 窍捞靛 吧赴 惑怕扼搁...	if (pCreature->isFlag(Effect::EFFECT_CLASS_HIDE))	{		if (pCreature->isVampire()) return false;		// 阁胶磐绰 窍捞靛 惑怕俊辑档 框流捞绰 巴捞 啊瓷窍扁 锭巩俊...		//if (pCreature->isMonster()) return false;		if (pCreature->isSlayer()) return false;	}	// 泅犁 磷绢乐绰 惑怕扼搁...	if (pCreature->isFlag(Effect::EFFECT_CLASS_COMA)		|| pCreature->isDead()		// 泅犁 付厚俊 吧妨乐促搁...		|| pCreature->isFlag(Effect::EFFECT_CLASS_PARALYZE)		|| pCreature->isFlag(Effect::EFFECT_CLASS_ETERNITY_PAUSE)//		|| pCreature->isFlag(Effect::EFFECT_CLASS_SANCTUARY)		|| pCreature->isFlag(Effect::EFFECT_CLASS_CASKET)		// 泅犁 Cause Critical Wounds俊 吧妨乐促搁		|| pCreature->isFlag(Effect::EFFECT_CLASS_CAUSE_CRITICAL_WOUNDS)		|| pCreature->isFlag(Effect::EFFECT_CLASS_SOUL_CHAIN)		|| pCreature->isFlag(Effect::EFFECT_CLASS_LOVE_CHAIN)		|| pCreature->isFlag(Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM)		|| pCreature->isFlag(Effect::EFFECT_CLASS_SLEEP)		// 2003.1.2 by Sequoia		|| pCreature->isFlag(Effect::EFFECT_CLASS_ARMAGEDDON)		// 2003.3.31 by Sequoia		|| pCreature->isFlag(Effect::EFFECT_CLASS_POISON_MESH)		|| pCreature->isFlag(Effect::EFFECT_CLASS_TENDRIL)		|| pCreature->isFlag(Effect::EFFECT_CLASS_TRAPPED)		|| pCreature->isFlag(Effect::EFFECT_CLASS_EXPLOSION_WATER)	) return false;	return true;}////////////////////////////////////////////////////////////////////////////////// 烙狼狼 农府媚啊 泅犁 扁贱阑 荤侩且 荐 乐绰 惑怕牢啊甫 八荤窍绰 窃荐////////////////////////////////////////////////////////////////////////////////bool isAbleToUseSelfSkill(Creature* pCreature, SkillType_t SkillType){	Assert(pCreature != NULL);	// 窍捞靛 吧赴 惑怕俊辑绰 扁贱阑 荤侩且 荐 绝促.	// 磷篮 惑怕俊辑绰 Eternity 寇狼扁贱阑 荤侩且 荐 绝促.	// 泅犁 捧疙拳登绊 乐绰 惑怕俊辑绰 扁贱阑 荤侩且 荐 绝促.	// 付厚 惑怕俊辑绰 扁贱阑 荤侩且 荐 绝促.	// 冠零 惑抛局辑绰 扁贱阑 荤侩且 荐 绝促.	// Cause Critical Wounds俊 吧妨乐促搁 扁贱阑 荤侩且 荐 绝促.	if ((pCreature->isDead() || pCreature->isFlag(Effect::EFFECT_CLASS_COMA)) && SkillType != SKILL_ETERNITY ) return false;			if (pCreature->isFlag(Effect::EFFECT_CLASS_HIDE)		|| pCreature->isFlag(Effect::EFFECT_CLASS_FADE_OUT)	    || pCreature->isFlag(Effect::EFFECT_CLASS_PARALYZE)		|| pCreature->isFlag(Effect::EFFECT_CLASS_ETERNITY_PAUSE)		|| pCreature->isFlag(Effect::EFFECT_CLASS_CAUSE_CRITICAL_WOUNDS)		|| pCreature->isFlag(Effect::EFFECT_CLASS_SOUL_CHAIN)		|| pCreature->isFlag(Effect::EFFECT_CLASS_LOVE_CHAIN)		|| pCreature->isFlag(Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM)		|| pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT) && SkillType != SKILL_UN_TRANSFORM		|| pCreature->isFlag(Effect::EFFECT_CLASS_SLEEP)		|| pCreature->isFlag(Effect::EFFECT_CLASS_ARMAGEDDON)		|| pCreature->isFlag(Effect::EFFECT_CLASS_TENDRIL)		|| pCreature->isFlag(Effect::EFFECT_CLASS_BLOCK_HEAD)		|| pCreature->isFlag(Effect::EFFECT_CLASS_REFINIUM_TICKET)		|| pCreature->isFlag(Effect::EFFECT_CLASS_TRAPPED)		|| pCreature->isFlag(Effect::EFFECT_CLASS_EXPLOSION_WATER)		)	{		return false;	}	if (pCreature->isFlag(Effect::EFFECT_CLASS_CASKET) && SkillType!=SKILL_OPEN_CASKET)	{		return false;	}	// 戳措 惑抛局辑绰 匡扁唱 矫眉 冈扁 寇俊绰 胶懦阑 荤侩且 荐 绝促.	if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF))	{		if (SkillType != SKILL_HOWL && SkillType != SKILL_EAT_CORPSE && SkillType != SKILL_UN_TRANSFORM)		{			return false;		}	}	if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF))	{		if (SkillType != SKILL_BITE_OF_DEATH && SkillType != SKILL_UN_TRANSFORM && SkillType != SKILL_RAPID_GLIDING )		{			return false;		}	}	// 角橇 鸥绊 乐阑订 攫飘罚胶汽观俊 荤侩且 荐 绝促.

⌨️ 快捷键说明

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