[wpdev-commits] wolfpack/ai ai_mage.cpp,1.3,1.4
Brought to you by:
rip,
thiagocorrea
From: Sebastian H. <dar...@us...> - 2004-10-16 19:43:05
|
Update of /cvsroot/wpdev/wolfpack/ai In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18774/ai Modified Files: ai_mage.cpp Log Message: fixes Index: ai_mage.cpp =================================================================== RCS file: /cvsroot/wpdev/wolfpack/ai/ai_mage.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ai_mage.cpp 16 Oct 2004 19:09:14 -0000 1.3 --- ai_mage.cpp 16 Oct 2004 19:42:56 -0000 1.4 *************** *** 5,8 **** --- 5,9 ---- #include "../combat.h" #include "../serverconfig.h" + #include "../walking.h" /* *************** *** 297,305 **** virtual float preCondition() { ! return Monster_Aggr_Wander::preCondition(); } virtual void execute() { ! Monster_Aggr_Wander::execute(); } --- 298,360 ---- virtual float preCondition() { ! Monster_Aggressive *ai = static_cast<Monster_Aggressive*>(m_ai); ! ! if (ai->currentVictim()) { ! return 1.0f; // Always keep a distance ! } else { ! return 0.0f; ! } } virtual void execute() { ! P_CHAR currentVictim = static_cast<Monster_Aggressive*>(m_ai)->currentVictim(); ! ! if (!currentVictim || m_npc->isFrozen()) ! return; ! ! unsigned int distance = m_npc->dist(currentVictim); ! ! if (distance >= 10 && distance <= 12) { ! return; // Right distance ! } else if (distance > 10) { ! movePath(currentVictim->pos(), true); ! } else if (distance < 10) { ! // Calculate the opposing direction and get away (at least try it) ! unsigned char direction = (m_npc->pos().direction(currentVictim->pos()) + 4) % 8; ! ! if (direction != m_npc->direction()) { ! if (!Movement::instance()->Walking(m_npc, direction|0x80, 0xFF)) { ! return; ! } ! } ! ! if (!Movement::instance()->Walking(m_npc, direction|0x80, 0xFF)) { ! direction = (direction + 1) % 8; ! ! if (direction != m_npc->direction()) { ! if (!Movement::instance()->Walking(m_npc, direction|0x80, 0xFF)) { ! return; ! } ! } ! ! if (!Movement::instance()->Walking(m_npc, direction|0x80, 0xFF)) { ! direction = (direction == 1) ? 7 : (direction - 2); ! ! if (direction != m_npc->direction()) { ! if (!Movement::instance()->Walking(m_npc, direction|0x80, 0xFF)) { ! return; ! } ! } ! ! if (!Movement::instance()->Walking(m_npc, direction|0x80, 0xFF)) { ! return; // We tried everything but failed ! } ! } ! } ! } ! } ! ! virtual float postCondition() { ! return 1.0f; // This action doesn't last. } |