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

📄 pcmanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 4 页
字号:
						if (pEffect!=NULL)						{							pEffect->unaffect();						}						// paralyze 力芭						pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_SUMMON_SYLPH);						pCreature->removeFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH);					}					if (pCreature->isFlag(Effect::EFFECT_CLASS_INVISIBILITY))					{						Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_INVISIBILITY);						if (pEffect!=NULL)						{							pEffect->unaffect();						}						// paralyze 力芭						pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_INVISIBILITY);						pCreature->removeFlag(Effect::EFFECT_CLASS_INVISIBILITY);					}					if (pCreature->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE))					{						Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_SNIPING_MODE);						if (pEffect!=NULL)						{							pEffect->unaffect();						}						// paralyze 力芭						pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_SNIPING_MODE);						pCreature->removeFlag(Effect::EFFECT_CLASS_SNIPING_MODE);					}					if (pCreature->isFlag(Effect::EFFECT_CLASS_PARALYZE))					{						Effect* pEffectPal = pCreature->findEffect(Effect::EFFECT_CLASS_PARALYZE);						if (pEffectPal!=NULL)						{							pEffectPal->unaffect();						}						// paralyze 力芭						pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_PARALYZE);						pCreature->removeFlag(Effect::EFFECT_CLASS_PARALYZE);					}					// 磷菌阑锭 且风 馋促. by sigi. 2002.9.23					if (pCreature->isFlag(Effect::EFFECT_CLASS_HALLUCINATION))					{						Effect* pEffectHallu = pCreature->findEffect(Effect::EFFECT_CLASS_HALLUCINATION);						if (pEffectHallu!=NULL)						{							pEffectHallu->unaffect();						}						pCreature->deleteEffect(Effect::EFFECT_CLASS_HALLUCINATION);						pCreature->removeFlag(Effect::EFFECT_CLASS_HALLUCINATION);					}					if ( pCreature->isFlag( Effect::EFFECT_CLASS_MAGNUM_SPEAR ) )					{						Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_MAGNUM_SPEAR);						if ( pEffect != NULL )						{							pEffect->unaffect();						}						pCreature->deleteEffect(Effect::EFFECT_CLASS_MAGNUM_SPEAR);						pCreature->removeFlag(Effect::EFFECT_CLASS_MAGNUM_SPEAR);					}					if ( pCreature->isFlag( Effect::EFFECT_CLASS_HELLFIRE_TO_ENEMY ) )					{						Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_HELLFIRE_TO_ENEMY);						if ( pEffect != NULL )						{							pEffect->unaffect();						}						pCreature->deleteEffect(Effect::EFFECT_CLASS_HELLFIRE_TO_ENEMY);						pCreature->removeFlag(Effect::EFFECT_CLASS_HELLFIRE_TO_ENEMY);					}					// 磷菌阑 锭 Soul Chain 捞棋飘甫 馋促.					// unaffect啊 龋免瞪 锭 flag捞 难廉乐瘤 臼促搁 transport 窍瘤 臼档废茄促.					if ( pCreature->isFlag( Effect::EFFECT_CLASS_SOUL_CHAIN ) )					{						//pCreature->deleteEffect( Effect::EFFECT_CLASS_SOUL_CHAIN );						pCreature->removeFlag( Effect::EFFECT_CLASS_SOUL_CHAIN );					}					// 磷菌阑 锭 Love Chain 捞棋飘甫 馋促.					// unaffect啊 龋免瞪 锭 flag捞 难廉乐瘤 臼促搁 transport 窍瘤 臼档废茄促.					if ( pCreature->isFlag( Effect::EFFECT_CLASS_LOVE_CHAIN ) )					{						pCreature->removeFlag( Effect::EFFECT_CLASS_LOVE_CHAIN );					}					// 磷栏搁 GunShotGuidance Aim 捞棋飘甫 馋促.					if ( pCreature->isFlag( Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM ) )					{						pCreature->deleteEffect( Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM );						pCreature->removeFlag( Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM );					}					// 磷栏搁 浇赋/酒付霸捣 捞棋飘甫 馋促. 2003. 1. 2. by Sequoia					if (pCreature->isFlag(Effect::EFFECT_CLASS_SLEEP))					{						Effect* pEffectSleep = pCreature->findEffect(Effect::EFFECT_CLASS_SLEEP);						if (pEffectSleep!=NULL)						{							pEffectSleep->unaffect();						}						pCreature->deleteEffect(Effect::EFFECT_CLASS_SLEEP);					}					if (pCreature->isFlag(Effect::EFFECT_CLASS_ARMAGEDDON))					{						Effect* pEffectArma = pCreature->findEffect(Effect::EFFECT_CLASS_ARMAGEDDON);						if (pEffectArma!=NULL)						{							pEffectArma->unaffect();						}						pCreature->deleteEffect(Effect::EFFECT_CLASS_ARMAGEDDON);					}					if (pCreature->isFlag(Effect::EFFECT_CLASS_TRAPPED))					{						Effect* pEffect = pCreature->findEffect(Effect::EFFECT_CLASS_TRAPPED);						if (pEffect!=NULL)						{							pEffect->unaffect();						}						pCreature->deleteEffect(Effect::EFFECT_CLASS_TRAPPED);					}					// 官蹿俊 静矾哆府扼绊, 捞棋飘甫 谎妨霖促.					GCAddEffect gcAddEffect;					gcAddEffect.setObjectID(pCreature->getObjectID());					gcAddEffect.setEffectID(Effect::EFFECT_CLASS_COMA);					gcAddEffect.setDuration(300);					pZone->broadcastPacket(pCreature->getX(), pCreature->getY(), &gcAddEffect);					if ( g_pConfig->hasKey("Hardcore") && g_pConfig->getPropertyInt("Hardcore")!=0 )					{						PlayerCreature* pPC = dynamic_cast<PlayerCreature*>( pCreature );						Assert( pPC != NULL );						deletePC( pPC );						GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPC->getPlayer());						Assert( pGamePlayer != NULL );						filelog("DeletePC.log", "磷绢辑 瘤况笼聪促 : %s", pPC->getName().c_str() );						pGamePlayer->setPenaltyFlag(PENALTY_TYPE_KICKED);						pGamePlayer->setItemRatioBonusPoint(1);					}					before = current ++;				}				else				{					EffectManager* pEffectManager = pCreature->getEffectManager();					Assert(pEffectManager != NULL);					EffectComa* pEffectComa = (EffectComa*)(pEffectManager->findEffect(Effect::EFFECT_CLASS_COMA));					Assert(pEffectComa != NULL);					if (pEffectComa->getDeadline() < currentTime)					{						// 刚历 捞棋飘甫 昏力茄促.						pEffectManager->deleteEffect(pCreature, Effect::EFFECT_CLASS_COMA);						pCreature->removeFlag(Effect::EFFECT_CLASS_COMA);						// 荤侩磊狼 涝仿俊 狼秦辑 COMA 捞棋飘啊 unaffect登搁, 柳楼肺 磷篮 巴捞 等促.						// 弊矾骨肺, PC 甫 磷捞绊, 敲饭捞绢甫 ZPM -> IPM 栏肺 颗变促.						killCreature(pCreature);						// PC 狼 畴靛甫 昏力茄促.						m_Creatures.erase(current);						if (before == m_Creatures.end()) 	// first element						{							current = m_Creatures.begin();						}						else // !first element						{							current = before;							current ++;						}					}					else					{						before = current ++;					}				}			}			else			{				before = current ++;								// 农府贸俊 吧妨 乐绰 捞棋飘甸阑 角青矫挪促.				pCreature->getEffectManager()->heartbeat( currentTime );			}		}		// 捞芭 while 风橇 救俊 乐菌促 ぬ.ば		// 傈里吝俊绰 救 焊郴林档废 荐沥		if ( m_bRefreshHolyLandPlayer && !g_pWarSystem->hasActiveRaceWar() )		{			// 酒淬狼 己瘤 傈开俊 乔狼 己辑 焊呈胶 沥焊甫 谎赴促.			GCHolyLandBonusInfo gcHolyLandBonusInfo;			g_pBloodBibleBonusManager->makeHolyLandBonusInfo( gcHolyLandBonusInfo );			g_pHolyLandManager->broadcast( &gcHolyLandBonusInfo );		}		/*		if ( m_bRefreshLevelWarBonusZonePlayer && g_pSweeperBonusManager->isAble() )		{			GCSweeperBonusInfo gcSweeperBonusInfo;			g_pSweeperBonusManager->makeSweeperBonusInfo( gcSweeperBonusInfo );			g_pLevelWarZoneInfoManager->broadcast( &gcSweeperBonusInfo );		}		if ( m_bRefreshLevelWarBonusZonePlayer && !g_pSweeperBonusManager->isAble() )		{			GCSweeperBonusInfo gcSweeperBonusInfo;			g_pSweeperBonusManager->makeVoidSweeperBonusInfo( gcSweeperBonusInfo );			g_pLevelWarZoneInfoManager->broadcast( &gcSweeperBonusInfo );		}		*/		m_bRefreshHolyLandPlayer = false;	//	m_bRefreshLevelWarBonusZonePlayer = false;			}	catch (Throwable & t)	{		filelog("PCManagerBug.log", "ProcessCreatureBug : %s", t.toString().c_str());		//cerr << t.toString() << endl;	}	//cerr << "TID[" << Thread::self() << "]" << "PCM::process end" << endl;		__LEAVE_CRITICAL_SECTION(m_Mutex)    __END_CATCH}//////////////////////////////////////////////////////////////////////////////// (1) 鸥老俊辑 农府贸甫 昏力茄促.// (2) 矫眉甫 积己窍绊, 牢亥配府甫 矫眉肺 颗变促.// (3) 鸥老俊 酒捞袍捞 粮犁且 版快, 利例洒 贸府茄促.// (4) 矫眉甫 鸥老俊 眠啊茄促. 吝汗矫, 弊 糠俊 初绰促.// (5) 何劝 捞棋飘甫 农府贸俊 眠啊茄促.//////////////////////////////////////////////////////////////////////////////void PCManager::killCreature (Creature* pDeadCreature)	throw (Error){	__BEGIN_TRY	__BEGIN_DEBUG	Assert(pDeadCreature != NULL);	// transfusion锭巩俊 磷篮 第俊档 HP蛮促..	// 公矫. by sigi. 2002.10.8 	//Assert(pDeadCreature->isDead());	Zone* pZone = pDeadCreature->getZone();	Assert(pZone != NULL);	ZoneCoord_t cx = pDeadCreature->getX();	ZoneCoord_t cy = pDeadCreature->getY();	// Eternity	pDeadCreature->removeFlag( Effect::EFFECT_CLASS_ETERNITY );	// PK粮俊辑 磷菌阑 锭俊绰 混酒朝 锭 捞棋飘啊 嘿绰促.	if ( g_pPKZoneInfoManager->isPKZone( pZone->getZoneID() ) )	{		EffectPKZoneResurrection* pEffect = new EffectPKZoneResurrection( pDeadCreature );		pDeadCreature->addEffect( pEffect );		pDeadCreature->setFlag( pEffect->getEffectClass() );	}	// 颇萍 檬措吝捞扼搁 PartyInviteInfo甫 昏力秦霖促.	PartyInviteInfoManager* pPIIM = pZone->getPartyInviteInfoManager();	pPIIM->cancelInvite(pDeadCreature);	// 刚历 肺拿 颇萍 概聪历俊辑 磷篮 仇阑 瘤况拎具 茄促.	uint PartyID = pDeadCreature->getPartyID();	if (PartyID != 0)	{		LocalPartyManager* pLPM = pZone->getLocalPartyManager();		pLPM->deletePartyMember(PartyID, pDeadCreature);	}	// 飘饭捞靛 吝捞菌促搁 飘饭捞靛 包访 沥焊甫 昏力秦霖促.	TradeManager* pTradeManager = pZone->getTradeManager();	TradeInfo* pInfo = pTradeManager->getTradeInfo(pDeadCreature->getName());	if (pInfo != NULL)	{		pTradeManager->cancelTrade(pDeadCreature);	}	// 矫眉俊 嘿绢乐绰 EFFECT_CLASS_CANNOT_ABSORB_SOUL 捞棋飘甫 力芭茄促	if (pDeadCreature->isFlag(Effect::EFFECT_CLASS_CANNOT_ABSORB_SOUL))	{		pDeadCreature->removeFlag(Effect::EFFECT_CLASS_CANNOT_ABSORB_SOUL);	}	// 矫眉甫 积己茄促.	Corpse*  pCorpse = NULL;	if (pDeadCreature->isSlayer())	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pDeadCreature);		pCorpse = new SlayerCorpse( pSlayer );		pCorpse->setLevel( (int)(pSlayer->getHighestSkillDomainLevel()) );		pCorpse->setExp( (Exp_t)computeCreatureExp(pSlayer, BLOODDRAIN_EXP) );	}	else if (pDeadCreature->isVampire())	{		Vampire* pVampire = dynamic_cast<Vampire*>(pDeadCreature);		pCorpse = new VampireCorpse( pVampire );		pCorpse->setLevel( (int)(pVampire->getLevel()) );		pCorpse->setExp( (Exp_t)computeCreatureExp(pVampire, BLOODDRAIN_EXP) );	}	else if (pDeadCreature->isOusters())	{		Ousters* pOusters = dynamic_cast<Ousters*>(pDeadCreature);		pCorpse = new OustersCorpse( pOusters );		pCorpse->setLevel( (int)(pOusters->getLevel()) );		pCorpse->setExp( (Exp_t)computeCreatureExp(pOusters, BLOODDRAIN_EXP) );	}	else	{		throw Error("PlayerCreature class type 坷幅");	}	// by sigi. 2002.12.12	addCorpseToZone(pCorpse, pZone, cx, cy);   	// 农府贸啊 磷菌促绊 林函俊 舅妨霖促.    GCCreatureDied gcCreatureDied;	gcCreatureDied.setObjectID(pDeadCreature->getObjectID());	pDeadCreature->getPlayer()->sendPacket(&gcCreatureDied);	pZone->broadcastPacket(cx , cy , &gcCreatureDied, pDeadCreature);	// 鸥老俊辑 Creature甫 瘤况霖促. 	// 窜 PCManager 俊辑 昏力窍搁 PC's EM's heartbeat 啊 龋免登瘤 臼栏聪 林狼窍扁 官鄂促.	Tile & tile = pZone->getTile(cx , cy);	Assert(tile.getCreature(pDeadCreature->getMoveMode()) == pDeadCreature);	tile.deleteCreature(pDeadCreature->getObjectID());	/*	// 关栏肺 颗变促.	by sigi. 2002.5.11	// Resurrect 捞亥飘甫 敲饭捞绢 按眉俊 楷包矫挪促.	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pDeadCreature->getPlayer());	EventResurrect* pEventResurrect = new EventResurrect(pGamePlayer);	pEventResurrect->setDeadline(0);	// 盔贰 乐菌带 厘家甫 悸泼茄促.	pEventResurrect->setOldZone(pDeadCreature->getZone());	// Player俊 Event甫 嘿牢促.	pGamePlayer->addEvent(pEventResurrect);	*/	// *NOTE	// 碍力 立加 辆丰老 版快 格钎 瘤痢阑 固府 瘤沥秦 初扁 困茄 规过捞促.	// Resurrect贸府 包拌客 剐立茄 何盒捞骨肺 捞 何盒捞 官拆 版快 Resurrect档 积阿秦具	// 茄促. 窜鉴洒 DB技捞宏父 窍搁 等促绊 积阿窍扁 奖瘤父. GamePlayer啊 Disconnect	// 窍搁辑 农府媚甫 技捞宏窍扁 锭巩俊 促矫 丹绢辑 技捞宏窍霸 登骨肺 己赋捞 登瘤 臼绰促.	ZoneID_t     ZoneID = 0;	ZoneCoord_t  ZoneX  = 0;	ZoneCoord_t  ZoneY  = 0;	ZONE_COORD   ResurrectCoord;	Zone*		 pResurrectZone = NULL;	// 档馒粮捞 绢蠢 辑滚, 绢蠢 粮弊缝俊 加窍绰瘤 舅酒夯促.	// 盔贰绰 葛电 粮篮 弊 粮俊辑 磷菌阑锭 倒酒啊具 且 粮阑 疙矫秦拎具 茄促.	ZoneInfo*  pZoneInfo  = NULL;	ZoneGroup* pZoneGroup = NULL;/*	if (pDeadCreature->isSlayer()) 	{		Slayer* pSlayer = dynamic_cast<Slayer*>(pDeadCreature);		Assert(pSlayer != NULL);		pSlayer->setStashStatus(false);		pSlayer->setHP(pSlayer->getHP(ATTR_MAX), ATTR_CURRENT);		// 瓷仿摹 醚钦捞 40捞窍扼搁, 公炼扒 具傈荤飞何俊辑 怕绢唱霸 等促.		int SumAttr = pSlayer->getSTR(ATTR_BASIC) + pSlayer->getDEX(ATTR_BASIC) + pSlayer->getINT(ATTR_BASIC);		if (SumAttr <= 40)		{			pSlayer->setResurrectZoneID(2101);		}		/o		try		{			ResurrectCoord = g_pResurrectLocationManager->getSlayerPosition(pSlayer->getResurrectZoneID());			ZoneID         = ResurrectCoord.id;			ZoneX          = ResurrectCoord.x;			ZoneY          = ResurrectCoord.y;		}		catch (NoSuchElementException&)		{			try			{				// 父老 酒流 何劝 困摹甫 瘤沥秦 初瘤 臼疽促搁, 				// 泅犁 粮俊辑 叼弃飘肺 汲沥登绢 乐绰 何劝粮栏肺 埃促.				ResurrectCoord = g_pResurrectLocationManager->getSlayerPosition(pSlayer->getZone()->getZoneID());

⌨️ 快捷键说明

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