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