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.
}
|