cgdissectioncorpsehandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 733 行 · 第 1/2 页

CPP
733
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGDissectionCorpseHandler.cc// Written By  : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGDissectionCorpse.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "Zone.h"	#include "Slayer.h"	#include "Vampire.h"	#include "Ousters.h"	#include "Corpse.h"	#include "Relic.h"	#include "BloodBible.h"	#include "MonsterCorpse.h"	#include "SlayerCorpse.h"	#include "AlignmentManager.h"	#include "PCSlayerInfo3.h"	#include "PCVampireInfo3.h"	#include "VampireCorpse.h"	#include "PCVampireInfo3.h"	#include "PCOustersInfo3.h"	#include "OustersCorpse.h"	#include "PCOustersInfo3.h"	#include "Effect.h"	#include "EffectRelicTable.h"	#include "EffectPrecedence.h"	#include "EffectHasSlayerRelic.h"	#include "EffectHasVampireRelic.h"	#include "ZoneUtil.h"	#include "ItemUtil.h"	#include "RelicUtil.h"    #include "DB.h"	#include "CombatInfoManager.h"	#include "ZoneGroupManager.h"	#include "ItemInfoManager.h"	#include "UniqueItemManager.h"	#include "war/WarSystem.h"	#include "ShrineInfoManager.h"	#include "CastleInfoManager.h"	#include "CastleShrineInfoManager.h"	#include "StringPool.h"	#include "PacketUtil.h"	#include "MonsterInfo.h"	#include "PetUtil.h"	#include "PetInfo.h"	#include "ctf/FlagManager.h"	#include "EffectFlagInsert.h"	#include "LevelWarManager.h"	#include <stdio.h>	#include "Gpackets/GCRemoveCorpseHead.h"	#include "Gpackets/GCSystemMessage.h"	#include "Gpackets/GCCreateItem.h"	#include "Gpackets/GCAddEffect.h"	#include "Gpackets/GCRemoveEffect.h"#endif	// __GAME_SERVER__////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGDissectionCorpseHandler::execute (CGDissectionCorpse* pPacket , Player* pPlayer)	 throw (Error){	__BEGIN_TRY __BEGIN_DEBUG_EX		#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	try 	{		GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);		if (pGamePlayer->getPlayerStatus() != GPS_NORMAL) return;		Creature*   pCreature = pGamePlayer->getCreature();		Zone*       pZone     = pCreature->getZone();		ZoneCoord_t ZoneX     = pPacket->getX();		ZoneCoord_t ZoneY     = pPacket->getY();		// 官款靛甫 逞绢啊瘤绰 臼绰瘤 眉农茄促.		if (!isValidZoneCoord(pZone, ZoneX, ZoneY)) 		{			return;		}		Tile& rTile = pZone->getTile(ZoneX , ZoneY);        Item* pItem = rTile.getItem();		// Coma惑怕扼搁 风泼 阂啊. by sigi. 2002.12.10        // 泅犁 冠零 惑怕扼搁 府畔        if (pCreature->isFlag(Effect::EFFECT_CLASS_COMA)       	 	|| pCreature->isFlag(Effect::EFFECT_CLASS_PARALYZE)			|| pCreature->isVampire() && pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT))           return;				// 浇饭捞绢牢 版快 坷配官捞 鸥绊 乐栏搁 酒捞袍 风泼 阂啊 by sigi		if (pCreature->isSlayer())		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			if (pSlayer->hasRideMotorcycle())			{				return;			}		}		// 酒快胶磐令牢 版快 角橇 鸥绊 乐栏搁 风泼 阂啊 by DEW		if (pCreature->isOusters())		{			Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);			if (pOusters->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH))			{				return;			}		}		// 官蹿俊 酒捞袍捞 绝栏搁 府畔		// 坷宏璃飘 酒捞叼啊 老摹窍瘤 臼栏搁 府畔		// 官蹿俊 乐绰 酒捞袍捞 矫眉啊 酒聪搁 府畔		if (pItem == NULL			|| pItem->getObjectID() != pPacket->getObjectID()			|| pItem->getItemClass() != Item::ITEM_CLASS_CORPSE)		{			return;		}		bool bSlayerRelicTable = pItem->isFlag(Effect::EFFECT_CLASS_SLAYER_RELIC_TABLE);		bool bVampireRelicTable = pItem->isFlag(Effect::EFFECT_CLASS_VAMPIRE_RELIC_TABLE);		// 浇饭捞绢啊 浇饭捞绢狼 己拱焊包窃阑 努腐且 荐 绝绊,		// 轨颇捞绢档 轨颇捞绢狼 己拱焊包窃阑 努腐且 荐 绝促.		if ( (pCreature->isSlayer() && bSlayerRelicTable)			|| (pCreature->isVampire() && bVampireRelicTable) )		{			return;		}		// 己窜老 版快 傈里吝捞 酒聪扼搁 努腐且 荐 绝促.		// 荐龋 己窜老 版快 荐厚螟俊辑绰 努腐且 荐 绝促.		if ( pItem->getItemType() == MONSTER_CORPSE )		{			MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem);			if ( g_pFlagManager->isFlagPole( pMonsterCorpse ) )			{				if ( !g_pFlagManager->hasFlagWar() ) return;			}			else if (					pZone->getLevelWarManager() != NULL &&					pZone->getLevelWarManager()->isSafe( pMonsterCorpse ) )			{				if ( !pZone->getLevelWarManager()->hasWar() ) return;				else if ( ( pCreature->isSlayer() && pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 0 )						 || ( pCreature->isVampire() && pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 1 )						 || ( pCreature->isOusters() && pZone->getLevelWarManager()->getSafeIndex( pMonsterCorpse ) == 2 ) )				{					return;				}			}			else if ( pMonsterCorpse->isShrine() )			{				// 焊龋阜捞 吧妨乐栏搁 给 波辰促.				if ( pMonsterCorpse->isFlag( Effect::EFFECT_CLASS_SHRINE_SHIELD ) )					return;									PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);				Assert( pPC );				ZoneID_t 	castleZoneID;				bool		isCastle;				bool hasWar = false;				isCastle = g_pCastleInfoManager->getCastleZoneID( pZone->getZoneID() , castleZoneID);				if ( isCastle && g_pWarSystem->hasCastleActiveWar( castleZoneID ) )				{					// 辨靛傈里老 版快 贸府					// if ( pItem->getItemClass() != Item::ITEM_CLASS_CASTLE_SYMBOL ) return;					// 己俊辑绰 规绢螟老 版快 努腐且 荐 绝促.					if ( g_pCastleShrineInfoManager->isDefenderOfGuardShrine( pPC, pMonsterCorpse ) )						return;					CastleInfo* pCastleInfo = g_pCastleInfoManager->getCastleInfo( castleZoneID );					if ( pCastleInfo->getRace() != pPC->getRace() )						return;					hasWar = true;				}				if ( g_pWarSystem->hasActiveRaceWar() )				{					// 辆练埃 傈里老 版快 贸府					// if ( pItem->getItemClass() != Item::ITEM_CLASS_BLOOD_BIBLE ) return;					// 己俊辑绰 规绢螟老 版快 努腐且 荐 绝促.					if ( g_pShrineInfoManager->isDefenderOfGuardShrine( pPC, pMonsterCorpse ) )						return;					hasWar = true;				}				// 傈里捞 鞠巴档 绝栏搁 己窜俊辑 鞠巴档 给 波辰促.				if (!hasWar)				{					return;				}			}		}		// 捞鳖瘤 吭促搁, 惑措祈 辆练狼 己拱焊包窃阑 努腐茄 版快捞促.		// 捞 版快, 父距 EffectRelic捞 倔父怒 巢酒 乐绰瘤 眉农秦具 茄促.		EffectRelicTable* pRelicTableEffect = NULL;		// 己拱 焊包措 辆幅俊 蝶扼辑 嘿绢乐绰 Effect甫 掘绢柯促.		if (bSlayerRelicTable)		{			pRelicTableEffect = dynamic_cast<EffectRelicTable*>(								pItem->getEffectManager().findEffect(Effect::EFFECT_CLASS_SLAYER_RELIC_TABLE));		}		else if (bVampireRelicTable)		{			pRelicTableEffect = dynamic_cast<EffectRelicTable*>(								pItem->getEffectManager().findEffect(Effect::EFFECT_CLASS_VAMPIRE_RELIC_TABLE));		}		// 己拱 焊包措俊辑 酒捞袍阑 哗绢尘 荐 乐绰 矫埃牢啊?		// SafeTime捞 登瘤 臼疽栏搁 救等促.		// LockTime 悼救篮 救等促.		if (pRelicTableEffect!=NULL			&& (!pRelicTableEffect->isSafeTime()				|| pRelicTableEffect->isLockTime()))		{			GCSystemMessage gcSystemMessage;			gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_TAKE_RELIC_NOW ) );			pGamePlayer->sendPacket( &gcSystemMessage );			return;		}		// 己氢阑 眉农 秦具 茄促.		if (pItem->getItemType() != MONSTER_CORPSE) 		{			if ( pPacket->isPet() ) return;			if ( !pZone->isPKZone() )			{				if (pItem->getItemType() == SLAYER_CORPSE && pCreature->isSlayer()) 				{					SlayerCorpse* pSlayerCorpse = dynamic_cast<SlayerCorpse*>(pItem);					PCSlayerInfo3 & rPCSlayerInfo = pSlayerCorpse->getSlayerInfo();					// 磊扁 矫眉啊 酒聪扼搁					if (rPCSlayerInfo.getName() != pCreature->getName()) 					{						// 厩茄磊狼 矫眉绰 焊龋罐瘤 给茄促....						if (g_pAlignmentManager->getAlignmentType(rPCSlayerInfo.getAlignment()) >= NEUTRAL) 						{							Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);							// 己氢捞 -500 郴妨埃促~							Alignment_t NewAlignment = max(-10000 , pSlayer->getAlignment() - 500);							pSlayer->setAlignment(NewAlignment);							GCModifyInformation gcModifyInformation;							gcModifyInformation.addLongData(MODIFY_ALIGNMENT, NewAlignment);							pGamePlayer->sendPacket(&gcModifyInformation);						}					}				} 				else if (pItem->getItemType() == VAMPIRE_CORPSE && pCreature->isVampire()) 				{					PCVampireInfo3 & rPCVampireInfo = dynamic_cast<VampireCorpse*>(pItem)->getVampireInfo();					// 磊扁 矫眉啊 酒聪扼搁					if (rPCVampireInfo.getName() != pCreature->getName()) 					{						// 厩茄磊狼 矫眉绰 焊龋罐瘤 给茄促....						if (g_pAlignmentManager->getAlignmentType(rPCVampireInfo.getAlignment()) >= NEUTRAL) 						{							Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);							// 己氢捞 -500 郴妨埃促~							Alignment_t NewAlignment = max(-10000 , pVampire->getAlignment() - 500);							pVampire->setAlignment(NewAlignment);							GCModifyInformation gcModifyInformation;							gcModifyInformation.addLongData(MODIFY_ALIGNMENT, NewAlignment);							pGamePlayer->sendPacket(&gcModifyInformation);						}					}				}				else if (pItem->getItemType() == OUSTERS_CORPSE && pCreature->isOusters()) 				{					PCOustersInfo3 & rPCOustersInfo = dynamic_cast<OustersCorpse*>(pItem)->getOustersInfo();					// 磊扁 矫眉啊 酒聪扼搁					if (rPCOustersInfo.getName() != pCreature->getName()) 					{						// 厩茄磊狼 矫眉绰 焊龋罐瘤 给茄促....						if (g_pAlignmentManager->getAlignmentType(rPCOustersInfo.getAlignment()) >= NEUTRAL) 						{							Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);							// 己氢捞 -500 郴妨埃促~							Alignment_t NewAlignment = max(-10000 , pOusters->getAlignment() - 500);							pOusters->setAlignment(NewAlignment);							GCModifyInformation gcModifyInformation;							gcModifyInformation.addLongData(MODIFY_ALIGNMENT, NewAlignment);							pGamePlayer->sendPacket(&gcModifyInformation);						}					}				}			}		}		else		{			MonsterCorpse* pMonsterCorpse = dynamic_cast<MonsterCorpse*>(pItem);			PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);			Assert( pPC != NULL );			if ( pPacket->isPet() )			{				if ( pPC->getPetInfo() == NULL ) return; //(|| pMonsterCorpse->isNextTreasureHead() ) return;			}			if ( pMonsterCorpse != NULL && g_pFlagManager->isFlagPole( pMonsterCorpse ) )			{				if ( !g_pFlagManager->hasFlagWar() ) return;				// 鞍篮 辆练捞搁 给 惶绰促..				if ( g_pFlagManager->getFlagPoleRace( pMonsterCorpse ) == pPC->getRace() )					return;				TPOINT tp;				if ( pPC->isFlag( Effect::EFFECT_CLASS_HAS_FLAG ) ) return;				if ( !pPC->getInventory()->getEmptySlot( 1, 2, tp ) ) return;				if (					   pPC->isFlag(Effect::EFFECT_CLASS_CASKET)					|| pPC->isDead()					|| pPC->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT)					|| pPC->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH)					|| pPC->isFlag(Effect::EFFECT_CLASS_TENDRIL)					|| pPC->isFlag(Effect::EFFECT_CLASS_BLOCK_HEAD)				) return;				if (pPC->isSlayer())				{					Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);					if (pSlayer->hasRideMotorcycle()) return;				}				if ( pPC->isFlag(Effect::EFFECT_CLASS_HIDE)					|| pPC->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)					|| pPC->isFlag(Effect::EFFECT_CLASS_FADE_OUT)					|| pPC->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF)					|| pPC->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT)					|| pPC->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE)					|| pPC->isFlag(Effect::EFFECT_CLASS_HAS_CASTLE_SYMBOL) ) return;			}

⌨️ 快捷键说明

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