monstermanager.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 2,206 行 · 第 1/5 页
CPP
2,206 行
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void MonsterManager::deleteCreature (ObjectID_t creatureID) throw ()//NoSuchElementException , Error){ __BEGIN_TRY // 农府贸 秦浆甘俊 弊繁 OID 甫 啊柳 阁胶磐啊 粮犁窍绰瘤 眉农茄促. hash_map<ObjectID_t , Creature* >::iterator itr = m_Creatures.find(creatureID); if (itr == m_Creatures.end()) { cerr << "MonsterManager::deleteCreature() : NoSuchElementException" << endl; // 捞巴档 寇何俊辑 力措肺 贸府 救登绊 乐绰芭 鞍促. // by sigi. 2002.5.9 //throw NoSuchElementException("弊繁 ObjectID甫 啊柳 阁胶磐绰 粮犁窍瘤 臼嚼聪促."); return; } Monster* pMonster = dynamic_cast<Monster*>(itr->second); // 农府贸 秦浆甘狼 秦寸 畴靛甫 昏力茄促. // 窃荐 场俊 乐带吧 咯扁肺 棵啡促. by sigi // 官焊具~ itr 曼炼绰 场郴绊 畴靛甫 瘤况具隆~. 2002.10.12 by bezz m_Creatures.erase(itr); // event monster绰 MonsterCounter尔 包拌绝促. by sigi .2002.10.14 if (m_pEventMonsterInfo!=NULL && pMonster->isEventMonster()) { uint index = pMonster->getEventMonsterIndex(); if (index < m_pEventMonsterInfo->size()) { EventMonsterInfo& info = (*m_pEventMonsterInfo)[index]; info.bExist = false; //cout << "[MM] delete EventMonster: [" << pMonster->getEventMonsterIndex() // << "] = " << info.monsterType << endl; } return; } // 阁胶磐 墨款磐俊 弊繁 阁胶磐 鸥涝捞 粮犁窍绰瘤 眉农茄促. hash_map< SpriteType_t , MonsterCounter *>::iterator itr2 = m_Monsters.find(pMonster->getSpriteType()); if (itr2 == m_Monsters.end()) { cerr << "MonsterManager::deleteCreature() : NoSuchElementException" << endl; //throw NoSuchElementException("弊繁 SpriteType阑 啊柳 阁胶磐绰 粮犁窍瘤 臼嚼聪促."); } else { // 阁胶磐狼 箭磊甫 临牢促. itr2->second->deleteMonster(); } __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 傈眉狼 泪犁利牢 利栏肺 牢侥茄促. 2002.7.22 by sigi// pAttackedMonster甫 pCreature啊 傍拜茄 版快俊////////////////////////////////////////////////////////////////////////////////void MonsterManager::addPotentialEnemy(Monster* pAttackedMonster, Creature* pCreature) throw(Error){ __BEGIN_TRY //cout << "MonsterManager::addPotentialEnemy()" << endl; hash_map< ObjectID_t , Creature* >::const_iterator itr = m_Creatures.begin(); for (; itr!=m_Creatures.end(); itr++) { Creature* pMonsterCreature = itr->second; // 锭赴 仇阑 杭荐 乐绰 芭府咯具 茄促. Distance_t dist = pMonsterCreature->getDistance(pCreature->getX(), pCreature->getY()); if (dist <= pMonsterCreature->getSight() // 磊脚篮 促弗 内靛俊辑 眉农茄促. && pMonsterCreature!=pAttackedMonster) { Monster* pMonster = dynamic_cast<Monster*>(pMonsterCreature); //cout << "addPotentialEnemy: " << pMonster->getName().c_str() << endl; pMonster->addPotentialEnemy( pCreature ); } } __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 傈眉狼 利栏肺 牢侥茄促. 2002.7.22 by sigi// pAttackedMonster甫 pCreature啊 傍拜茄 版快俊////////////////////////////////////////////////////////////////////////////////void MonsterManager::addEnemy(Monster* pAttackedMonster, Creature* pCreature) throw(Error){ __BEGIN_TRY //cout << "MonsterManager::addEnemy()" << endl; hash_map< ObjectID_t , Creature* >::const_iterator itr = m_Creatures.begin(); for (; itr!=m_Creatures.end(); itr++) { Creature* pMonsterCreature = itr->second; // 锭赴 仇阑 杭荐 乐绰 芭府咯具 茄促. Distance_t dist = pMonsterCreature->getDistance(pCreature->getX(), pCreature->getY()); if (dist <= pMonsterCreature->getSight() // 磊脚篮 促弗 内靛俊辑 眉农茄促. && pMonsterCreature!=pAttackedMonster) { Monster* pMonster = dynamic_cast<Monster*>(pMonsterCreature); //cout << "addEnemy: " << pMonster->getName().c_str() << endl; pMonster->addEnemy( pCreature ); } } __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 农府贸 概聪历俊 辆加等 阁胶磐甸狼 AI俊 狼茄 咀记阑 角青茄促.////////////////////////////////////////////////////////////////////////////////void MonsterManager::processCreatures () throw (Error){ __BEGIN_TRY// __BEGIN_PROFILE_MONSTER("MM_PROCESS_CREATURES"); Timeval currentTime; getCurrentTime(currentTime); try { hash_map< ObjectID_t , Creature* >::iterator before = m_Creatures.end(); hash_map< ObjectID_t , Creature* >::iterator current = m_Creatures.begin(); while (current != m_Creatures.end()) { Creature* pCreature = current->second; Assert(pCreature != NULL); __BEGIN_PROFILE_MONSTER("MM_EFFECTMANAGER"); pCreature->getEffectManager()->heartbeat(currentTime); __END_PROFILE_MONSTER("MM_EFFECTMANAGER"); if (pCreature->isAlive()) { /* Monster* pMonster = dynamic_cast<Monster*>(pCreature); if (pMonster->isEnemyLimit()) { Zone* pZone = pMonster->getZone(); ZoneCoord_t cx = pMonster->getX(); ZoneCoord_t cy = pMonster->getY(); ObjectID_t monsterID = pMonster->getObjectID(); hash_map< SpriteType_t , MonsterCounter *>::iterator itr = m_Monsters.find(pMonster->getSpriteType()); if (itr == m_Monsters.end()) { //cerr << "MonsterManager::processCreatures() : NoSuchElementException" << endl; //throw NoSuchElementException("弊繁 SpriteType阑 啊柳 阁胶磐绰 粮犁窍瘤 臼嚼聪促."); } else { // 阁胶磐狼 箭磊甫 临牢促. itr->second->deleteMonster(); } // 鸥老苞 阁胶磐 概聪历俊辑 农府贸甫 昏力茄促. Tile & tile = pZone->getTile(cx , cy); tile.deleteCreature(monsterID); SAFE_DELETE(pMonster); if (before == m_Creatures.end()) { m_Creatures.erase(current); current = m_Creatures.begin(); } else { m_Creatures.erase(current); current = before; current ++; } GCDeleteObject gcDeleteObject; gcDeleteObject.setObjectID(monsterID); pZone->broadcastPacket(cx, cy , &gcDeleteObject); } */ __BEGIN_PROFILE_MONSTER("MM_CREATURE_ACT"); pCreature->act(currentTime); before = current ++; __END_PROFILE_MONSTER("MM_CREATURE_ACT"); } else { Monster* pMonster = dynamic_cast<Monster*>(pCreature); Assert(pMonster != NULL); /*if ( pMonster->getMonsterType() == 371 || pMonster->getMonsterType() == 372 || pMonster->getMonsterType() == 373 || pMonster->getMonsterType() == 374 || pMonster->getMonsterType() == 375 || pMonster->getMonsterType() == 376) return; else {*/ if (pMonster->isEventMonster()) // by sigi. 2002.10.14 { if (m_pEventMonsterInfo!=NULL) { uint index = pMonster->getEventMonsterIndex(); if (index < m_pEventMonsterInfo->size()) { EventMonsterInfo& info = (*m_pEventMonsterInfo)[index]; info.bExist = false; //cout << "[MM] dead EventMonster: [" << pMonster->getEventMonsterIndex() // << "] = " << info.monsterType << endl; } } } else { // 阁胶磐 墨款磐甫 窍唱 临牢促. hash_map< SpriteType_t , MonsterCounter *>::iterator itr = m_Monsters.find(pMonster->getSpriteType()); if (itr == m_Monsters.end()) { //cerr << "MonsterManager::processCreatures() : NoSuchElementException" << endl; //throw NoSuchElementException("弊繁 SpriteType阑 啊柳 阁胶磐绰 粮犁窍瘤 臼嚼聪促."); } else { // 阁胶磐狼 箭磊甫 临牢促. itr->second->deleteMonster(); } } __BEGIN_PROFILE_MONSTER("MM_CREATURE_DEADACTION"); // 刚历 阁胶磐甫 磷捞扁 傈俊 付瘤阜 咀记阑 秒窍霸 茄促. pMonster->actDeadAction(); __END_PROFILE_MONSTER("MM_CREATURE_DEADACTION"); __BEGIN_PROFILE_MONSTER("MM_KILL_CREATURE"); // 阁胶磐甫 粮俊辑 力芭窍绊, 宏肺靛某胶飘茄促. killCreature(pMonster); __END_PROFILE_MONSTER("MM_KILL_CREATURE"); // 阁胶磐俊 措茄 农府贸狼 秦浆甘狼 畴靛甫 昏力茄促. // 肋给 昏力且 版快, 楷搬捞 柄龙 快妨啊 乐栏聪 林狼且 巴. if (before == m_Creatures.end()) { m_Creatures.erase(current); current = m_Creatures.begin(); } else { m_Creatures.erase(current); current = before; current ++; } //} } } // 阁胶磐 犁积 内靛俊 findPosition捞扼绰 公茄 风橇 窃荐啊 窍唱 乐促. // 30檬 悼救 咯矾 付府狼 阁胶磐啊 磷菌阑 锭, 捞 阁胶磐甸阑 府哩且 磊府甫 茫绰单 // 吧府绰 矫埃捞 辨绢龙 荐啊 乐促. 弊府绊 捞 矫埃捞 辨绢瘤搁 发捞 // 惯积茄促. 乞闭利栏肺绰 粱 蠢妨瘤歹扼档, 泛阑 临捞扁 困秦辑 // 府哩俊 措茄 八荤甫 概畔 窍档废 函版茄促. -- 辫己刮 // 老沥 林扁付促 阁胶磐 箭磊甫 犬牢秦辑 府哩矫难霖促. if (m_RegenTime < currentTime) { __BEGIN_PROFILE_MONSTER("MM_REGENERATE_CREATURES"); regenerateCreatures(); m_RegenTime.tv_sec = currentTime.tv_sec + 5; // 5檬 饶 府哩 m_RegenTime.tv_usec = currentTime.tv_usec; __END_PROFILE_MONSTER("MM_REGENERATE_CREATURES"); } // 捞芭 恐 林籍贸府 救登绢乐菌瘤.. by sigi. 2002.5.3 //regenerateCreatures(); } catch (Throwable & t) { filelog("MonsterManagerBug.log", "ProcessCreatureBug : %s", t.toString().c_str()); //cerr << t.toString() << endl; }// __END_PROFILE_MONSTER("MM_PROCESS_CREATURES"); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 阁胶磐狼 箭磊啊 临绢甸搁 阁胶磐甫 犁积己茄促.////////////////////////////////////////////////////////////////////////////////void MonsterManager::regenerateCreatures () throw (Error){ __BEGIN_TRY __BEGIN_DEBUG // 傈里 吝俊 阁胶磐 府哩 救登霸.. if (m_pZone->isHolyLand()) { // 辆练 傈里 吝 if (g_pWarSystem->hasActiveRaceWar()) return; // 辨靛 傈里 吝.. if (m_CastleZoneID!=0 && g_pWarSystem->hasCastleActiveWar(m_CastleZoneID)) { CastleInfo* pCastleInfo = g_pCastleInfoManager->getCastleInfo( m_CastleZoneID ); if (pCastleInfo!=NULL) { GuildID_t OwnerGuildID = pCastleInfo->getGuildID(); // 傍侩己捞 酒囱 版快绰 府哩 救茄促.==傍侩己篮 府哩 茄促. if (OwnerGuildID!=SlayerCommon && OwnerGuildID!=VampireCommon && OwnerGuildID!=OustersCommon ) { return; } } } } // 饭骇喊 傈里阑 窍绰 吝捞扼搁 -_-;; ZoneID_t zoneID = m_pZone->getZoneID(); if (zoneID == 1131 || zoneID == 1132 || zoneID == 1133 || zoneID == 1134) { if (!g_pSweeperBonusManager->isAble( zoneID ) ) return; } hash_map<SpriteType_t, MonsterCounter*>::iterator itr = m_Monsters.begin(); for (; itr != m_Monsters.end() ; itr ++) { MonsterCounter* pCounter = itr->second; // 阁胶磐啊 临绢甸菌阑 版快... while (pCounter->getCurrentMonsters() < pCounter->getMaxMonsters()) { SpriteType_t SpriteType = itr->first; MonsterType_t monsterType = 0; vector<MonsterType_t> RegenVector = g_pMonsterInfoManager->getMonsterTypeBySprite(SpriteType); Assert(RegenVector.size() > 0); monsterType = RegenVector[rand()%RegenVector.size()]; // 粮狼 后 谅钎甫 茫酒辰促. ZoneCoord_t x, y; if (!findPosition(monsterType, x, y)) { Assert(false); return; } // 阁胶磐 按眉甫 积己窍绊 瓷仿摹 殿阑 檬扁拳茄促. Monster* pMonster = new Monster(monsterType); Assert(pMonster != NULL); ///////////////////////////////////////////////////////////////////// // 阁胶磐甫 眠啊窍绰 矫痢俊辑 捞亥飘 阁胶磐牢瘤 八荤甫 茄促. /// 7岿 1老磊肺 昏力 (岿靛呐 捞亥飘 场) /* if(rand()%g_pVariableManager->getEventRatio()==0 && g_pVariableManager->getEventActivate() == 1 ) { pMonster->setEventMonsterFlag(true); string MonsterName = g_pMonsterNameManager->getRandomName(pMonster, true); pMonster->setName(MonsterName); //cout << "捞亥飘 阁胶磐 捞抚: " << MonsterName; } */ ///////////////////////////////////////////////////////////////////// try { m_pZone->addCreature(pMonster , x , y , Directions(rand()%8)); } catch (EmptyTileNotExistException&) { //cerr << "MonsterManager::processCreatures() : 磊府啊 绝匙?" << endl; SAFE_DELETE(pMonster); } } } if (g_pVariableManager->isActiveChiefMonster() && m_pEventMonsterInfo!=NULL) { Timeval currentTime; getCurrentTime( currentTime ); //cout << "regenCheck [" << m_pZone->getZoneID() <<"] EventMonsterNum = " // << m_pEventMonsterInfo->size() << " : "; for (uint i=0; i<m_pEventMonsterInfo->size(); i++) { EventMonsterInfo& info = (*m_pEventMonsterInfo)[i]; if (!info.bExist
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?