📄 party.cpp
字号:
// 辟贸俊 乐绰 (版氰摹甫 棵妨临) 颇萍盔狼 府胶飘甫 啊廉柯促. 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 + -