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

📄 creatureutil.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	Effect* pEffect = pPC->findEffect( Effect::EFFECT_CLASS_HAS_FLAG );	if ( pEffect != NULL ) pEffect->setDeadline(0);	if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK ))	{		EffectRelicLock* pLock = new EffectRelicLock(pItem);		pLock->setDeadline( 10*10 ); // 10檬		pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK );		pItem->getEffectManager().addEffect( pLock );	}/*	if ( pt.x != -1 )           // 冻绢哆府绰单 己傍沁促搁	{		char pField[80];		sprintf(pField, "OwnerID='', Storage=%d, StorageID=%u, X=%d, Y=%d", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y);		pItem->tinysave(pField);		Effect* pEffect = pPC->findEffect( Effect::EFFECT_CLASS_HAS_FLAG );		if ( pEffect != NULL ) pEffect->setDeadline(0);		if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK ))		{			EffectRelicLock* pLock = new EffectRelicLock(pItem);			pLock->setDeadline( 10*10 ); // 10檬			pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK );			pItem->getEffectManager().addEffect( pLock );		}	}	else	{		VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1);		do		{			pt.x = rand()%(pZone->getWidth());			pt.y = rand()%(pZone->getHeight());		}		while ( !rect.ptInRect(pt.x, pt.y) 				|| pZone->getTile(pt.x, pt.y).hasItem() 				|| pZone->getTile(pt.x, pt.y).isBlocked(Creature::MOVE_MODE_WALKING) 				|| ( (pZone->getZoneLevel(pt.x, pt.y))&SAFE_ZONE == 0 ) );		pt = pZone->addItem( pItem, pPC->getX(), pPC->getY(), false );		if ( pt.x == -1 )		{			filelog("FlagWar.log", "-_- 弊贰档 标惯 冻绢哆副 磊府啊 绝促.... X灯促.");			//throw Error("标惯 冻绢哆副 磊府啊 绝促.");			// 措眉 恐 给 冻绢哆府绰芭衬 -_-			return false;		}	}*/	return true;}bool dropFlagToZone( Creature* pCreature, bool bSendPacket ){	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);	if ( !pPC->isFlag( Effect::EFFECT_CLASS_HAS_FLAG ) ) return false;	bool bDrop = false;	// mouse俊 relic捞 乐绰瘤 眉农	Item* pSlotItem = pPC->getExtraInventorySlotItem();	if (pSlotItem!=NULL 		&& pSlotItem->isFlagItem() )	{		if (dropFlagToZone( pPC, pSlotItem ))		{			pPC->deleteItemFromExtraInventorySlot();			// player狼 mouse俊辑 力芭茄促.			// client俊辑 捞 菩哦阑 罐栏搁			// mouse俊辑档 窃 眉农秦林霸 沁促.			if (bSendPacket)			{				GCDeleteInventoryItem gcDeleteInventoryItem;				gcDeleteInventoryItem.setObjectID( pSlotItem->getObjectID() );				pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem );			}			bDrop = true;		}	}	Zone* pZone = pPC->getZone();	Assert( pZone != NULL );	Inventory* pInventory = pPC->getInventory();	Assert( pInventory != NULL );		// 牢亥配府俊辑 Relic Item阑 茫酒夯促.	for ( CoordInven_t y = 0; y < pInventory->getHeight(); y++ )	{		for ( CoordInven_t x = 0; x < pInventory->getWidth(); x++ )		{			Item* pItem = pInventory->getItem( x, y );			if ( pItem != NULL 				&& pItem->isFlagItem() )			{				// 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促.				if (dropFlagToZone(pPC, pItem))				{					// 牢亥配府俊辑 猾促.					pInventory->deleteItem( pItem->getObjectID() );					// player狼 inventory俊辑 力芭茄促.					if (bSendPacket)					{						GCDeleteInventoryItem gcDeleteInventoryItem;						gcDeleteInventoryItem.setObjectID( pItem->getObjectID() );						pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem );					}					bDrop = true;				}			}		}	}	return bDrop;}void disableFlags( Creature *pCreature, Zone* pZone, SkillType_t SkillType){	if ( pCreature->isSlayer() )	{		if (pCreature->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE))		{			g_Sniping.checkRevealRatio(pCreature, 20, 10);		}	}	else if ( pCreature->isVampire() && pZone != NULL )	{		if (pCreature->isFlag(Effect::EFFECT_CLASS_INVISIBILITY))		{			addVisibleCreature(pZone, pCreature, true);		}/*		if (pCreature->isFlag(Effect::EFFECT_CLASS_EXTREME))		{			if(!(SkillType == SKILL_ACID_TOUCH) && !(SkillType == SKILL_POISONOUS_HANDS) && !(SkillType == SKILL_BLOODY_NAIL))			{				EffectManager * pEffectManager = pCreature->getEffectManager();				Assert( pEffectManager != NULL );				Effect * pEffect = pEffectManager->findEffect( Effect::EFFECT_CLASS_EXTREME );				if ( pEffect != NULL ) 				{					pEffect->setDeadline(0);				}			}		} */	}	else if ( pCreature->isOusters() )	{	}}bool canEnterBeginnerZone( Creature* pCreature ){	if ( pCreature->isSlayer() )	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		Assert( pSlayer != NULL );		return pSlayer->getTotalAttr(ATTR_BASIC) <= 150;	}	else if ( pCreature->isVampire() )	{		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		Assert( pVampire != NULL );		return pVampire->getLevel() <= 30; 	}	else if ( pCreature->isOusters() )	{		Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);		Assert( pOusters != NULL );		return pOusters->getLevel() <= 30;	}	return false;}#ifdef __UNDERWORLD__void giveUnderworldGift( Creature* pCreature ){	if ( !pCreature->isPC() ) return;	string PlayerName;	if ( pCreature->isSlayer() )	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		Assert( pSlayer != NULL );		PlayerName = pSlayer->getName();	}	else if ( pCreature->isVampire() )	{		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		Assert( pVampire != NULL );		PlayerName = pVampire->getName();	}	else if ( pCreature->isOusters() )	{		Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);		Assert( pOusters != NULL );		PlayerName = pOusters->getName();	}	else return;	Player* pPlayer = pCreature->getPlayer();	Assert( pPlayer != NULL );	string PlayerID = pPlayer->getID();	Statement* pStmt = NULL;	filelog( "Underworld.log", "[%s:%s] 攫歹岿靛 抗概鼻俊 寸梅登菌嚼聪促.", PlayerID.c_str(), PlayerName.c_str() );	try {	BEGIN_DB	{		pStmt = g_pDatabaseManager->getDistConnection("PLAYER_DB")->createStatement();		pStmt->executeQuery(				"INSERT INTO UnderworldEvent (WorldID, ServerID, PlayerID, CharacterID, KillTime) VALUES (%u, %u, '%s', '%s', now())",				g_pConfig->getPropertyInt("WorldID"), g_pConfig->getPropertyInt("ServerID"), PlayerID.c_str(), PlayerName.c_str() );	}	END_DB(pStmt)	} catch (Throwable& t)	{		filelog( "Underworld.log", "DB俊 诀单捞飘甫 角菩沁嚼聪促. : %s", t.toString().c_str() );	}	GCNotifyWin gcNW;	gcNW.setGiftID( 101 );	gcNW.setName( PlayerName );	g_pZoneGroupManager->broadcast( &gcNW );	char ggCommand[200];	string worldName = g_pGameWorldInfoManager->getGameWorldInfo(g_pConfig->getPropertyInt( "WorldID" ))->getName();	sprintf( ggCommand, "*allworld *command NotifyWin %s(%s) %u", PlayerName.c_str(), worldName.c_str(), 101 );	CGSayHandler::opworld( NULL, ggCommand, 0, false );}#endifbool dropSweeperToZone(PlayerCreature* pPC, Item* pItem)	throw (Error){	Zone* pZone = pPC->getZone();	Assert(pZone!=NULL);	pZone->addItemDelayed( pItem, pPC->getX(), pPC->getY(), false );	Effect* pEffect = pPC->findEffect( Effect::EFFECT_CLASS_HAS_SWEEPER );	if ( pEffect != NULL ) pEffect->setDeadline(0);	if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK ))	{		EffectRelicLock* pLock = new EffectRelicLock(pItem);		pLock->setDeadline( 10*10 ); // 10檬		pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK );		pItem->getEffectManager().addEffect( pLock );	}	return true;}bool dropSweeperToZone( Creature* pCreature, bool bSendPacket ){	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);	if ( !pPC->isFlag( Effect::EFFECT_CLASS_HAS_SWEEPER ) ) return false;	bool bDrop = false;	// mouse俊 relic捞 乐绰瘤 眉农	Item* pSlotItem = pPC->getExtraInventorySlotItem();	if (pSlotItem!=NULL 		&& pSlotItem->getItemClass() == Item::ITEM_CLASS_SWEEPER )	{		if (dropSweeperToZone( pPC, pSlotItem ))		{			pPC->deleteItemFromExtraInventorySlot();			// player狼 mouse俊辑 力芭茄促.			// client俊辑 捞 菩哦阑 罐栏搁			// mouse俊辑档 窃 眉农秦林霸 沁促.			if (bSendPacket)			{				GCDeleteInventoryItem gcDeleteInventoryItem;				gcDeleteInventoryItem.setObjectID( pSlotItem->getObjectID() );				pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem );			}			bDrop = true;		}	}	Zone* pZone = pPC->getZone();	Assert( pZone != NULL );	Inventory* pInventory = pPC->getInventory();	Assert( pInventory != NULL );		// 牢亥配府俊辑 Relic Item阑 茫酒夯促.	for ( CoordInven_t y = 0; y < pInventory->getHeight(); y++ )	{		for ( CoordInven_t x = 0; x < pInventory->getWidth(); x++ )		{			Item* pItem = pInventory->getItem( x, y );			if ( pItem != NULL 				&& pItem->getItemClass() == Item::ITEM_CLASS_SWEEPER )			{				// 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促.				if (dropSweeperToZone(pPC, pItem))				{					// 牢亥配府俊辑 猾促.					pInventory->deleteItem( pItem->getObjectID() );					// player狼 inventory俊辑 力芭茄促.					if (bSendPacket)					{						GCDeleteInventoryItem gcDeleteInventoryItem;						gcDeleteInventoryItem.setObjectID( pItem->getObjectID() );						pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem );					}					bDrop = true;				}			}		}	}	return bDrop;}Level_t getPCLevel( PlayerCreature* pPC ){	if ( pPC->isSlayer() )	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);		return pSlayer->getHighestSkillDomainLevel();	}	else if ( pPC->isVampire() )	{		Vampire* pVampire = dynamic_cast<Vampire*>(pPC);		return pVampire->getLevel();	}	else if ( pPC->isOusters() )	{		Ousters* pOusters = dynamic_cast<Ousters*>(pPC);		return pOusters->getLevel();	}	return 0;}void sendPetInfo( GamePlayer* pGamePlayer, bool bBroadcast, bool bSummon ){	if ( pGamePlayer == NULL ) return;	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pGamePlayer->getCreature());	if ( pPC == NULL ) return;	PetInfo* pPetInfo = pPC->getPetInfo();	GCPetInfo gcPetInfo;	gcPetInfo.setPetInfo( pPetInfo );	gcPetInfo.setSummonInfo( (bSummon)?1:0 );	gcPetInfo.setObjectID( pPC->getObjectID() );	pGamePlayer->sendPacket( &gcPetInfo );	if ( bBroadcast )	{		pPC->getZone()->broadcastPacket( pPC->getX(), pPC->getY(), &gcPetInfo, pPC );	}}void deletePC( PlayerCreature* pPC ) throw(Error){	__BEGIN_TRY	Statement* pStmt = NULL;	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		////////////////////////////////////////////////////////////		// 老窜 浇饭捞绢 抛捞喉俊绰 犬角洒 粮犁茄促.		////////////////////////////////////////////////////////////		pStmt->executeQuery("DELETE FROM Slayer WHERE Name = '%s'", pPC->getName().c_str());		////////////////////////////////////////////////////////////		// 轨颇捞绢 抛捞喉阑 瘤款促.		////////////////////////////////////////////////////////////		pStmt->executeQuery("DELETE FROM Vampire WHERE Name = '%s'", pPC->getName().c_str());		////////////////////////////////////////////////////////////		// 酒快胶磐胶 抛捞喉阑 瘤款促.		////////////////////////////////////////////////////////////		pStmt->executeQuery("DELETE FROM Ousters WHERE Name = '%s'", pPC->getName().c_str());		////////////////////////////////////////////////////////////		// 浇饭捞绢 胶懦阑 瘤款促.		////////////////////////////////////////////////////////////		pStmt->executeQuery("DELETE FROM SkillSave WHERE OwnerID = '%s'", pPC->getName().c_str());		////////////////////////////////////////////////////////////		// 轨颇捞绢 胶懦阑 瘤况霖促.		////////////////////////////////////////////////////////////		pStmt->executeQuery("DELETE FROM VampireSkillSave WHERE OwnerID = '%s'", pPC->getName().c_str());		////////////////////////////////////////////////////////////		// 酒快胶磐令 胶懦阑 瘤况霖促.		////////////////////////////////////////////////////////////		pStmt->executeQuery("DELETE FROM OustersSkillSave WHERE OwnerID = '%s'", pPC->getName().c_str());		////////////////////////////////////////////////////////////		// 拌鞭 焊呈胶甫 瘤况霖促.		////////////////////////////////////////////////////////////		pStmt->executeQuery("DELETE FROM RankBonusData WHERE OwnerID = '%s'", pPC->getName().c_str() );		////////////////////////////////////////////////////////////		// 酒捞袍阑 兵弊府 瘤款促.		////////////////////////////////////////////////////////////		string ownerID = pPC->getName();		pStmt->executeQuery("DELETE FROM ARObject WHERE OwnerID = '" + ownerID + "'");		pStmt->executeQuery("DELETE FROM BeltObject WHERE OwnerID = '" + ownerID + "'");		pStmt->executeQuery("DELETE FROM BladeObject WHERE OwnerID = '" + ownerID + "'");		pStmt->executeQuery("DELETE FROM BloodBibleObject WHERE OwnerID = '" + ownerID + "'");		pStmt->executeQuery("DELETE FROM BombMaterialObject WHERE OwnerID = '" + ownerID + "'");		pStmt->executeQuery("DELETE FROM Bomb

⌨️ 快捷键说明

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