📄 monster.cpp
字号:
} __END_PROFILE_MONSTER("M_UNBURROW"); } // 利捞 绝阑 锭俊绰 甘狼 吝埃阑 氢秦 框流牢促. // 付胶磐啊 酒囱 版快俊.. // 酒淬狼 己瘤 吝居 甘捞 捞惑窍霸 积败辑 酒淬狼 己瘤 吝居 甘档 救茄促. else if (!isMaster() && m_pZone->getZoneID() != 72) { // 阁胶磐狼 鸥涝捞 Relic牢 版快绰 框流捞瘤 臼绰促. if (m_RelicIndex==-1) { __BEGIN_PROFILE_MONSTER("M_MOVE_CENTER"); POINT pt(getX(), getY()); VSRect* pOuterRect = m_pZone->getOuterRect(); VSRect* pInnerRect = m_pZone->getInnerRect(); VSRect* pCoreRect = m_pZone->getCoreRect(); // 救率何磐 八荤秦 唱埃促. if (pCoreRect->ptInRect(pt) || pInnerRect->ptInRect(pt)) { // 官冰率俊 乐促搁 罚待栏肺 框流牢促. uint diceResult = rand() & 0x0000007F; //%100; if (diceResult < 6) // 5 { uint direction = rand() & 0x00000007; //% 8; ZoneCoord_t nx = pt.x + dirMoveMask[direction].x; ZoneCoord_t ny = pt.y + dirMoveMask[direction].y; // 1. 促澜 谅钎啊 喉钒欧捞 登绢乐瘤 臼酒具 窍绊, // 2. 救傈 瘤措啊 酒聪扼搁, if (canMove(nx, ny) && !(m_pZone->getZoneLevel(nx, ny) & SAFE_ZONE)) { m_pZone->moveCreature(this, nx, ny, direction); } } } else if (pOuterRect->ptInRect(pt)) { // 力老 官冰率俊 乐促搁, 甘狼 吝居阑 氢秦 框流牢促. m_pBrain->move(m_pZone->getWidth()>>1, m_pZone->getHeight()>>1); } if ( ( m_bScanEnemy || isFlag(Effect::EFFECT_CLASS_HALLUCINATION) ) && currentTime > m_NextScanTurn ) { m_pZone->monsterScan(this, m_X, m_Y, m_Dir); // 5檬 饶 促矫 八祸 m_NextScanTurn.tv_sec = currentTime.tv_sec + 5; m_NextScanTurn.tv_usec = currentTime.tv_usec; } __END_PROFILE_MONSTER("M_MOVE_CENTER"); } // 促澜 畔阑 瘤沥茄促. // 泅犁 阁胶磐甸篮 1檬俊 1鸥老父 框流捞扁 东矫肺.. =_=; m_pBrain->setDelay(currentTime); } } //---------------------------------------------------------------------- // HP甫 府哩茄促. // fucking //---------------------------------------------------------------------- __BEGIN_PROFILE_MONSTER("M_REGEN_HP"); int statSum = m_STR + m_DEX + m_INT; if (rand()%600 < statSum && isAlive()) m_HP[ATTR_CURRENT] =(HP_t)min((int)m_HP[ATTR_CURRENT]+1, (int)m_HP[ATTR_MAX]); if ( m_HP[ATTR_CURRENT] == m_HP[ATTR_MAX] && isFlag( Effect::EFFECT_CLASS_BLOOD_DRAIN ) ) { removeFlag( Effect::EFFECT_CLASS_BLOOD_DRAIN ); } __END_PROFILE_MONSTER("M_REGEN_HP"); __END_DEBUG __END_CATCH}void Monster::actDeadAction(void) throw (Error){ __BEGIN_TRY // 弊悼救 肺弊酒眶窍芭唱 救傈瘤措 救栏肺 // 甸绢埃 PC啊 乐栏搁 利 府胶飘俊辑 昏力甫 茄促. verifyEnemies(); // AI啊 乐促搁.. if (m_pBrain!=NULL) { if (hasEnemy()) { Creature* pEnemy = getPrimaryEnemy(); //Assert(pEnemy != NULL); if (pEnemy!=NULL) m_pBrain->actDeadAction(pEnemy); } } else if ( getMonsterType() == GROUND_ELEMENTAL_TYPE ) { int oX, oY; int X = getX(); int Y = getY(); for ( oX = X - 2 ; oX <= X + 2 ; ++oX ) for ( oY = Y - 2 ; oY <= Y + 2 ; ++oY ) { if ( !isValidZoneCoord( getZone(), oX, oY ) ) continue; Effect* pEffect = getZone()->getTile(oX,oY).getEffect( Effect::EFFECT_CLASS_GROUND_ELEMENTAL_AURA ); if ( pEffect != NULL ) { getZone()->deleteEffect( pEffect->getObjectID() ); } } } __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 漂沥 农府贸甫 利 府胶飘俊 眠啊茄促.//// 眠啊且 锭, 阁胶磐狼 AttackOrder 啊 鉴辑俊 康氢阑 固模促.//// PC 啊 捞悼且 锭, 林函俊 AGGRESSIVE 阁胶磐啊 乐阑 版快, 弊 阁胶磐俊 // 措秦辑 addEnemy() 甫 龋免秦霖促. 肚绰 PC啊 阁胶磐甫 傍拜且 锭, 弊// 阁胶磐俊 措秦辑 addEnemy()甫 龋免秦霖促. (捞锭 己氢苞绰 公包窍促.)// PC啊 阁胶磐甫 傍拜且 锭, 林函狼 阁胶磐甸俊霸档 addEnemy()甫 龋免秦霖促.//////////////////////////////////////////////////////////////////////////////void Monster::addEnemy (Creature* pCreature) throw (Error){ __BEGIN_TRY __BEGIN_DEBUG Assert(pCreature != NULL); // 磊脚捞 酒聪搁.. by sigi. 2002.9.7 if (this==pCreature || !isRealEnemy(pCreature)) return; // peace俊 吧妨乐促搁.. // addEnemy()绰 锭啡阑锭 阂府绰 窃荐捞骨肺.. pece甫 力芭茄促. if (isFlag(Effect::EFFECT_CLASS_PEACE)) { Effect* pEffect = m_pEffectManager->findEffect( Effect::EFFECT_CLASS_PEACE ); EffectPeace* pEffectPeace = dynamic_cast<EffectPeace*>(pEffect); // peace牢 局扼搁 peace 力芭 if (pCreature->getObjectID()==pEffectPeace->getPeaceCreatureID()) { pEffect->unaffect(this); m_pEffectManager->deleteEffect( Effect::EFFECT_CLASS_PEACE ); } } try { switch (getAttackOrder()) { // 力老 刚历 锭赴 仇何磐 傍拜窍骨肺, // 啊厘 付瘤阜俊 眠啊登绢具 茄促. case ATTACK_FIRST : { // 扁撅窍绊 乐绰 利狼 箭磊啊 磊脚狼 弥措扁撅俺荐焊促 累绊, // 磊脚捞 捞固 扁撅登绊 乐瘤 臼绰促搁, enemy list狼 盖 付瘤阜俊 眠啊茄促. list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID()); if (itr == m_Enemies.end()) { m_Enemies.push_back(pCreature->getObjectID()); if (m_Enemies.size() > getMaxEnemies()) { m_Enemies.pop_back(); } } } break; // 力老 唱吝俊 锭赴 仇何磐 傍拜窍骨肺, // 啊厘 菊俊 眠啊登绢具 茄促. case ATTACK_LAST : { // 扁撅窍绊 乐绰 利狼 箭磊啊 磊脚狼 弥措扁撅俺荐焊促 累绊, // 磊脚捞 捞固 扁撅登绊 乐瘤 臼绰促搁, enemy list狼 盖 菊俊 眠啊茄促. list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID()); if (itr == m_Enemies.end()) { m_Enemies.push_front(pCreature->getObjectID()); // < 甫 > 肺 官插促. by sigi. 2002.10.7 if (m_Enemies.size() > getMaxEnemies()) { m_Enemies.pop_back(); } } } break; // 力老 距茄 仇何磐 傍拜 case ATTACK_WEAKEST : { // 磊脚捞 捞固 扁撅登绊 乐瘤 臼促搁... list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID()); if (itr == m_Enemies.end()) { if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); itr = find_if (m_Enemies.begin() , m_Enemies.end() , StrongerSlayer(m_pZone , pSlayer->getSkillDomainLevelSum())); if (itr == m_Enemies.end()) m_Enemies.push_front(pSlayer->getObjectID()); else m_Enemies.insert(itr , pSlayer->getObjectID()); } else if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); itr = find_if (m_Enemies.begin() , m_Enemies.end() , StrongerVampire(m_pZone , pVampire->getLevel())); if (itr == m_Enemies.end()) m_Enemies.push_back(pVampire->getObjectID()); else m_Enemies.insert(itr , pVampire->getObjectID()); } else if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); itr = find_if (m_Enemies.begin() , m_Enemies.end() , StrongerOusters(m_pZone , pOusters->getLevel())); if (itr == m_Enemies.end()) m_Enemies.push_back(pOusters->getObjectID()); else m_Enemies.insert(itr , pOusters->getObjectID()); } // 犁固伙酒 -_-; 2002.7.22 by sigi else if (pCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); itr = find_if (m_Enemies.begin() , m_Enemies.end() , StrongerMonster(m_pZone , pMonster->getLevel())); if (itr == m_Enemies.end()) m_Enemies.push_back(pMonster->getObjectID()); else m_Enemies.insert(itr , pMonster->getObjectID()); // 傈眉狼 利栏肺 牢侥矫难滚赴促. // 何窍啊 缴秦辑 老窜 猾促. //m_pZone->getMonsterManager()->addPotentialEnemy(this, pCreature); } // 货肺 眠啊等 搬苞, 沥盔阑 檬苞茄 版快 盖 付瘤阜 仇阑 昏力茄促. if (!m_Enemies.empty() && m_Enemies.size() > getMaxEnemies()) m_Enemies.pop_back(); } } break; // 力老 碍茄 仇何磐 傍拜 case ATTACK_STRONGEST : { // 磊脚捞 捞固 扁撅登绊 乐瘤 臼促搁... list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID()); if (itr == m_Enemies.end()) { if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); itr = find_if (m_Enemies.begin() , m_Enemies.end() , WeakerSlayer(m_pZone , pSlayer->getSkillDomainLevelSum())); if (itr == m_Enemies.end()) m_Enemies.push_front(pSlayer->getObjectID()); else m_Enemies.insert(itr , pSlayer->getObjectID()); } else if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); itr = find_if (m_Enemies.begin() , m_Enemies.end() , WeakerVampire(m_pZone , pVampire->getLevel())); if (itr == m_Enemies.end()) m_Enemies.push_back(pVampire->getObjectID()); else m_Enemies.insert(itr , pVampire->getObjectID()); } else if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); itr = find_if (m_Enemies.begin() , m_Enemies.end() , WeakerOusters(m_pZone , pOusters->getLevel())); if (itr == m_Enemies.end()) m_Enemies.push_back(pOusters->getObjectID()); else m_Enemies.insert(itr , pOusters->getObjectID()); } // 犁固伙酒 -_-; 2002.7.22 by sigi else if (pCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); itr = find_if (m_Enemies.begin() , m_Enemies.end() , WeakerMonster(m_pZone , pMonster->getLevel())); if (itr == m_Enemies.end()) m_Enemies.push_back(pMonster->getObjectID()); else m_Enemies.insert(itr , pMonster->getObjectID()); // 傈眉狼 利栏肺 牢侥矫难滚赴促. // 何窍啊 缴秦辑 老窜 猾促. //m_pZone->getMonsterManager()->addPotentialEnemy(this, pCreature); } // 货肺 眠啊等 搬苞, 沥盔阑 檬苞茄 版快 盖 付瘤阜 仇阑 昏力茄促. if (!m_Enemies.empty() && m_Enemies.size() > getMaxEnemies()) m_Enemies.pop_back(); } } break; // 力老 啊鳖款 仇 何磐 傍拜 // 利苞狼 芭府绰 拌加 函窍扁 锭巩俊, 郴何 府胶飘甫 拌加 // 函版窍绰 措脚 利阑 绊甫 锭, 啊厘 啊滨芭唱 刚 利阑 // 府畔窍档废 秦具 茄促. case ATTACK_CLOSEST : { // 磊脚捞 捞固 扁撅登绊 乐瘤 臼促搁... list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID()); if (itr == m_Enemies.end()) { // 老窜 眠啊茄促. m_Enemies.push_back(pCreature->getObjectID()); // 沥盔 檬苞老 版快 if (m_Enemies.size() > getMaxEnemies()) { // 穿啊 啊厘 芭府啊 刚瘤 舅酒辰促. list<ObjectID_t>::iterator farest = m_Enemies.end(); Distance_t dist = 0; for (itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) { Creature* pEnemy = NULL; /* try { pEnemy = m_pZone->getCreature(*itr); } catch (NoSuchElementException& nsee) { //cerr << nsee.toString() << endl; pEnemy = NULL; } */ // NoSuch..力芭. by sigi. 2002.5.2 pEnemy = m_pZone->getCreature(*itr); // zone俊 绝绰 版快.. 力芭窍搁 等促. by sigi. 2002.5.3 if (pEnemy == NULL) { dist = 255; farest = itr; // 歹 捞惑 八荤秦杭 鞘夸啊 绝促. break; } else { Distance_t curDist = getDistance(pEnemy->getX() , pEnemy->getY()); if (dist < curDist) { dist = curDist; farest = itr; } } } // 沥盔 檬苞捞骨肺, 啊厘 刚仇捞 窍唱绰 唱客具 茄寸. //Assert(farest != m_Enemies.end()); // 啊厘 芭府啊 刚 仇阑 昏力茄促. if (farest!=m_Enemies.end()) m_Enemies.erase(farest); } } } break; // 力老 刚 仇 何磐 傍拜 case ATTACK_FAREST : { // 磊脚捞 捞固 扁撅登绊 乐瘤 臼促搁... list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID()); if (itr == m_Enemies.end()) { // 老窜 眠啊茄促. m_Enemies.push_back(pCreature->getObjectID()); // 沥盔 檬苞老 版快 if (m_Enemies.size() > getMaxEnemies()) { // 穿啊 啊厘 芭府啊 啊鳖款瘤 舅酒辰促. list<ObjectID_t>::iterator closest = m_Enemies.end(); Distance_t dist = 255; for (itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) { Creature* pEnemy = NULL; /* try { pEnemy = m_pZone->getCreature(*itr); } catch (NoSuchElementException& nsee) { //cerr << nsee.toString() << endl; pEnemy = NULL; } */ // NoSuch..力芭. by sigi. 2002.5.2 pEnemy = m_pZone->getCreature(*itr); // zone俊 绝绰 版快.. 力芭窍搁 等促. by sigi. 2002.5.3 if (pEnemy == NULL) { dist = 0; closest = itr; // 歹 捞惑 八荤秦杭 鞘夸啊 绝促. break; } else { Distance_t curDist = getDistance(pEnemy->getX() , pEnemy->getY()); if (dist > curDist) { dist = curDist; closest = itr; } } } // 啊厘 芭府啊 啊鳖款 仇阑 昏力茄促. if (closest!=m_Enemies.end()) m_Enemies.erase(closest); } } } break; // 傈荤 刚历 傍拜 case ATTACK_FIGHTER : { throw UnsupportedError(); // 老窜 眠啊茄促. m_Enemies.push_back(pCreature->getObjectID()); // 沥盔 檬苞老 版快 if (m_Enemies.size() > getMaxEnemies()) { // 公荤 胶懦捞 漂洒 臭篮 浇饭捞绢啊 酒聪扼搁 绝浚促. for (list<ObjectID_t>::iterator itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) { //Creature* pCreature = m_pZone->getCreature(*itr); } } } break; // 己流磊 刚历 傍拜 case ATTACK_PRIEST : { throw UnsupportedError(); // 老窜 眠啊茄促. m_Enemies.push_back(pCreature->getObjectID()); // 沥盔 檬苞老 版快 if (m_Enemies.size() > getMaxEnemies()) { // 己流磊 付过捞 漂洒 臭篮 浇饭捞绢啊 酒聪扼搁 绝浚促. for (list<ObjectID_t>::iterator itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) { //Creature* pCreature = m_pZone->getCreature(*itr); } } } break; // 扒呈 刚历 傍拜 case ATTACK_GUNNER : { throw UnsupportedError(); // 老窜 眠啊茄促. m_Enemies.push_back(pCreature->getObjectID()); // 沥盔 檬苞老 版快 if (m_Enemies.size() > getMaxEnemies()) { // 扒呈 胶懦捞 漂洒 臭篮 浇饭捞绢啊 酒聪扼搁 绝浚促. for (list<ObjectID_t>::iterator itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) { //Creature* pCreature = m_pZone->getCreature(*itr); } } } break; // 泅犁 盔牢阑 舅 荐啊 绝绢辑 老窜 力老 困狼 鸥涝栏肺 阜酒初绰促. default : { // 扁撅窍绊 乐绰 利狼 箭磊啊 磊脚狼 弥措扁撅俺荐焊促 累绊, // 磊脚捞 捞固 扁撅登绊 乐瘤 臼绰促搁, enemy list狼 盖 付瘤阜俊 眠啊茄促. list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID()); if (itr == m_Enemies.end()) { m_Enemies.push_back(pCreature->getObjectID()); if (m_Enemies.size() > getMaxEnemies()) { m_Enemies.pop_back(); } } } break; //throw Error("illegal attack order"); } } catch (Throwable & t) { //cerr << t.toString() << endl; } __END_DEBUG __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 泪犁利牢 利阑 府胶飘狼 盖 第俊 眠啊茄促.// addEnemy()啊 流立利牢 傍拜矫俊 汲沥登绰 馆搁, addPotentialEnemy()绰// PC狼 捞悼, 肺弊牢矫 汲沥等促.//////////////////////////////////////////////////////////////////////////////void Monster::addPotentialEnemy (Creature* pCreature) throw (Error){ __BEGIN_TRY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -