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

📄 party.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	}	if (MemberList.size() == 1)	{		m_Mutex.unlock();		return false;	}	list<Creature*>::iterator litr = MemberList.begin();	for (; litr != MemberList.end(); litr++)	{		Creature* pCreature = (*litr);		Assert(pCreature != NULL);		Assert(pCreature->isOusters());		Ousters* pTargetOusters = dynamic_cast<Ousters*>(pCreature);		Assert(pTargetOusters != NULL );		if (pTargetOusters != pCaster && pTargetOusters->getHP() < pTargetOusters->getHP( ATTR_MAX ) && pTargetOusters->getHP() > 0 )		{			ret = true;			GCModifyInformation gcMI;			HP_t final = min( (int)pTargetOusters->getHP(ATTR_MAX), pTargetOusters->getHP() + HealPoint );			if ( final > pTargetOusters->getHP(ATTR_MAX) - pTargetOusters->getSilverDamage() )			{				pTargetOusters->setSilverDamage( pTargetOusters->getHP(ATTR_MAX) - final );				gcMI.addShortData(MODIFY_SILVER_DAMAGE, pTargetOusters->getSilverDamage());			}			if ( pTargetOusters->getHP() != final )			{				pTargetOusters->setHP( final );				gcMI.addShortData(MODIFY_CURRENT_HP, final);			}			GCStatusCurrentHP gcHP;			gcHP.setObjectID( pTargetOusters->getObjectID() );			gcHP.setCurrentHP( final );			pZone->broadcastPacket(pTargetOusters->getX(), pTargetOusters->getY(), &gcHP);						pTargetOusters->getPlayer()->sendPacket( &gcMI );			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pTargetOusters->getObjectID());			gcAddEffect.setEffectID(Effect::EFFECT_CLASS_WATER_ELEMENTAL_HEALED);			gcAddEffect.setDuration(0);			pZone->broadcastPacket(pTargetOusters->getX(), pTargetOusters->getY(), &gcAddEffect);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)		return ret;	__END_CATCH}void Party::shareDetectHidden(Creature* pCaster, int Duration) 	throw (Error){	__BEGIN_TRY	Zone*       pZone = pCaster->getZone();	ZoneCoord_t cx    = pCaster->getX();	ZoneCoord_t cy    = pCaster->getY();	list<Creature*> MemberList;	__ENTER_CRITICAL_SECTION(m_Mutex)	// 辟贸俊 乐绰 捞棋飘甫 吧绢临 颇萍盔狼 府胶飘甫 啊廉柯促.	hash_map<string, Creature*>::const_iterator mitr = m_MemberMap.begin();	for (; mitr != m_MemberMap.end(); mitr++)	{		Creature* pCreature = mitr->second;		Assert(pCreature != NULL);		if (pCreature->getDistance(cx, cy) <= 8)		{			MemberList.push_back(pCreature);		}	}	if (MemberList.size() == 1)	{		m_Mutex.unlock();		return;	}	list<Creature*>::iterator litr = MemberList.begin();	for (; litr != MemberList.end(); litr++)	{		Creature* pCreature = (*litr);		Assert(pCreature != NULL);		Assert(pCreature->isSlayer());		if (pCreature != pCaster)		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			EffectDetectHidden* pEffectDetectHidden = new EffectDetectHidden(pSlayer);			pEffectDetectHidden->setDeadline(Duration);			EffectManager* pEffectManager = pSlayer->getEffectManager();			pEffectManager->addEffect(pEffectDetectHidden);			pSlayer->setFlag(Effect::EFFECT_CLASS_DETECT_HIDDEN);			pZone->updateHiddenScan(pSlayer);			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pSlayer->getObjectID());			gcAddEffect.setEffectID(Effect::EFFECT_CLASS_DETECT_HIDDEN);			gcAddEffect.setDuration(Duration);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcAddEffect);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}void Party::shareDetectInvisibility(Creature* pCaster, int Duration) 	throw (Error){	__BEGIN_TRY	Zone*       pZone = pCaster->getZone();	ZoneCoord_t cx    = pCaster->getX();	ZoneCoord_t cy    = pCaster->getY();	list<Creature*> MemberList;	__ENTER_CRITICAL_SECTION(m_Mutex)	// 辟贸俊 乐绰 捞棋飘甫 吧绢临 颇萍盔狼 府胶飘甫 啊廉柯促.	hash_map<string, Creature*>::const_iterator mitr = m_MemberMap.begin();	for (; mitr != m_MemberMap.end(); mitr++)	{		Creature* pCreature = mitr->second;		Assert(pCreature != NULL);		if (pCreature->getDistance(cx, cy) <= 8)		{			MemberList.push_back(pCreature);		}	}	if (MemberList.size() == 1)	{		m_Mutex.unlock();		return;	}	list<Creature*>::iterator litr = MemberList.begin();	for (; litr != MemberList.end(); litr++)	{		Creature* pCreature = (*litr);		Assert(pCreature != NULL);		Assert(pCreature->isSlayer());		if (pCreature != pCaster)		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			EffectDetectInvisibility* pEffectDetectInvisibility = new EffectDetectInvisibility(pSlayer);			pEffectDetectInvisibility->setDeadline(Duration);			EffectManager* pEffectManager = pSlayer->getEffectManager();			pEffectManager->addEffect(pEffectDetectInvisibility);			pSlayer->setFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY);			pZone->updateInvisibleScan(pSlayer);			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pSlayer->getObjectID());			gcAddEffect.setEffectID(Effect::EFFECT_CLASS_DETECT_INVISIBILITY);			gcAddEffect.setDuration(Duration);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcAddEffect);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}void Party::shareExpansion(Creature* pCaster, int Duration, int Percent) 	throw (Error){	__BEGIN_TRY	Zone*       pZone = pCaster->getZone();	ZoneCoord_t cx    = pCaster->getX();	ZoneCoord_t cy    = pCaster->getY();	list<Creature*> MemberList;	__ENTER_CRITICAL_SECTION(m_Mutex)	// 辟贸俊 乐绰 捞棋飘甫 吧绢临 颇萍盔狼 府胶飘甫 啊廉柯促.	hash_map<string, Creature*>::const_iterator mitr = m_MemberMap.begin();	for (; mitr != m_MemberMap.end(); mitr++)	{		Creature* pCreature = mitr->second;		Assert(pCreature != NULL);		if (pCreature->getDistance(cx, cy) <= 8)		{			MemberList.push_back(pCreature);		}	}	if (MemberList.size() == 1)	{		m_Mutex.unlock();		return;	}	list<Creature*>::iterator litr = MemberList.begin();	for (; litr != MemberList.end(); litr++)	{		Creature* pCreature = (*litr);		Assert(pCreature != NULL);		Assert(pCreature->isSlayer());		if (pCreature != pCaster && pCreature->isSlayer())		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			// 捞固 鞍篮 捞棋飘啊 粮犁茄促搁 捞傈狼 捞棋飘甫 昏力秦林绢具 茄促.			if (pSlayer->isFlag(Effect::EFFECT_CLASS_EXPANSION))			{				pSlayer->deleteEffect(Effect::EFFECT_CLASS_EXPANSION);			}			EffectExpansion* pEffectExpansion = new EffectExpansion(pSlayer);			pEffectExpansion->setDeadline(Duration);			pEffectExpansion->setHPBonus(Percent);			pSlayer->addEffect(pEffectExpansion);			pSlayer->setFlag(Effect::EFFECT_CLASS_EXPANSION);			// 捞棋飘甫 嘿看栏聪, 瓷仿摹甫 犁拌魂茄促.			// 弊府绊 夯牢俊霸 函拳等 荤亲阑 舅妨霖促.			SLAYER_RECORD prev;			pSlayer->getSlayerRecord(prev);			pSlayer->initAllStat();			pSlayer->sendRealWearingInfo();			pSlayer->sendModifyInfo(prev);			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pSlayer->getObjectID());			gcAddEffect.setEffectID(Effect::EFFECT_CLASS_EXPANSION);			gcAddEffect.setDuration(Duration);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcAddEffect);			// 酒付档 弥措 眉仿捞 函版登菌阑 抛聪, HP 开矫 宏肺靛某胶泼茄促.			GCOtherModifyInfo gcOtherModifyInfo;			makeGCOtherModifyInfo(&gcOtherModifyInfo, pSlayer, &prev);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcOtherModifyInfo, pSlayer);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}void Party::refreshFamilyPay(){	bool oldFamilyPay = m_bFamilyPay;	m_bFamilyPay = false;	__ENTER_CRITICAL_SECTION(m_Mutex)	hash_map<string, Creature*>::const_iterator mitr = m_MemberMap.begin();	for (; mitr != m_MemberMap.end(); mitr++)	{		Creature* pCreature = mitr->second;		Assert( pCreature->isPC() );		GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pCreature->getPlayer());		Assert( pGamePlayer != NULL );		if ( pGamePlayer->isFamilyPayAvailable() )		{			m_bFamilyPay = true;			break;		}	}	// 菩剐府 夸陛力 利侩捞 官差搁 葛电 颇萍盔甸俊霸 利侩矫挪促.	// 窜 菩剐府 夸陛力 啊涝磊绰 力寇茄促.	if ( oldFamilyPay != m_bFamilyPay )	{		mitr = m_MemberMap.begin();		for (; mitr != m_MemberMap.end(); mitr++)		{			Creature* pCreature = mitr->second;			Assert( pCreature->isPC() );			GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pCreature->getPlayer());			Assert( pGamePlayer != NULL );			if ( !pGamePlayer->isFamilyPayAvailable() )			{				if ( m_bFamilyPay )				{					// 菩剐府 夸陛力 利侩					pGamePlayer->setFamilyPayPartyType( FAMILY_PAY_PARTY_TYPE_FREE_PASS );				}				else				{					// 菩剐府 夸陛力 利侩捞 场车澜阑 舅妨具茄促.					pGamePlayer->setFamilyPayPartyType( FAMILY_PAY_PARTY_TYPE_FREE_PASS_END );				}			}		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)}string Party::toString(void) const 	throw(){	__BEGIN_TRY	StringStream msg;	msg << "Party("		<< "ID:" << m_ID		<< ",CClass:" << m_CreatureClass		<< ",Member(";	__ENTER_CRITICAL_SECTION(m_Mutex)	hash_map<string, Creature*>::const_iterator itr = m_MemberMap.begin();	for (; itr != m_MemberMap.end(); itr++)	{		Creature* pCreature = itr->second;		Assert(pCreature != NULL);		msg << pCreature->getName() << ",";	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	msg << "))";	return msg.toString();	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// class PartyManager member methods////////////////////////////////////////////////////////////////////////////////PartyManager::PartyManager()	throw(){	__BEGIN_TRY	m_Mutex.setName("PartyManager");	__END_CATCH}PartyManager::~PartyManager()	throw(){	__BEGIN_TRY	__END_CATCH}bool PartyManager::createParty(int ID, Creature::CreatureClass CClass) 	throw (DuplicatedException, Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	// 吝酶登绰 颇萍甫 茫酒夯促.	hash_map<int, Party*>::const_iterator itr = m_PartyMap.find(ID);	if (itr != m_PartyMap.end())	{		m_Mutex.unlock();		return false;	}	Party* pParty = new Party(CClass);	pParty->setID(ID);	m_PartyMap[ID] = pParty;	__LEAVE_CRITICAL_SECTION(m_Mutex)	return true;	__END_CATCH}Party* PartyManager::getParty(int ID) 	// by sigi. 2002.10.14	throw (NoSuchElementException, Error){	__BEGIN_TRY	// 秦寸窍绰 颇萍啊 乐绰瘤 茫酒夯促.	hash_map<int, Party*>::const_iterator itr = m_PartyMap.find(ID);	if (itr == m_PartyMap.end())	{		return NULL;	}	return itr->second;		__END_CATCH}bool PartyManager::addPartyMember(int ID, Creature* pCreature) 	throw (NoSuchElementException, DuplicatedException, Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	// 秦寸窍绰 颇萍啊 乐绰瘤 茫酒夯促.	hash_map<int, Party*>::const_iterator itr = m_PartyMap.find(ID);	if (itr == m_PartyMap.end())	{		// 绝促搁 咯扁辑 积己秦霖促.		Party* pNewParty = new Party(pCreature->getCreatureClass());		pNewParty->setID(ID);		m_PartyMap[ID] = pNewParty;		// 狼固啊 乐绰 眉农老鳖...-_-		if (pNewParty->getSize() >= PARTY_MAX_SIZE)		{			m_Mutex.unlock();			return false;		}		pNewParty->addMember(pCreature);	}	else	{		Party* pParty = itr->second;		Assert(pParty != NULL);		if (pParty->getSize() >= PARTY_MAX_SIZE)		{			m_Mutex.unlock();			return false;		}		pParty->addMember(pCreature);	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	return true;	__END_CATCH}bool PartyManager::deletePartyMember(int ID, Creature* pCreature) 	throw (NoSuchElementException, Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	// 秦寸窍绰 颇萍啊 乐绰瘤 茫酒夯促.	hash_map<int, Party*>::const_iterator itr = m_PartyMap.find(ID);	if (itr == m_PartyMap.end())	{		m_Mutex.unlock();		return false;	}	Party* pParty = itr->second;	Assert(pParty != NULL);	pParty->deleteMember(pCreature->getName());	__LEAVE_CRITICAL_SECTION(m_Mutex)	return true;	__END_CATCH}////////////////////////////////////////////////////////////////////////////////// class LocalPartyManager member methods////////////////////////////////////////////////////////////////////////////////LocalPartyManager::LocalPartyManager()	throw(){	__BEGIN_TRY	m_Mutex.setName("LocalPartyManager");	__END_CATCH}LocalPartyManager::~LocalPartyManager()	throw(){	__BEGIN_TRY	__END_CATCH}void LocalPartyManager::heartbeat(void)	throw (Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex);

⌨️ 快捷键说明

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