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

📄 pcmanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : PCManager.cpp// Written By  : Reiot// Description : //////////////////////////////////////////////////////////////////////////////#include <algorithm>		// find_if ()#include <stdio.h>#include "Assert.h"#include "PCManager.h"#include "GamePlayer.h"#include "PlayerCreature.h"#include "Creature.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "Tile.h"#include "Zone.h"#include "MonsterCorpse.h"#include "GamePlayer.h"#include "ZoneGroupManager.h"#include "ZoneInfo.h"#include "ZoneInfoManager.h"#include "ZonePlayerManager.h"#include "IncomingPlayerManager.h"#include "TimeManager.h"#include "Event.h"#include "EventResurrect.h"#include "ResurrectLocationManager.h"#include "ItemUtil.h"#include "AlignmentManager.h"#include "ItemFactoryManager.h"#include "SlayerCorpse.h"#include "VampireCorpse.h"#include "OustersCorpse.h"#include "LogClient.h"#include "Thread.h"#include "TradeManager.h"#include "SkillHandlerManager.h"#include "Relic.h"#include "RelicUtil.h"#include "ItemInfoManager.h"#include "Inventory.h"#include "CreatureUtil.h"#include "PacketUtil.h"#include "ZoneUtil.h"#include "PKZoneInfoManager.h"#include "BloodBibleBonusManager.h"#include "HolyLandManager.h"//#include "SweeperBonusManager.h"#include "LevelWarZoneInfoManager.h"#include "war/WarSystem.h"#include "EventZoneInfo.h"#include "Properties.h"#include "EffectComa.h"#include "EventTransport.h"#include "EffectPKZoneResurrection.h"#include "EffectTryingPosition.h"#include "EffectSummonCasket.h"#include "Gpackets/GCAddEffect.h"#include "Gpackets/GCCreatureDied.h"#include "Gpackets/GCGetOffMotorCycle.h"#include "Gpackets/GCSystemMessage.h"#include "Gpackets/GCRemoveEffect.h"#include "Gpackets/GCRemoveFromGear.h"#include "Gpackets/GCHolyLandBonusInfo.h"//#include "Gpackets/GCSweeperBonusInfo.h"#include <vector>//////////////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////////////PCManager::PCManager () 	throw (){    __BEGIN_TRY	m_bRefreshHolyLandPlayer = false;//	m_bRefreshLevelWarBonusZonePlayer = false;    __END_CATCH}	//////////////////////////////////////////////////////////////////////////////// destructor// 牧抛捞呈狼 葛电 按眉甸阑 DB俊 历厘茄 饶, 昏力茄促.//////////////////////////////////////////////////////////////////////////////PCManager::~PCManager () 	throw (){    __BEGIN_TRY    __END_CATCH} //////////////////////////////////////////////////////////////////////////////// 粮俊 家加等 PC 甸狼 heartbeat 包访 皋筋靛甸阑 角青秦霖促.// 捞锭, PC啊 磷菌歹扼档 昏力窍搁 救等促. 恐衬窍搁, PC 啊 PC 概聪历俊辑// 昏力登搁 PC's EffectManager 狼 heartbeat 皋筋靛啊 龋免登瘤 臼扁 锭巩捞促.// 措脚 CreatureDead::unaffect()俊辑 绝俊林搁 迭 舅嘎摆促.//// 咯扁急 捞棋飘 酒捞袍俊 措茄 贸府甫 橇肺技教 窍绰 何盒捞促.// 捞 窃荐绰 Zone狼 Heart Beat俊辑 贸府登绰 风凭捞促.// 促弗 静饭靛客狼 包拌甫 混旗 杭锭, ProcessCommand啊 场抄 惑炔俊辑 贸府等促.// 弊矾唱 促弗 静饭靛俊辑 PCManager狼 deleteCreature 肚绰 addCreature甫// 窍霸 登搁 捞 窃荐 肚茄 救傈窍瘤 给且 巴捞促.//////////////////////////////////////////////////////////////////////////////void PCManager::processCreatures ()    throw (Error){    __BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	//cerr << "TID[" << Thread::self() << "]" << "PCM::process go" << endl;	Timeval currentTime;	getCurrentTime(currentTime);	try	{		hash_map< ObjectID_t , Creature* >::iterator before  = m_Creatures.end();		hash_map< ObjectID_t , Creature* >::iterator current = m_Creatures.begin(); 				while (current != m_Creatures.end()) 		{			Creature* pCreature = current->second;			Assert(pCreature != NULL);			// 啊瘤绊 乐绰 酒捞袍狼 heartbeat.. Inventory, Gear 八祸			if (pCreature->isSlayer())			{				Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);				Assert(pSlayer != NULL);				pSlayer->heartbeat(currentTime);				/*				// 绢凋啊俊辑 内付 惑怕俊 吧妨乐绰单 HP啊 棵扼啊绰 泅惑捞 惯积窍绰 巴 鞍促.				// 弊贰辑 内付 惑怕俊 吧妨乐栏搁 老窜 HP甫 公炼扒 0栏肺 技泼窍档废 函版茄促.				if (pSlayer->isFlag(Effect::EFFECT_CLASS_COMA))					pSlayer->setHP(0, ATTR_CURRENT);				*/				// HolyLandRaceBonus 利侩阑 困秦 initAllStat阑 何弗促.				if ( m_bRefreshHolyLandPlayer && !g_pWarSystem->hasActiveRaceWar() )				{					SLAYER_RECORD prev;					pSlayer->getSlayerRecord(prev);					pSlayer->initAllStat();					pSlayer->sendRealWearingInfo();					pSlayer->sendModifyInfo(prev);					// 己瘤胶懦阑 困秦 胶懦 格废阑 促矫 焊辰促.					pSlayer->sendSlayerSkillInfo();				}			}			else if (pCreature->isVampire())			{				Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);				Assert(pVampire != NULL);				pVampire->heartbeat(currentTime);				/*				// 绢凋啊俊辑 内付 惑怕俊 吧妨乐绰单 HP啊 棵扼啊绰 泅惑捞 惯积窍绰 巴 鞍促.				// 弊贰辑 内付 惑怕俊 吧妨乐栏搁 老窜 HP甫 公炼扒 0栏肺 技泼窍档废 函版茄促.				if (pVampire->isFlag(Effect::EFFECT_CLASS_COMA))					pVampire->setHP(0, ATTR_CURRENT);				*/				if (pVampire->isFlag(Effect::EFFECT_CLASS_COMA))				{					HP_t currentHP 	= pVampire->getHP(ATTR_CURRENT);					HP_t maxHP 		= pVampire->getHP(ATTR_MAX);					if (currentHP*3 >= maxHP)					{						//cout << "Target HP is over 1/3" << endl;						EffectComa* pEffectComa = dynamic_cast<EffectComa*>(pVampire->findEffect(Effect::EFFECT_CLASS_COMA));						Assert(pEffectComa != NULL);						if (pEffectComa->canResurrect())						{							//cout << "Can Resurrect!" << endl;							// 鸥百狼 捞棋飘 概聪历俊辑 内付 捞棋飘甫 昏力茄促.							pVampire->deleteEffect(Effect::EFFECT_CLASS_COMA);							pVampire->removeFlag(Effect::EFFECT_CLASS_COMA);							// 内付 捞棋飘啊 朝酒艾促绊 舅妨霖促.							GCRemoveEffect gcRemoveEffect;							gcRemoveEffect.setObjectID(pVampire->getObjectID());							gcRemoveEffect.addEffectList((EffectID_t)Effect::EFFECT_CLASS_COMA);							pVampire->getZone()->broadcastPacket(pVampire->getX(), pVampire->getY(), &gcRemoveEffect);							// 何劝窍绊 唱辑 effect 嘿咯霖促.							pVampire->getEffectManager()->sendEffectInfo(pVampire, pVampire->getZone(), pVampire->getX(), pVampire->getY());						}					}				}				// HolyLandRaceBonus 利侩阑 困秦 initAllStat阑 何弗促.				if ( m_bRefreshHolyLandPlayer && !g_pWarSystem->hasActiveRaceWar() )				{					VAMPIRE_RECORD prev;					pVampire->getVampireRecord(prev);					pVampire->initAllStat();					pVampire->sendRealWearingInfo();					pVampire->sendModifyInfo(prev);					// 己瘤胶懦阑 困秦 胶懦 格废阑 促矫 焊辰促.					pVampire->sendVampireSkillInfo();				}			}			else if ( pCreature->isOusters() )			{				Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);				Assert(pOusters != NULL);				pOusters->heartbeat(currentTime);			}			if (pCreature->isDead()				// transfusion锭巩俊 眠啊. isDead()绰 HP啊 0牢瘤甫 つ农窍绰单				// HP绰 盲况瘤绊 乐阑 荐 乐促. by sigi. 2002.10.8				|| pCreature->isFlag(Effect::EFFECT_CLASS_COMA) && pCreature->isVampire())			{				if (!pCreature->isFlag(Effect::EFFECT_CLASS_COMA))				{					///////////////////////////////////////////////////////////////////					// 磷阑 锭 Relic Item阑 啊瘤绊 乐促搁 官蹿俊 冻绢哆赴促.					///////////////////////////////////////////////////////////////////					dropRelicToZone(pCreature);					dropFlagToZone(pCreature);					dropSweeperToZone( pCreature );					///////////////////////////////////////////////////////////////////					// 磷阑 锭 己氢俊 蝶扼辑 酒捞袍阑 冻绢哆赴促.					///////////////////////////////////////////////////////////////////					Zone* pZone = pCreature->getZone();					Assert(pZone != NULL);					Tile& rTile = pZone->getTile( pCreature->getX(), pCreature->getY() );					EffectTryingPosition* pTryingTile = dynamic_cast<EffectTryingPosition*>(rTile.getEffect( Effect::EFFECT_CLASS_TRYING_POSITION ));					if ( pTryingTile != NULL )					{						MonsterCorpse* pTower = pTryingTile->getTower();						Assert( pTower != NULL );						Effect* pTryingTower = pTower->getEffectManager().findEffect( Effect::EFFECT_CLASS_SLAYER_TRYING_1 );						if ( pTryingTower != NULL ) pTryingTower->setDeadline(0);						pTryingTower = pCreature->findEffect(Effect::EFFECT_CLASS_TRYING);						if ( pTryingTower != NULL ) pTryingTower->setDeadline(0);					}					Slayer*  pSlayer = NULL;					Vampire* pVampire= NULL;					Ousters* pOusters= NULL;					Creature::CreatureClass CClass = pCreature->getCreatureClass();					if (CClass == Creature::CREATURE_CLASS_SLAYER)					{						pSlayer = dynamic_cast<Slayer*>(pCreature);						//pCorpse = new SlayerCorpse(dynamic_cast<Slayer*>(pCreature));						int SumAttr = pSlayer->getSTR(ATTR_BASIC) + pSlayer->getDEX(ATTR_BASIC) + pSlayer->getINT(ATTR_BASIC);						// 级捞 40 捞惑捞绊, 老馆 蜡历扼搁 磷阑 锭 酒捞袍阑 冻绢哆副 犬伏捞 乐促.						if (SumAttr > 40 && pSlayer->getCompetence() == 3)						{							Alignment_t alignment   = pSlayer->getAlignment();							ItemNum_t   DropItemNum = g_pAlignmentManager->getDropItemNum(alignment, pSlayer->isPK());							// DropItemNum俺鳖瘤父 							// 馒侩茄 蜡聪农 酒捞袍阑 冻绢哆赴促.							for(int i = 0; DropItemNum>0 && i<Slayer::WEAR_MAX; i++) 							{								Item* pItem = pSlayer->getWearItem( (Slayer::WearPart)i );								if (pItem != NULL									&& pItem->isUnique()									&& !pItem->isTimeLimitItem()								)								{									// by sigi. 2002.11.7									pSlayer->removeShape( pItem->getItemClass(), true );									/*									GCRemoveFromGear gcRemoveFromGear;									gcRemoveFromGear.setSlotID(i);									gcRemoveFromGear.setDestroy(false);									pSlayer->getPlayer()->sendPacket(&gcRemoveFromGear);									*/									if (isTwohandWeapon(pItem)) 									{										pSlayer->deleteWearItem(Slayer::WEAR_LEFTHAND);										pSlayer->deleteWearItem(Slayer::WEAR_RIGHTHAND);									} 									else 									{										pSlayer->deleteWearItem((Slayer::WearPart)i);									}									// 粮栏肺 谎赴促.									TPOINT pt = pZone->addItem(pItem, pSlayer->getX(), pSlayer->getY());									if (pt.x != -1)									{										filelog("uniqueItem.txt", "DropByKilled: %s %s", pSlayer->getName().c_str(), pItem->toString().c_str());										pItem->save("", STORAGE_ZONE, pZone->getZoneID(), pt.x , pt.y);										// ItemTraceLog 甫 巢变促										if ( pItem != NULL && pItem->isTraceItem() )										{											char zoneName[15];											sprintf( zoneName, "%4d%3d%3d", pZone->getZoneID(), pt.x, pt.y);											remainTraceLog( pItem, pCreature->getName(), zoneName, ITEM_LOG_MOVE, DETAIL_DROP);										}									}									else									{										// ItemTraceLog 甫 巢变促										if ( pItem != NULL && pItem->isTraceItem() )										{											remainTraceLog( pItem, pCreature->getName(), "GOD", ITEM_LOG_DELETE, DETAIL_DROP);										}										pItem->destroy();										SAFE_DELETE(pItem);									}									log(LOG_DROP_ITEM_DIE, pSlayer->getName(), "");									// 冻绢哆副 俺荐甫 临咯霖促.									DropItemNum--;									// 蜡聪农绰 公炼扒 茄俺父 冻绢哆赴促.									break;								}							}							for(int i = 0; i < DropItemNum; i++) 							{								int RandomValue = Random(0, (int)Slayer::WEAR_MAX - 1);								Item* pItem = pSlayer->getWearItem(Slayer::WearPart(RandomValue));								// 目敲傅阑 冻绢哆妨急 救等促 ぬ.ば								// 2003.3.14								if ( pItem != NULL								&&	!isCoupleRing(pItem)								&&  !pItem->isTimeLimitItem()								) 								{									// by sigi. 2002.11.7									pSlayer->removeShape( pItem->getItemClass(), true );									/*									GCRemoveFromGear gcRemoveFromGear;									gcRemoveFromGear.setSlotID(i);									gcRemoveFromGear.setDestroy(false);									pSlayer->getPlayer()->sendPacket(&gcRemoveFromGear);									*/									if (isTwohandWeapon(pItem)) 									{										pSlayer->deleteWearItem(Slayer::WEAR_LEFTHAND);										pSlayer->deleteWearItem(Slayer::WEAR_RIGHTHAND);									} 									else 									{										pSlayer->deleteWearItem(Slayer::WearPart(RandomValue));									}									//pItem->destroy();									//pCorpse->addTreasure(pItem);									// 粮栏肺 谎赴促.									TPOINT pt = pZone->addItem(pItem, pSlayer->getX(), pSlayer->getY());									if (pt.x != -1)									{										filelog("dropItem.txt", "DropByKilled: %s %s", pSlayer->getName().c_str(), pItem->toString().c_str());										pItem->save("", STORAGE_ZONE, pZone->getZoneID(), pt.x , pt.y);										// ItemTraceLog 甫 巢变促										if ( pItem != NULL && pItem->isTraceItem() )										{											char zoneName[15];											sprintf( zoneName, "%4d%3d%3d", pZone->getZoneID(), pt.x, pt.y);											remainTraceLog( pItem, pCreature->getName(), zoneName, ITEM_LOG_MOVE, DETAIL_DROP);										}									}									else									{										// ItemTraceLog 甫 巢变促										if ( pItem != NULL && pItem->isTraceItem() )										{											remainTraceLog( pItem, pCreature->getName(), "GOD", ITEM_LOG_DELETE, DETAIL_DROP);										}										pItem->destroy();										SAFE_DELETE(pItem);									}									log(LOG_DROP_ITEM_DIE, pSlayer->getName(), "");								}							}						}						// PK 寸茄巴阑 犁 悸泼 秦 拎具 茄促.						pSlayer->setPK(false);					}					else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)					{						pVampire = dynamic_cast<Vampire*>(pCreature);						//pCorpse = new VampireCorpse(dynamic_cast<Vampire*>(pCreature));

⌨️ 快捷键说明

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