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

📄 party.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	// 辟贸俊 乐绰 (版氰摹甫 棵妨临) 颇萍盔狼 府胶飘甫 啊廉柯促.	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 (pCreature->isOusters())			{				Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);				LevelSum += pOusters->getLevel();			}		}	}	// 版氰摹甫 颇萍盔狼 箭磊俊 刘气矫挪促.	int nMemberSize = MemberList.size();	//cout << "颇萍盔狼 箭磊 : " << nMemberSize << endl;	//cout << "盔贰 版氰摹 : " << amount << endl;	if (nMemberSize == 1)	{		m_Mutex.unlock();		Assert(pLeader->isOusters());		Ousters* pLeaderOusters = dynamic_cast<Ousters*>(pLeader);		// 颇萍盔捞 窍唱扼搁 (辟贸俊 促弗 颇萍盔捞 绝促搁) 弊成 去磊 棵妨林绊, 府畔茄促.		increaseOustersExp(pLeaderOusters, 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;	}	// 阿阿狼 颇萍盔甸狼 版氰摹甫 棵妨霖促.	list<Creature*>::iterator itr = MemberList.begin();	for (; itr != MemberList.end(); itr++)	{		Creature* pCreature = (*itr);		Assert(pCreature != NULL);		Assert(pCreature->isOusters());		Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);		int myQuota = (int)( (float)amount * (float)pOusters->getLevel() / (float)LevelSum );		if (pCreature != pLeader)		{			//cout << "夯牢捞 酒聪扼辑 菩哦阑 焊忱聪促." << endl;			// 夯牢捞 酒聪扼搁...			GCModifyInformation gcModifyInformation;			increaseOustersExp(pOusters, myQuota, gcModifyInformation);			pOusters->getPlayer()->sendPacket(&gcModifyInformation);		}		else		{			//cout << "夯牢捞扼辑 菩哦阑 焊郴瘤 臼嚼聪促." << endl;			// 夯牢捞扼搁 老窜 唱吝俊 焊郴扁 困秦, 淬扁父 茄促.			increaseOustersExp(pOusters, myQuota, LeaderModifyInfo);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	return 0;	__END_CATCH}void Party::shareRankExp(Creature* pLeader, int otherLevel) 	throw(){	__BEGIN_TRY	Assert(pLeader != NULL);	Assert(pLeader->isPC());	ZoneCoord_t cx = pLeader->getX();	ZoneCoord_t cy = pLeader->getY();	list<Creature*> MemberList;	int LevelSum = 0;	int LevelSum2 = 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)		{			MemberList.push_back(pCreature);			// 辟贸俊 乐绰 颇萍盔 八祸窍绰 辫俊 颇萍盔甸狼 饭骇 钦档 备秦敌促.			if (pCreature->isSlayer())			{				Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);				LevelSum += pSlayer->getSlayerLevel();				LevelSum2 += pSlayer->getHighestSkillDomainLevel();			}			else if (pCreature->isVampire())			{				Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);				LevelSum += pVampire->getLevel();				LevelSum2 += pVampire->getLevel();			}			else if ( pCreature->isOusters() )			{				Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);				LevelSum += pOusters->getLevel();				LevelSum2 += pOusters->getLevel();			}		}	}	// 版氰摹甫 颇萍盔狼 箭磊俊 刘气矫挪促.	int nMemberSize = MemberList.size();	// 颇萍盔 乞闭 饭骇俊 狼茄 版氰摹甫 备茄促.	int amount = (int) computeRankExp( LevelSum2 / nMemberSize, otherLevel );	//cout << "颇萍盔狼 箭磊 : " << nMemberSize << endl;	//cout << "盔贰 版氰摹 : " << amount << endl;	if (nMemberSize == 1)	{		m_Mutex.unlock();		PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pLeader);		// 颇萍盔捞 窍唱扼搁 (辟贸俊 促弗 颇萍盔捞 绝促搁) 弊成 去磊 棵妨林绊, 府畔茄促.		pPC->increaseRankExp(amount);		return;	}	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);		// 辟贸俊 乐绰 颇萍盔 八祸窍绰 辫俊 颇萍盔甸狼 饭骇 钦档 备秦敌促.		int level = 0;		if (pCreature->isSlayer())		{			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);			level = pSlayer->getSlayerLevel();			int myQuota = amount * level / LevelSum;			pSlayer->increaseRankExp(myQuota);		}		else if (pCreature->isVampire())		{			Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);			level = pVampire->getLevel();			int myQuota = amount * level / LevelSum;			pVampire->increaseRankExp(myQuota);		}		else if ( pCreature->isOusters() )		{			Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);			level = pOusters->getLevel();			int myQuota = amount * level / LevelSum;			pOusters->increaseRankExp(myQuota);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	return;	__END_CATCH}void Party::shareRevealer(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;	}	if ( !pCaster->isFlag( Effect::EFFECT_CLASS_REVEALER ) )	{		throw Error( "Revealer 捞棋飘啊 吧妨 乐瘤 臼澜" );	}	// Caster 狼 Revelaer 胶懦 饭骇阑 啊廉柯促	Slayer* pSlayer = dynamic_cast<Slayer*>(pCaster);	Assert( pSlayer != NULL );	SkillSlot* pSkillSlot = pSlayer->getSkill( SKILL_REVEALER );	Assert( pSkillSlot != NULL );	ExpLevel_t ExpLevel = pSkillSlot->getExpLevel();	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);			EffectRevealer* pEffectRevealer = new EffectRevealer(pSlayer);			pEffectRevealer->setSkillLevel( ExpLevel );			pEffectRevealer->setDeadline(Duration);			EffectManager* pEffectManager = pSlayer->getEffectManager();			pEffectManager->addEffect(pEffectRevealer);			pSlayer->setFlag(Effect::EFFECT_CLASS_REVEALER);			pZone->updateMineScan(pSlayer);//			pZone->updateInvisibleScan( pSlayer );			pZone->updateHiddenScan( pSlayer );			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pSlayer->getObjectID());			gcAddEffect.setEffectID(Effect::EFFECT_CLASS_REVEALER);			gcAddEffect.setDuration(Duration);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcAddEffect);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}void Party::shareActivation(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);			EffectActivation* pEffectActivation = new EffectActivation(pSlayer);			pEffectActivation->setDeadline(Duration);			EffectManager* pEffectManager = pSlayer->getEffectManager();			pEffectManager->addEffect(pEffectActivation);			pSlayer->setFlag(Effect::EFFECT_CLASS_ACTIVATION);			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pSlayer->getObjectID());			gcAddEffect.setEffectID(Effect::EFFECT_CLASS_ACTIVATION);			gcAddEffect.setDuration(Duration);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcAddEffect);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}void Party::shareGnomesWhisper(Creature* pCaster, int Duration, int SkillLevel )	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->isOusters());		if (pCreature != pCaster)		{			Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);            // 捞蒲飘 努贰胶甫 父甸绢 嘿牢促.			EffectGnomesWhisper* pEffect = new EffectGnomesWhisper(pOusters);			pEffect->setDeadline( Duration );			pEffect->setLevel( SkillLevel );			pOusters->addEffect(pEffect);			pOusters->setFlag(Effect::EFFECT_CLASS_GNOMES_WHISPER);			pZone->updateDetectScan( pOusters );			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pOusters->getObjectID());			gcAddEffect.setEffectID(Effect::EFFECT_CLASS_GNOMES_WHISPER);			gcAddEffect.setDuration(Duration);			pZone->broadcastPacket(pOusters->getX(), pOusters->getY(), &gcAddEffect);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}void Party::shareHolyArmor(Creature* pCaster, int DefBonus, int SkillLevel )	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)		{			int Duration = (30 + SkillLevel/2) * 10;			Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);            // 捞蒲飘 努贰胶甫 父甸绢 嘿牢促.			EffectHolyArmor* pEffect = new EffectHolyArmor(pSlayer);			pEffect->setDeadline( Duration );			pEffect->setDefBonus( DefBonus );			pSlayer->addEffect(pEffect);			pSlayer->setFlag(Effect::EFFECT_CLASS_HOLY_ARMOR);			SLAYER_RECORD prev;			pSlayer->getSlayerRecord(prev);			pSlayer->initAllStat();			pSlayer->sendModifyInfo(prev);			GCAddEffect gcAddEffect;			gcAddEffect.setObjectID(pSlayer->getObjectID());			gcAddEffect.setEffectID(Effect::EFFECT_CLASS_HOLY_ARMOR);			gcAddEffect.setDuration(Duration);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcAddEffect);		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}	bool Party::shareWaterElementalHeal(Creature* pCaster, int HealPoint)	throw (Error){	__BEGIN_TRY	Zone*       pZone = pCaster->getZone();	ZoneCoord_t cx    = pCaster->getX();	ZoneCoord_t cy    = pCaster->getY();	list<Creature*> MemberList;	bool ret = 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 != NULL);		if (pCreature->getDistance(cx, cy) <= 13)		{			MemberList.push_back(pCreature);		}

⌨️ 快捷键说明

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