📄 party.cpp
字号:
} 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 + -