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

📄 creatureutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			case Item::ITEM_CLASS_VAMPIRE_ETC :			case Item::ITEM_CLASS_VAMPIRE_PORTAL_ITEM :			case Item::ITEM_CLASS_VAMPIRE_WEAPON :			case Item::ITEM_CLASS_VAMPIRE_AMULET :			case Item::ITEM_CLASS_VAMPIRE_EARRING :			case Item::ITEM_CLASS_SERUM :			case Item::ITEM_CLASS_SKULL :			case Item::ITEM_CLASS_EVENT_GIFT_BOX :			case Item::ITEM_CLASS_EVENT_STAR :			case Item::ITEM_CLASS_RELIC :			case Item::ITEM_CLASS_QUEST_ITEM :			case Item::ITEM_CLASS_EVENT_TREE :			case Item::ITEM_CLASS_EVENT_ETC :			case Item::ITEM_CLASS_BLOOD_BIBLE :			case Item::ITEM_CLASS_CASTLE_SYMBOL :			case Item::ITEM_CLASS_EVENT_ITEM :			case Item::ITEM_CLASS_RESURRECT_ITEM :			case Item::ITEM_CLASS_MIXING_ITEM:			case Item::ITEM_CLASS_EFFECT_ITEM:			case Item::ITEM_CLASS_DYE_POTION:			case Item::ITEM_CLASS_MOON_CARD:			case Item::ITEM_CLASS_SWEEPER :			case Item::ITEM_CLASS_PET_ITEM :			case Item::ITEM_CLASS_PET_FOOD :			case Item::ITEM_CLASS_PET_ENCHANT_ITEM :			case Item::ITEM_CLASS_LUCKY_BAG :				return true;			case Item::ITEM_CLASS_MONEY :				// vampire 捣捞搁 凛绰促.				if (pItem->getItemType()==1) return true;			break;			default :				return false;		}		return false;	}	else if (pCreature->isOusters())	{		if ( pItem->isFlag( Effect::EFFECT_CLASS_SLAYER_ONLY ) ) return false;		if ( pItem->isFlag( Effect::EFFECT_CLASS_VAMPIRE_ONLY ) ) return false;		// Ousters牢 版快绰 Ousters 酒捞袍苞		// event 酒捞袍父 林匡 荐 乐促.		switch (pItem->getItemClass())		{			case Item::ITEM_CLASS_OUSTERS_ARMSBAND :			case Item::ITEM_CLASS_OUSTERS_BOOTS :			case Item::ITEM_CLASS_OUSTERS_CHAKRAM :			case Item::ITEM_CLASS_OUSTERS_CIRCLET :			case Item::ITEM_CLASS_OUSTERS_COAT :			case Item::ITEM_CLASS_OUSTERS_PENDENT :			case Item::ITEM_CLASS_OUSTERS_RING :			case Item::ITEM_CLASS_OUSTERS_STONE :			case Item::ITEM_CLASS_OUSTERS_WRISTLET :			case Item::ITEM_CLASS_SKULL :			case Item::ITEM_CLASS_EVENT_GIFT_BOX :			case Item::ITEM_CLASS_EVENT_STAR :			case Item::ITEM_CLASS_RELIC :			case Item::ITEM_CLASS_QUEST_ITEM :			case Item::ITEM_CLASS_EVENT_TREE :			case Item::ITEM_CLASS_EVENT_ETC :			case Item::ITEM_CLASS_BLOOD_BIBLE :			case Item::ITEM_CLASS_CASTLE_SYMBOL :			case Item::ITEM_CLASS_EVENT_ITEM :			case Item::ITEM_CLASS_RESURRECT_ITEM :			case Item::ITEM_CLASS_MIXING_ITEM:			case Item::ITEM_CLASS_LARVA:			case Item::ITEM_CLASS_PUPA:			case Item::ITEM_CLASS_COMPOS_MEI:			case Item::ITEM_CLASS_OUSTERS_SUMMON_ITEM:			case Item::ITEM_CLASS_EFFECT_ITEM:			case Item::ITEM_CLASS_DYE_POTION:			case Item::ITEM_CLASS_MOON_CARD:			case Item::ITEM_CLASS_SWEEPER :			case Item::ITEM_CLASS_PET_ITEM :			case Item::ITEM_CLASS_PET_FOOD :			case Item::ITEM_CLASS_PET_ENCHANT_ITEM :			case Item::ITEM_CLASS_LUCKY_BAG :				return true;			case Item::ITEM_CLASS_MONEY :				// Ousters 捣捞搁 凛绰促.				if (pItem->getItemType()==1) return true;			break;			default :				return false;		}		return false;	}	//*/	return true;}bool canDropToZone( Creature* pCreature, Item* pItem ){	// 涅胶飘 酒捞袍 (矫埃力茄 酒捞袍) 冻奔 荐 绝促.	if ( pItem->isTimeLimitItem() ) return false;	if ( !pCreature->isPC() ) return false;	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);	switch ( pItem->getItemClass() )	{	case Item::ITEM_CLASS_COUPLE_RING:	case Item::ITEM_CLASS_VAMPIRE_COUPLE_RING:		{			if ( PartnerWaitInfo::getItemClass( pPC ) == pItem->getItemClass()			&&	PartnerWaitInfo::getItemType( pPC ) == pItem->getItemType() )			{				return false;			}		}		break;			case Item::ITEM_CLASS_MOON_CARD:		// 馆崔 墨靛绰 官蹿俊 滚副 荐 绝促.		{			if ( pItem->getItemType() == 0 )				return false;		}		break;	case Item::ITEM_CLASS_LUCKY_BAG:		{			if ( pItem->getItemType() == 3 )				return false;		}		break;	case Item::ITEM_CLASS_EVENT_ITEM:		{			if ( pItem->getItemType() == 28 )				return false;		}		break;	default:		break;	}	return true;}// 弊罚靛 付胶磐牢单 弊罚靛 付胶磐 捞棋飘甫 努扼捞攫飘俊霸 焊郴林扁 帮鄂且 版快 阂矾霖促.// 2002. 1. 13. Sequoia// 荤侩登瘤 臼澜. -.-void confirmGrandMaster(Creature* pCreature){	if( pCreature == NULL ) return;	if( !pCreature->isPC() ) return;	if( pCreature->isSlayer() )	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		Assert( pSlayer != NULL );		if( !pSlayer->isFlag( Effect::EFFECT_CLASS_GRAND_MASTER_SLAYER ) ) return;		EffectGrandMasterSlayer* pEffect = dynamic_cast<EffectGrandMasterSlayer*>( pSlayer->findEffect( Effect::EFFECT_CLASS_GRAND_MASTER_SLAYER ) );		if( pEffect == NULL ) return;		pEffect->affect();	}	else if( pCreature->isVampire() )	{		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		Assert( pVampire != NULL );		if( !pVampire->isFlag( Effect::EFFECT_CLASS_GRAND_MASTER_VAMPIRE ) ) return;		EffectGrandMasterVampire* pEffect = dynamic_cast<EffectGrandMasterVampire*>( pVampire->findEffect( Effect::EFFECT_CLASS_GRAND_MASTER_VAMPIRE ) );		if( pEffect == NULL ) return;		pEffect->affect();	}}boolgetRaceFromDB(const string& Name, Race_t& race)	throw(Error){	__BEGIN_TRY	Statement* pStmt = NULL;	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		Result* pResult = pStmt->executeQuery("SELECT Race FROM Slayer where Name='%s'", Name.c_str());		if (pResult->next()) 		{			string Race = pResult->getString(1);			if (Race=="SLAYER")			{				race = RACE_SLAYER;			}			else //if (Race=="VAMPIRE")			{				race = RACE_VAMPIRE;			}		}		else		{			SAFE_DELETE(pStmt);			return false;		}		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	return true;	__END_CATCH}boolgetGuildIDFromDB(const string& Name, Race_t race, GuildID_t& guildID)	throw(Error){	__BEGIN_TRY	Statement* pStmt = NULL;	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		Result* pResult = pStmt->executeQuery(				"SELECT GuildID FROM %s where Name='%s'", 					(race==RACE_SLAYER? "Slayer" : "Vampire"), Name.c_str());		if (pResult->next()) 		{			guildID = (GuildID_t)pResult->getInt(1);			if (guildID==0 || guildID==99)			{				SAFE_DELETE(pStmt);				return false;			}		}		else		{			SAFE_DELETE(pStmt);			return false;		}		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	return true;	__END_CATCH}bool canSee( Creature* pSource, Creature* pTarget, EffectObservingEye* pEffectObservingEye, EffectGnomesWhisper* pEffectGnomesWhisper ){	// Target捞 Ghost 捞搁 公炼扒 杭 荐 绝促.	if (pTarget->isFlag(Effect::EFFECT_CLASS_GHOST))		return false;	//ZoneCoord_t targetX = pTarget->getX(), targetY = pTarget->getY();	// ObservingEye 捞棋飘甫 啊廉柯促.	if ( pEffectObservingEye == NULL && pSource->isFlag(Effect::EFFECT_CLASS_OBSERVING_EYE) )	{		pEffectObservingEye = dynamic_cast<EffectObservingEye*>(pSource->findEffect(Effect::EFFECT_CLASS_OBSERVING_EYE));	}	// GnomesWhisper 捞棋飘甫 啊廉柯促.	if ( pEffectGnomesWhisper == NULL && pSource->isFlag(Effect::EFFECT_CLASS_GNOMES_WHISPER) )	{		pEffectGnomesWhisper = dynamic_cast<EffectGnomesWhisper*>(pSource->findEffect(Effect::EFFECT_CLASS_GNOMES_WHISPER));	}	// 老窜 矫具救俊 乐绢具 焊电悼 窍瘤.	//if (pSource->getVisionState(targetX, targetY) >= IN_SIGHT)	//{		// 轨颇捞绢 尝府绰 公炼扒 夯促.		if (pSource->isVampire() && pTarget->isVampire()) return true;		if ( ( !pTarget->isFlag(Effect::EFFECT_CLASS_HIDE)					|| pSource->isFlag(Effect::EFFECT_CLASS_DETECT_HIDDEN)					// 捞力 Revealer档 窍捞靛 茄仇 杭 荐 乐促.					|| pSource->isFlag(Effect::EFFECT_CLASS_REVEALER)					|| ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeHide() )			 )			&& (!pTarget->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)					|| pSource->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY)					|| pSource->isVampire()					|| ( pEffectObservingEye != NULL && pEffectObservingEye->canSeeInvisibility( pTarget ) )					|| ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeInvisibility() )			 )			&& (!pTarget->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE)					|| pSource->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY)					|| ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeSniping() )			 )		)		{			return true;		}	//}	return false;}int changeSexEx( PlayerCreature* pPC ){	Zone* pZone = pPC->getZone();	if ( pZone == NULL ) return 3;	if ( pPC->getFlagSet()->isOn( FLAGSET_IS_COUPLE ) ) return 2;	if ( pPC->isSlayer() )	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);		Assert( pSlayer != NULL );		if ( pSlayer->isWear( Slayer::WEAR_BODY ) || pSlayer->isWear( Slayer::WEAR_LEG ) ) return 1;		if ( pSlayer->getSex() == MALE ) pSlayer->setSex(FEMALE);		else pSlayer->setSex(MALE);//		char query[50];//		sprintf( query, "SEX = '%s'", Sex2String[pPC->getSex()].c_str() );//		pSlayer->tinysave(query);	}	else if ( pPC->isVampire() )	{		Vampire* pVampire = dynamic_cast<Vampire*>(pPC);		Assert( pVampire != NULL );		if ( pVampire->isWear( Vampire::WEAR_BODY ) ) return 1;		if ( pVampire->getSex() == MALE ) pVampire->setSex(FEMALE);		else pVampire->setSex(MALE);//		char query[50];//		sprintf( query, "SEX = '%s'", Sex2String[pPC->getSex()].c_str() );//		pVampire->tinysave(query);	}	else return 3;	// 咯扁鳖瘤 吭促绰扒 己傈券 己傍捞促. DB诀单捞飘	// 己傈券 己傍捞搁 酒快胶磐令老府绰 例措 绝栏骨肺 浇饭捞绢客 轨颇捞绢 抛捞喉 葛滴 沥焊啊 乐促.	Statement* pStmt = NULL;	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pStmt->executeQuery(				"UPDATE Slayer SET SEX='%s' WHERE Name='%s'", Sex2String[pPC->getSex()].c_str(), pPC->getName().c_str() );		pStmt->executeQuery(				"UPDATE Vampire SET SEX='%s' WHERE Name='%s'", Sex2String[pPC->getSex()].c_str(), pPC->getName().c_str() );		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	return 0;}void initAllStatAndSendChange( PlayerCreature* pPC ){	if ( pPC->isSlayer() )	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);		Assert( pSlayer != NULL );		SLAYER_RECORD prev;		pSlayer->getSlayerRecord(prev);		pSlayer->initAllStat();		pSlayer->sendModifyInfo(prev);		pSlayer->sendRealWearingInfo();	}	else if ( pPC->isVampire() )	{		Vampire* pVampire = dynamic_cast<Vampire*>(pPC);		Assert( pVampire != NULL );		VAMPIRE_RECORD prev;		pVampire->getVampireRecord(prev);		pVampire->initAllStat();		pVampire->sendModifyInfo(prev);		pVampire->sendRealWearingInfo();	}	else if ( pPC->isOusters() )	{		Ousters* pOusters = dynamic_cast<Ousters*>(pPC);		Assert( pOusters != NULL );		OUSTERS_RECORD prev;		pOusters->getOustersRecord(prev);		pOusters->initAllStat();		pOusters->sendModifyInfo(prev);		pOusters->sendRealWearingInfo();	}}void addSimpleCreatureEffect( Creature* pCreature, Effect::EffectClass eClass, int time = -1, bool isSend = true ){	SimpleCreatureEffect* pEffect = new SimpleCreatureEffect( eClass, pCreature );	Assert( pEffect != NULL );	if ( time != -1 ) pEffect->setDeadline( time );	pEffect->setBroadcastingEffect( isSend );	pCreature->addEffect( pEffect );	pCreature->setFlag( eClass );	if ( isSend )	{		GCAddEffect gcAddEffect;		gcAddEffect.setObjectID( pCreature->getObjectID() );		gcAddEffect.setEffectID( pEffect->getSendEffectClass() );				if ( time == -1 ) gcAddEffect.setDuration( 65535 );		else gcAddEffect.setDuration( time );		pCreature->getZone()->broadcastPacket( pCreature->getX(), pCreature->getY(), &gcAddEffect );	}}bool dropFlagToZone(PlayerCreature* pPC, Item* pItem)	throw (Error){	Zone* pZone = pPC->getZone();	Assert(pZone!=NULL);	//cout << "标惯 茫疽促" << endl;	// 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促.	// 矫眉客 般磨 荐档 乐栏骨肺.. 某腐磐啊 绝绰 镑俊 冻绢哆赴促.//	TPOINT pt = pZone->addItem( pItem, pPC->getX(), pPC->getY(), false );	pZone->addItemDelayed( pItem, pPC->getX(), pPC->getY(), false );

⌨️ 快捷键说明

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