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

📄 party.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	__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);		pCreature->setPartyID(0);		//cout << "颇萍俊 巢酒乐绰 农府媚[" << pCreature->getName() << "]狼 颇萍 ID甫 0栏肺 父甸菌嚼聪促." << endl;		// 阿阿狼 粮俊 乐绰 肺拿 颇萍 概聪历俊辑 秦寸窍绰 颇萍 按眉甫 昏力茄促.		Zone* pZone = pCreature->getZone();		if (pZone != NULL)		{			LocalPartyManager* pLocalPartyManager = pZone->getLocalPartyManager();			Assert(pLocalPartyManager != NULL);			pLocalPartyManager->deletePartyMember(m_ID, pCreature);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	//cout << "Party::destroyParty() : END" << endl;	__END_CATCH}// 颇萍 糕滚甸俊霸 菩哦阑 朝赴促.void Party::broadcastPacket(Packet* pPacket, Creature* pOwner) 	throw (ProtocolException, Error){	__BEGIN_TRY	//cout << "Party::broadcastPacket() : BEGIN" << endl;	__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);		if (pCreature != pOwner) 			pCreature->getPlayer()->sendPacket(pPacket);	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	//cout << "Party::broadcastPacket() : END" << endl;	__END_CATCH}// 货肺款 颇萍盔捞 眠啊登菌阑 锭, 颇萍盔甸俊霸 朝酒啊绰// GCPartyJoined 菩哦阑 备己茄促.void Party::makeGCPartyJoined(GCPartyJoined* pGCPartyJoined) const	throw(){	__BEGIN_TRY	//cout << "Party::makeGCPartyJoined() : BEGIN" << endl;	Assert(pGCPartyJoined != NULL);	__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);		PARTY_MEMBER_INFO* pInfo = new PARTY_MEMBER_INFO;		if (pCreature->isSlayer())		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			pInfo->name       = pSlayer->getName();			pInfo->sex        = pSlayer->getSex();			pInfo->hair_style = pSlayer->getHairStyle();			pInfo->ip         = pSlayer->getIP();		}		else if (pCreature->isVampire())		{			Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);			pInfo->name       = pVampire->getName();			pInfo->sex        = pVampire->getSex();			pInfo->hair_style = 0;			pInfo->ip         = pVampire->getIP();		}		else if ( pCreature->isOusters() )		{			// 酒快胶磐胶 眠啊. by bezz 2003.04.19			Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);			pInfo->name			= pOusters->getName();			pInfo->sex			= pOusters->getSex();			pInfo->hair_style	= 0;			pInfo->ip			= pOusters->getIP();		}		else		{			Assert(false);		}		pGCPartyJoined->addMemberInfo(pInfo);	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	//cout << "Party::makeGCPartyJoined() : END" << endl;	__END_CATCH}int Party::getSize(void) const 	throw(){	__BEGIN_TRY	return m_MemberMap.size();	__END_CATCH}hash_map<string, Creature*> Party::getMemberMap(void) throw() { 	__BEGIN_TRY	return m_MemberMap; 	__END_CATCH}int Party::getAdjacentMemberSize(Creature* pLeader) const 	throw(){	__BEGIN_TRY	//cout << "Party::getAdjacentMemberSize() : BEGIN" << endl;	Zone* pZone = pLeader->getZone();	Assert(pZone != NULL);	ZoneCoord_t cx = pLeader->getX();	ZoneCoord_t cy = pLeader->getY();	int rValue = 0;	__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);		// 颇萍狼 箭磊俊绰 磊脚档 器窃登扁 锭巩俊 		// 鞍篮 仇牢瘤 促弗 仇牢瘤绰 眉农窍瘤 臼绰促.		Zone* pTZone = pCreature->getZone();		// 粮 器牢磐啊 老摹茄促搁 鞍篮 粮俊 乐促绰 巴阑 狼固茄促.		if (pTZone == pZone && pCreature->getDistance(cx, cy) <= 8) rValue++;	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	// 磊脚档 器窃登骨肺 利绢档 1焊促绰 目具 茄促.	//Assert(rValue >= 1);	if (rValue == 0) rValue = 1;	//cout << "Party::getAdjacentMemberSize() : END" << endl;	return rValue;	__END_CATCH}int Party::getAdjacentMemberSize_LOCKED(Creature* pLeader) const 	throw(){	__BEGIN_TRY	//cout << "Party::getAdjacentMemberSize() : BEGIN" << endl;	Zone* pZone = pLeader->getZone();	Assert(pZone != NULL);	ZoneCoord_t cx = pLeader->getX();	ZoneCoord_t cy = pLeader->getY();	int rValue = 0;	//__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);		// 颇萍狼 箭磊俊绰 磊脚档 器窃登扁 锭巩俊 		// 鞍篮 仇牢瘤 促弗 仇牢瘤绰 眉农窍瘤 臼绰促.		Zone* pTZone = pCreature->getZone();		// 粮 器牢磐啊 老摹茄促搁 鞍篮 粮俊 乐促绰 巴阑 狼固茄促.		if (pTZone == pZone && pCreature->getDistance(cx, cy) <= 8) rValue++;	}	//__LEAVE_CRITICAL_SECTION(m_Mutex)	// 磊脚档 器窃登骨肺 利绢档 1焊促绰 目具 茄促.	Assert(rValue >= 1);	//cout << "Party::getAdjacentMemberSize() : END" << endl;	return rValue;	__END_CATCH}// 府歹 棺 颇萍盔甸狼 瓷仿摹 版氰摹甫 棵赴促.// 府歹狼 棵扼埃 版氰摹绰 LeaderModifyInfo俊促 笼绢持绊, // 唱赣瘤 糕滚甸狼 棵扼埃 版氰摹绰 菩哦阑 蝶肺 父甸绢 焊辰促.int Party::shareAttrExp(Creature* pLeader, int amount, int STRMultiplier, int DEXMultiplier, int INTMultiplier, ModifyInfo& LeaderModifyInfo) const 	throw(){	__BEGIN_TRY	Assert(pLeader != NULL);	Assert(pLeader->isSlayer());	ZoneCoord_t cx = pLeader->getX();	ZoneCoord_t cy = pLeader->getY();	list<Creature*> MemberList;	int LevelSum = 0;	__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)		{			//Assert(pCreature->getZone() == pLeader->getZone());			// 绢凋啊俊辑(酒付 PCManager::killCreature牢芭 鞍篮单)			// Zone捞 官诧促. -_-;			// 茫阑 矫埃捞 绝绢辑 老窜 捞犯霸 埃促. by sigi. 2002.5.8			if (pCreature->getZone()==pLeader->getZone())			{				MemberList.push_back(pCreature);				// 辟贸俊 乐绰 颇萍盔 八祸窍绰 辫俊 颇萍盔甸狼 饭骇 钦档 备秦敌促.				if (pCreature->isSlayer())				{					Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);					LevelSum += pSlayer->getSlayerLevel();				}				else if (pCreature->isVampire())				{					// 浇饭捞绢 颇萍俊 轨颇捞绢啊 乐阑 荐 乐阑鳖?					Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);					LevelSum += pVampire->getLevel();				}			}		}	}	// 版氰摹甫 颇萍盔狼 箭磊俊 刘气矫挪促.	int nMemberSize = MemberList.size();	//cout << "颇萍盔狼 箭磊 : " << nMemberSize << endl;	//cout << "盔贰 版氰摹 : " << amount << endl;	if (nMemberSize == 1)	{		m_Mutex.unlock();		Assert(pLeader->isSlayer());		Slayer* pLeaderSlayer = dynamic_cast<Slayer*>(pLeader);		// 颇萍盔捞 窍唱扼搁 (辟贸俊 促弗 颇萍盔捞 绝促搁) 弊成 去磊 棵妨林绊, 府畔茄促.		divideAttrExp(pLeaderSlayer, amount, 			STRMultiplier, DEXMultiplier, INTMultiplier, 			LeaderModifyInfo, nMemberSize);	// 颇萍盔狼 箭磊		return 0;	}	switch (nMemberSize)	{		case 2: amount = getPercentValue(amount, 150); break;		case 3: amount = getPercentValue(amount, 195); break;		case 4: amount = getPercentValue(amount, 225); break;		case 5: amount = getPercentValue(amount, 250); break;		case 6: amount = getPercentValue(amount, 270); break;		default: break;	}	//cout << "刘气等 版氰摹 : " << amount << endl;	//cout << "颇萍盔狼 饭骇钦 : " << LevelSum << endl;	// 阿阿狼 颇萍盔甸狼 版氰摹甫 棵妨霖促.	list<Creature*>::iterator itr = MemberList.begin();	for (; itr != MemberList.end(); itr++)	{		Creature* pCreature = (*itr);		Assert(pCreature != NULL);		Assert(pCreature->isSlayer());		Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		int myQuota = (int)((float)amount * (float)pSlayer->getSlayerLevel() / (float)LevelSum);		//cout << "唱狼 蛤 : " << myQuota << endl;		if (pCreature->getName() != pLeader->getName())		{			//cout << "夯牢[" << pCreature->getName() << "]捞 酒聪扼辑 菩哦阑 焊忱聪促." << endl;			Item* pWeapon = pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND);			if (pWeapon != NULL)			{				Item::ItemClass IClass = pWeapon->getItemClass();				int _STR = 0, _DEX = 0, _INT = 0;				switch (IClass)				{					case Item::ITEM_CLASS_SWORD:					case Item::ITEM_CLASS_BLADE:						_STR = 8; _DEX = 1; _INT = 1; 						break;					case Item::ITEM_CLASS_SG:					case Item::ITEM_CLASS_SMG:					case Item::ITEM_CLASS_AR:					case Item::ITEM_CLASS_SR:						_STR = 1; _DEX = 8; _INT = 1; 						break;					case Item::ITEM_CLASS_MACE: 					case Item::ITEM_CLASS_CROSS:						_STR = 1; _DEX = 1; _INT = 8;						break;					default:						Assert(false);						break;				}				// 夯牢捞 酒聪扼搁...				GCModifyInformation gcModifyInformation;				divideAttrExp(pSlayer, myQuota, _STR, _DEX, _INT, 					gcModifyInformation, nMemberSize);				pSlayer->getPlayer()->sendPacket(&gcModifyInformation);			}		}		else		{			//cout << "夯牢[" << pCreature->getName() << "]捞扼辑 菩哦 霖厚父 钦聪促." << endl;			// 夯牢捞扼搁 老窜 唱吝俊 焊郴扁 困秦, 淬扁父 茄促.			divideAttrExp(pSlayer, myQuota, 				STRMultiplier, DEXMultiplier, INTMultiplier, 				LeaderModifyInfo, nMemberSize);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	return 0;	__END_CATCH}int Party::shareVampireExp(Creature* pLeader, int amount, ModifyInfo& LeaderModifyInfo) const 	throw(){	__BEGIN_TRY	Assert(pLeader != NULL);	Assert(pLeader->isVampire());	ZoneCoord_t cx = pLeader->getX();	ZoneCoord_t cy = pLeader->getY();	list<Creature*> MemberList;	int LevelSum = 0;	__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);		// 肺拿 颇萍 概聪历甫 烹秦辑父 阂府绰 窃荐捞扁 锭巩俊, 		// 捞 颇萍绰 泅犁 肺拿 颇萍扼绊 啊沥且 荐 乐促.		// 肺拿 颇萍 郴何俊辑绰 鞍篮 粮俊 乐绰瘤甫 八荤且 鞘夸啊 绝扁 锭巩俊		// 芭府 八荤父阑 茄促.		// 荤角 概锅 拌魂 锭付促 捞犯霸 芭府 拌魂阑 茄促绰 巴篮 距埃篮		// 公府啊 乐促绊 积阿窍绰单, 鞍篮 粮俊 乐栏搁 版氰摹 焊呈胶甫 罐绰		// 率捞 亮瘤 臼阑鳖? -- 辫己刮		// 冠零惑怕俊辑绰 颇萍版氰摹 给 冈绰促. by Sequoia		if (pCreature->getDistance(cx, cy) <= 8 && !pCreature->isFlag( Effect::EFFECT_CLASS_TRANSFORM_TO_BAT ) )		{			MemberList.push_back(pCreature);			// 辟贸俊 乐绰 颇萍盔 八祸窍绰 辫俊 颇萍盔甸狼 饭骇 钦档 备秦敌促.			if (pCreature->isSlayer())			{				// 轨颇捞绢 颇萍俊 浇饭捞绢啊 乐阑 荐 乐阑鳖?				Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);				LevelSum += pSlayer->getSlayerLevel();			}			else if (pCreature->isVampire())			{				Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);				LevelSum += pVampire->getLevel();			}		}	}	// 版氰摹甫 颇萍盔狼 箭磊俊 刘气矫挪促.	int nMemberSize = MemberList.size();	//cout << "颇萍盔狼 箭磊 : " << nMemberSize << endl;	//cout << "盔贰 版氰摹 : " << amount << endl;	if (nMemberSize == 1)	{		m_Mutex.unlock();		Assert(pLeader->isVampire());		Vampire* pLeaderVampire = dynamic_cast<Vampire*>(pLeader);		// 颇萍盔捞 窍唱扼搁 (辟贸俊 促弗 颇萍盔捞 绝促搁) 弊成 去磊 棵妨林绊, 府畔茄促.		increaseVampExp(pLeaderVampire, amount, LeaderModifyInfo);		return 0;	}	switch (nMemberSize)	{		case 2: amount = getPercentValue(amount, 150); break;		case 3: amount = getPercentValue(amount, 195); break;		case 4: amount = getPercentValue(amount, 225); break;		case 5: amount = getPercentValue(amount, 250); break;		case 6: amount = getPercentValue(amount, 270); break;		default: break;	}	//cout << "刘气等 版氰摹 : " << amount << endl;	//cout << "颇萍盔甸狼 饭骇 钦 : " << LevelSum << endl;	// 阿阿狼 颇萍盔甸狼 版氰摹甫 棵妨霖促.	list<Creature*>::iterator itr = MemberList.begin();	for (; itr != MemberList.end(); itr++)	{		Creature* pCreature = (*itr);		Assert(pCreature != NULL);		Assert(pCreature->isVampire());		Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);		int myQuota = (int)( (float)amount * (float)pVampire->getLevel() / (float)LevelSum );		//cout << "唱狼 蛤 : " << myQuota << endl;		if (pCreature != pLeader)		{			//cout << "夯牢捞 酒聪扼辑 菩哦阑 焊忱聪促." << endl;			// 夯牢捞 酒聪扼搁...			GCModifyInformation gcModifyInformation;			increaseVampExp(pVampire, myQuota, gcModifyInformation);			pVampire->getPlayer()->sendPacket(&gcModifyInformation);		}		else		{			//cout << "夯牢捞扼辑 菩哦阑 焊郴瘤 臼嚼聪促." << endl;			// 夯牢捞扼搁 老窜 唱吝俊 焊郴扁 困秦, 淬扁父 茄促.			increaseVampExp(pVampire, myQuota, LeaderModifyInfo);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	return 0;	__END_CATCH}int Party::shareOustersExp(Creature* pLeader, int amount, ModifyInfo& LeaderModifyInfo) const 	throw(){	__BEGIN_TRY	Assert(pLeader != NULL);	Assert(pLeader->isOusters());	ZoneCoord_t cx = pLeader->getX();	ZoneCoord_t cy = pLeader->getY();	list<Creature*> MemberList;	int LevelSum = 0;	__ENTER_CRITICAL_SECTION(m_Mutex)

⌨️ 快捷键说明

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