cgdissectioncorpsehandler.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 733 行 · 第 1/2 页

CPP
733
字号
//			else if (//					pZone->getLevelWarManager() != NULL &&//					pZone->getLevelWarManager()->isSafe( pMonsterCorpse ) )//			{//				if ( !pZone->getLevelWarManager()->hasWar() ) return;//			}		}		Corpse* pCorpse = dynamic_cast<Corpse*>(pItem);		bool bDissectAll = false;		// 矫眉俊 酒捞袍捞 3俺 焊促 歹 腹捞 甸绢啊 乐栏搁 茄 锅俊 促磺官辰促. 		// 脐捞 惶酒郴绰 酒捞袍篮 茄锅俊 促 惶囚唱柯促.		// 2003.1.14  by bezz, Sequoia, sigi		if ( pCorpse->getTreasureCount() > 3 || pPacket->isPet() )			bDissectAll = true;		int treasureCount = 0;		ObjectID_t PetOID = 0;		if ( pPacket->isPet() ) PetOID = pCreature->getObjectID();		do // while ( bDissectAll );		{			if ( pPacket->isPet() && pCorpse->getItemType() == MONSTER_CORPSE )			{				MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem);				PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);				PetInfo* pPetInfo = pPC->getPetInfo();				if ( pPetInfo == NULL ) break;				if ( pMonsterCorpse->isNextTreasureHead() && pPetInfo->canCutHead()==0 ) break;			}			Item* pTreasure = pCorpse->getTreasure();			if (pTreasure == NULL)				break;			if ( pPacket->isPet() ) pTreasure->setFlag( Effect::EFFECT_CLASS_PET_DISSECT );			////////////////////////////////////////////////////////////////			// 2002斥 绢赴捞朝 捞亥飘			// 八篮喊 酒捞袍篮 啊练荤柳 迷康鼻栏肺 背券等促.			// 弊矾骨肺 俺荐啊 老沥 荐霖(飘罚角海聪酒7俺, 啃扼虐酒 3俺)阑			// 逞霸 唱棵 荐 绝促.			// 父距 八篮喊 酒捞袍捞 唱吭阑 版快,			// 酒捞袍狼 箭磊甫 颇厩秦辑, 力茄 俺荐 捞惑捞搁 唱坷瘤 臼档废 茄促.						if (pTreasure->getItemClass() == Item::ITEM_CLASS_EVENT_STAR					&& pTreasure->getItemType() == 0)			{				cout << "八篮喊 免泅" << endl;				Statement* pStmt = NULL;				Result*    pResult = NULL;				try				{					pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();					pResult = pStmt->executeQuery("SELECT ifnull(sum(Num),0) FROM EventStarObject WHERE ItemType=0;");					if(pResult->getRowCount() != 1)					{						SAFE_DELETE(pStmt);						throw ProtocolException("Fail to load data from DB");					}					if(pResult->next())					{						int BlackStarNumber = pResult->getInt(1);						if(BlackStarNumber >= 7)							cout << "八篮喊捞 10俺 逞菌嚼聪促" << endl;						else						{							(pZone->getObjectRegistry()).registerObject(pTreasure);							TPOINT pt = pZone->addItem(pTreasure, ZoneX, ZoneY);							if (pt.x != -1) 							{								if (pItem->getItemType() == MONSTER_CORPSE)								{									MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem);									// 阁胶磐 矫眉俊辑 唱柯 酒捞袍捞扼搁 快急鼻 捞棋飘甫 嘿咯林绢具 茄促.									// 趣矫扼档 扁粮狼 捞棋飘啊 乐促搁 昏力秦林绊,									// 货肺捞 捞棋飘甫 歹茄促.									const string& 	HostName 	= pMonsterCorpse->getHostName();									int 			HostPartyID	= pMonsterCorpse->getHostPartyID();									bool			isPrecedence = true;									if ( pTreasure->getItemClass() == Item::ITEM_CLASS_EVENT_ITEM && pTreasure->getItemType() == 3 )									{										isPrecedence = false;									}									// by sigi. 2002.12.12									if (isPrecedence && (!HostName.empty() || HostPartyID!=0))									{										EffectPrecedence* pEffectPrecedence = new EffectPrecedence(pTreasure);										pEffectPrecedence->setDeadline(100);										pEffectPrecedence->setHostName( HostName );										pEffectPrecedence->setHostPartyID( HostPartyID );										EffectManager& rEffectManager = pTreasure->getEffectManager();										rEffectManager.deleteEffect(Effect::EFFECT_CLASS_PRECEDENCE);										rEffectManager.addEffect(pEffectPrecedence);										pTreasure->setFlag(Effect::EFFECT_CLASS_PRECEDENCE);									}									// 父距 秦榜捞扼搁 林困俊促啊 矫眉俊辑 格阑 力芭窍扼绊 菩哦阑 朝妨林绢具 茄促.									if (pTreasure->getItemClass() == Item::ITEM_CLASS_SKULL)									{										// 格 磊福扁~~ by sigi										pMonsterCorpse->removeHead();										GCRemoveCorpseHead _GCRemoveCorpseHead;										_GCRemoveCorpseHead.setObjectID(pItem->getObjectID());										//pZone->broadcastPacket(pt.x, pt.y, &_GCRemoveCorpseHead);										pZone->broadcastPacket(ZoneX, ZoneY, &_GCRemoveCorpseHead); // 盔贰 矫眉 谅钎 by sigi									}								}								// 扁粮狼 ItemID甫 弊措肺 蜡瘤茄促.								// ItemID啊 0捞搁.. create()且锭 促矫 ItemID甫 罐绰促.								// by sigi. 2002.10.28								pTreasure->create("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y, pTreasure->getItemID());							}							else 							{								SAFE_DELETE(pTreasure);							}						}					}					SAFE_DELETE(pStmt);				} 				catch(SQLQueryException & sqe)				{					SAFE_DELETE(pStmt);					throw Error(sqe.toString());				}			}			else if ( pTreasure->isFlagItem() )			{				// 标惯篮 官肺 牢亥配府肺 持绢霖促.				PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);				Assert( pPC != NULL );				Inventory* pInventory = pPC->getInventory();				Assert( pInventory != NULL );				TPOINT tp;				if ( !pInventory->getEmptySlot( pTreasure, tp ) || pCorpse->getItemType() != MONSTER_CORPSE ||						!g_pFlagManager->getFlag( pPC, dynamic_cast<MonsterCorpse*>(pCorpse) ) )				{					// 档肺 持绰促.					pCorpse->addTreasure( pTreasure );					pCorpse->setFlag( Effect::EFFECT_CLASS_FLAG_INSERT );					EffectFlagInsert* pFlagEffect = new EffectFlagInsert(pCorpse);					pCorpse->getEffectManager().addEffect( pFlagEffect );					GCAddEffect gcAddEffect;					gcAddEffect.setEffectID( Effect::EFFECT_CLASS_FLAG_INSERT );					gcAddEffect.setObjectID( pCorpse->getObjectID() );					gcAddEffect.setDuration( 65535 );					pCorpse->getZone()->broadcastPacket( pCorpse->getX(), pCorpse->getY(), &gcAddEffect );					continue;				}				pInventory->addItem( pTreasure, tp );				char pField[80];				sprintf(pField, "OwnerID='%s', Storage=%d, X=%d, Y=%d", pPC->getName().c_str(), STORAGE_INVENTORY, tp.x, tp.y);				pTreasure->tinysave(pField);				addSimpleCreatureEffect( pPC, Effect::EFFECT_CLASS_HAS_FLAG );				GCCreateItem gcCreateItem;				makeGCCreateItem( &gcCreateItem, pTreasure, tp.x, tp.y );				pPC->getPlayer()->sendPacket( &gcCreateItem );			}			else			{				(pZone->getObjectRegistry()).registerObject(pTreasure);				TPOINT pt = pZone->addItem(pTreasure, ZoneX, ZoneY, true, 0, PetOID);				if (pt.x != -1) 				{					if (pItem->getItemType() == MONSTER_CORPSE)					{						MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem);						if (dissectionRelicItem( pCorpse, pTreasure, pt ))						{							// pTreasure啊 relicItem牢 版快						}						treasureCount++;						if (							pZone->getLevelWarManager() != NULL &&							pZone->getLevelWarManager()->isSafe( pMonsterCorpse ) )						{							Effect* pEffect = pMonsterCorpse->getEffectManager().findEffect( Effect::EFFECT_CLASS_KEEP_SWEEPER );							if ( pEffect != NULL )							{								pEffect->setDeadline(0);								GCRemoveEffect gcRE;								gcRE.setObjectID( pMonsterCorpse->getObjectID() );								gcRE.addEffectList( pEffect->getSendEffectClass() );								pZone->broadcastPacket( pMonsterCorpse->getX(), pMonsterCorpse->getY(), &gcRE );							}							// 惶栏搁 粮俊 谎妨霖促.							char safeRace[15];							if ( pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 0 )							{								sprintf( safeRace, g_pStringPool->c_str( STRID_SLAYER ) );							}							else if ( pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 1 )							{								sprintf( safeRace, g_pStringPool->c_str( STRID_VAMPIRE ) );							}							else if ( pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 2 )							{								sprintf( safeRace, g_pStringPool->c_str( STRID_OUSTERS ) );							}							else if ( pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 3 )							{								sprintf( safeRace, g_pStringPool->c_str( STRID_CENTER ) );							}							else 							{								Assert(false);							}							char race[15];							if ( pCreature->isSlayer() )							{								sprintf( race, g_pStringPool->c_str( STRID_SLAYER ) );							}							else if ( pCreature->isVampire() )							{								sprintf( race, g_pStringPool->c_str( STRID_VAMPIRE ) );							}							else if ( pCreature->isOusters() )							{								sprintf( race, g_pStringPool->c_str( STRID_OUSTERS ) );							}							else							{								Assert(false);							}							const SweeperInfo* pSweeperInfo = dynamic_cast<SweeperInfo*>(g_pSweeperInfoManager->getItemInfo(pTreasure->getItemType()));							char msg[100];							sprintf( msg , g_pStringPool->c_str( STRID_PULL_OUT_SWEEPER ) ,												safeRace,												pSweeperInfo->getName().c_str(),												pCreature->getName().c_str(),												race								   				);							GCSystemMessage gcSystemMessage;							gcSystemMessage.setMessage( msg );							pZone->broadcastPacket( &gcSystemMessage );						}						// 阁胶磐 矫眉俊辑 唱柯 酒捞袍捞扼搁 快急鼻 捞棋飘甫 嘿咯林绢具 茄促.						// 趣矫扼档 扁粮狼 捞棋飘啊 乐促搁 昏力秦林绊,						// 货肺捞 捞棋飘甫 歹茄促.						// 2003.2.28 扁粮狼 捞棋飘啊 乐促搁 弊成 敌促. 矫眉俊 啊 官蹿俊 眠啊瞪 锭						// 官蹿俊 乐带 酒捞袍捞 甸绢哎 版快俊 快急鼻 捞咆飘甫 嘿捞瘤 臼扁 困秦						if (!bSlayerRelicTable && !bVampireRelicTable)						{							const string& 	HostName 	= pMonsterCorpse->getHostName();							int 			HostPartyID	= pMonsterCorpse->getHostPartyID();							// by sigi. 2002.12.12							if ( 								(!HostName.empty() || HostPartyID!=0)							// by Sequoia. 2003. 2.28.							&&	!pTreasure->isFlag(Effect::EFFECT_CLASS_PRECEDENCE)							)							{								EffectPrecedence* pEffectPrecedence = new EffectPrecedence(pTreasure);								if ( !pTreasure->isQuestItem() )								{									// 涅胶飘 酒捞袍篮 颇萍盔档 给 凛绰促.									pEffectPrecedence->setDeadline(100);									pEffectPrecedence->setHostPartyID( HostPartyID );									pEffectPrecedence->setHostName( HostName );								}								else								{									// 涅胶飘 酒捞袍篮 绝绢龙锭鳖瘤 快急鼻捞 救 绝绢柳促.									pEffectPrecedence->setDeadline(999999);									pEffectPrecedence->setHostName( pMonsterCorpse->getQuestHostName() );								}								EffectManager& rEffectManager = pTreasure->getEffectManager();								rEffectManager.deleteEffect(Effect::EFFECT_CLASS_PRECEDENCE);								rEffectManager.addEffect(pEffectPrecedence);								pTreasure->setFlag(Effect::EFFECT_CLASS_PRECEDENCE);							}						}						// 父距 秦榜捞扼搁 林困俊促啊 矫眉俊辑 格阑 力芭窍扼绊 菩哦阑 朝妨林绢具 茄促.						if (pTreasure->getItemClass() == Item::ITEM_CLASS_SKULL)						{							// 格 磊福扁~~ by sigi							pMonsterCorpse->removeHead();							GCRemoveCorpseHead _GCRemoveCorpseHead;							_GCRemoveCorpseHead.setObjectID(pItem->getObjectID());							//pZone->broadcastPacket(pt.x, pt.y, &_GCRemoveCorpseHead);							pZone->broadcastPacket(ZoneX, ZoneY, &_GCRemoveCorpseHead); // 盔贰 矫眉 谅钎 by sigi						}					}					// DB俊 历厘茄促.					saveDissectionItem( pCreature, pTreasure, pt.x, pt.y );				}				else 				{					SAFE_DELETE(pTreasure);				}			}		}		while ( bDissectAll );		if (pItem->getItemType() == MONSTER_CORPSE)		{			MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem);			// 脐 版氰摹 林磊			if ( pPacket->isPet() && treasureCount != 0 )			{				PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);				GCModifyInformation gcMI;				if ( !increasePetExp( pPC->getPetInfo(),						computePetExp( getPCLevel( pPC ), 									g_pMonsterInfoManager->getMonsterInfo( pMonsterCorpse->getMonsterType() )->getLevel(), pPC->getPetInfo(), pGamePlayer ), &gcMI ) )				{//					cout << "版氰摹啊 官差菌绢夸 : " << gcMI.toString() << endl;					pGamePlayer->sendPacket( &gcMI );				}				else				{//					cout << "饭骇绝阑 沁措夸" << endl;					sendPetInfo( pGamePlayer, true );				}			}		}	} 	catch (Throwable & t) 	{	}#endif	// __GAME_SERVER__			__END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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