Update of /cvsroot/wpdev/wolfpack/ai
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32025/ai
Modified Files:
ai.cpp ai.h ai_animals.cpp ai_humans.cpp ai_monsters.cpp
Log Message:
Fixes for certain crashes.
Index: ai_animals.cpp
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/ai/ai_animals.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** ai_animals.cpp 4 Aug 2004 23:17:38 -0000 1.13
--- ai_animals.cpp 10 Sep 2004 04:06:27 -0000 1.14
***************
*** 82,91 ****
if ( pPlayer && !pPlayer->free && !pPlayer->isGMorCounselor() && !pPlayer->isHidden() && !pPlayer->isInvisible() )
{
! pFleeFrom = pPlayer;
}
if ( pPlayer && m_npc->owner() == pPlayer )
return 0.0f;
}
! if ( pFleeFrom )
return 1.0f;
--- 82,92 ----
if ( pPlayer && !pPlayer->free && !pPlayer->isGMorCounselor() && !pPlayer->isHidden() && !pPlayer->isInvisible() )
{
! pFleeFromSer = pPlayer->serial();
}
if ( pPlayer && m_npc->owner() == pPlayer )
return 0.0f;
}
!
! if ( pFleeFromSer != INVALID_SERIAL )
return 1.0f;
Index: ai_humans.cpp
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/ai/ai_humans.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** ai_humans.cpp 4 Sep 2004 08:32:38 -0000 1.18
--- ai_humans.cpp 10 Sep 2004 04:06:27 -0000 1.19
***************
*** 330,334 ****
}
! Human_Guard::Human_Guard( P_NPC npc ) : AbstractAI( npc ), m_currentVictim( NULL )
{
notorietyOverride_ = 1;
--- 330,334 ----
}
! Human_Guard::Human_Guard( P_NPC npc ) : AbstractAI( npc ), m_currentVictimSer( INVALID_SERIAL )
{
notorietyOverride_ = 1;
***************
*** 346,349 ****
--- 346,355 ----
void Human_Guard::selectVictim()
{
+ P_CHAR m_currentVictim = World::instance()->findChar(m_currentVictimSer);
+
+ if (!m_currentVictim) {
+ m_currentVictimSer = INVALID_SERIAL;
+ }
+
if ( m_currentVictim )
{
***************
*** 352,359 ****
// - Target in attack range.
// - Target not innocent.
! if ( m_currentVictim->isDead() || m_currentVictim->isInnocent() )
m_currentVictim = NULL;
! else if ( !m_npc->inRange( m_currentVictim, Config::instance()->attack_distance() ) )
m_currentVictim = NULL;
}
--- 358,368 ----
// - Target in attack range.
// - Target not innocent.
! if ( m_currentVictim->isDead() || m_currentVictim->isInnocent() ) {
m_currentVictim = NULL;
! m_currentVictimSer = INVALID_SERIAL;
! } else if ( !m_npc->inRange( m_currentVictim, Config::instance()->attack_distance() ) ) {
m_currentVictim = NULL;
+ m_currentVictimSer = INVALID_SERIAL;
+ }
}
***************
*** 372,375 ****
--- 381,385 ----
m_currentVictim = pChar;
+ m_currentVictimSer = pChar->serial();
break;
}
Index: ai.h
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/ai/ai.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** ai.h 5 Sep 2004 00:22:09 -0000 1.12
--- ai.h 10 Sep 2004 04:06:27 -0000 1.13
***************
*** 37,40 ****
--- 37,41 ----
#include "../singleton.h"
#include "../typedefs.h"
+ #include "../world.h"
// library includes
***************
*** 197,205 ****
{
protected:
! Action_Flee() : Action_Wander(), pFleeFrom( NULL )
{
}
public:
! Action_Flee( P_NPC npc, AbstractAI* ai ) : Action_Wander( npc, ai ), pFleeFrom( NULL )
{
}
--- 198,206 ----
{
protected:
! Action_Flee() : Action_Wander(), pFleeFromSer( INVALID_SERIAL )
{
}
public:
! Action_Flee( P_NPC npc, AbstractAI* ai ) : Action_Wander( npc, ai ), pFleeFromSer( INVALID_SERIAL )
{
}
***************
*** 211,215 ****
}
protected:
! P_CHAR pFleeFrom;
};
--- 212,216 ----
}
protected:
! SERIAL pFleeFromSer;
};
***************
*** 315,319 ****
{
protected:
! Monster_Aggressive() : AbstractAI(), m_currentVictim( NULL )
{
notorietyOverride_ = 3;
--- 316,320 ----
{
protected:
! Monster_Aggressive() : AbstractAI(), m_currentVictimSer( INVALID_SERIAL )
{
notorietyOverride_ = 3;
***************
*** 322,326 ****
public:
! Monster_Aggressive( P_NPC npc ) : AbstractAI( npc ), m_currentVictim( NULL )
{
notorietyOverride_ = 3;
--- 323,327 ----
public:
! Monster_Aggressive( P_NPC npc ) : AbstractAI( npc ), m_currentVictimSer( INVALID_SERIAL )
{
notorietyOverride_ = 3;
***************
*** 330,342 ****
virtual void check();
! P_CHAR currentVictim() const
! {
! return m_currentVictim;
}
protected:
virtual void selectVictim() = 0;
-
unsigned int nextVictimCheck;
! P_CHAR m_currentVictim;
};
--- 331,341 ----
virtual void check();
! P_CHAR currentVictim() const {
! return World::instance()->findChar(m_currentVictimSer);
}
protected:
virtual void selectVictim() = 0;
unsigned int nextVictimCheck;
! SERIAL m_currentVictimSer;
};
***************
*** 786,790 ****
{
protected:
! Human_Guard() : AbstractAI(), m_currentVictim( NULL )
{
notorietyOverride_ = 1;
--- 785,789 ----
{
protected:
! Human_Guard() : AbstractAI(), m_currentVictimSer( INVALID_SERIAL )
{
notorietyOverride_ = 1;
***************
*** 804,813 ****
P_CHAR currentVictim() const
{
! return m_currentVictim;
}
protected:
virtual void selectVictim();
! P_CHAR m_currentVictim;
};
--- 803,812 ----
P_CHAR currentVictim() const
{
! return World::instance()->findChar(m_currentVictimSer);
}
protected:
virtual void selectVictim();
! SERIAL m_currentVictimSer;
};
Index: ai.cpp
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/ai/ai.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** ai.cpp 19 Aug 2004 05:28:21 -0000 1.27
--- ai.cpp 10 Sep 2004 04:06:27 -0000 1.28
***************
*** 688,691 ****
--- 688,698 ----
void Action_Flee::execute()
{
+ P_CHAR pFleeFrom = World::instance()->findChar(pFleeFromSer);
+
+ if (!pFleeFrom) {
+ pFleeFromSer = INVALID_SERIAL;
+ return;
+ }
+
if ( !m_npc->hasPath() )
{
***************
*** 737,741 ****
return 0.0f;
! pFleeFrom = pAttacker;
// 1.0 = Full Health, 0.0 = Dead
--- 744,748 ----
return 0.0f;
! pFleeFromSer = pAttacker->serial();
// 1.0 = Full Health, 0.0 = Dead
Index: ai_monsters.cpp
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/ai/ai_monsters.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -d -r1.20 -r1.21
*** ai_monsters.cpp 9 Sep 2004 03:19:58 -0000 1.20
--- ai_monsters.cpp 10 Sep 2004 04:06:27 -0000 1.21
***************
*** 127,132 ****
--- 127,139 ----
void Monster_Aggressive::check()
{
+ // Our current victim
+ P_CHAR m_currentVictim = World::instance()->findChar(m_currentVictimSer);
+ if (!m_currentVictim) {
+ m_currentVictim = INVALID_SERIAL;
+ }
+
if (m_currentVictim && invalidTarget(m_npc, m_currentVictim)) {
m_currentVictim = 0;
+ m_currentVictim = INVALID_SERIAL;
m_npc->fight(0);
}
***************
*** 140,143 ****
--- 147,151 ----
if (target) {
m_currentVictim = target;
+ m_currentVictimSer = target->serial();
m_npc->fight(target);
}
|