From 7a61eec3e050c05dd16440aed1dfa5266008f0b3 Mon Sep 17 00:00:00 2001 From: Flugente Date: Sun, 2 Nov 2014 03:11:19 +0000 Subject: [PATCH] Merged revision(s) 7634 from branches/ja2_source_official_2014: Fix: NPCs could be handcuffed. This is useless as long as there are no routines that handle their removal and interrogation. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7635 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Handle Items.cpp | 2 +- Tactical/Soldier Control.cpp | 12 +++++++++++- Tactical/Soldier Control.h | 1 + Tactical/UI Cursors.cpp | 6 ++---- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index a79cb00b..e1bb79ba 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -1248,7 +1248,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa } // Flugente: handcuffing people - if ( gGameExternalOptions.fAllowPrisonerSystem && HasItemFlag(usHandItem, HANDCUFFS ) ) + if ( gGameExternalOptions.fAllowPrisonerSystem && HasItemFlag( usHandItem, HANDCUFFS ) && pTargetSoldier && pTargetSoldier->CanBeHandcuffed( ) ) { // ATE: AI CANNOT GO THROUGH HERE! INT32 usMapPos; diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index f656cc8b..a7b963a7 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -16170,6 +16170,16 @@ BOOLEAN SOLDIERTYPE::FreePrisoner( ) return FALSE; } +// can this guy be handcuffed? +BOOLEAN SOLDIERTYPE::CanBeHandcuffed( ) +{ + // if this is an enemy that has not already been captured, and is not a NPC, we can handcuff and thus capture him + if ( this->bTeam == ENEMY_TEAM && !(this->usSoldierFlagMask & SOLDIER_POW) && this->ubProfile == NO_PROFILE ) + return TRUE; + + return FALSE; +} + // Flugente: scuba gear BOOLEAN SOLDIERTYPE::UsesScubaGear( ) { @@ -19829,7 +19839,7 @@ void SOLDIERTYPE::EVENT_SoldierHandcuffPerson( INT32 sGridNo, UINT8 ubDirection UINT8 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); - if ( ubPerson != NOBODY && MercPtrs[ubPerson]->bTeam == ENEMY_TEAM && !(MercPtrs[ubPerson]->usSoldierFlagMask & SOLDIER_POW) ) + if ( ubPerson != NOBODY && MercPtrs[ubPerson]->CanBeHandcuffed( ) ) { // we found someone we can handcuff SOLDIERTYPE* pSoldier = MercPtrs[ubPerson]; diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 4dab51b9..fa886f20 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1769,6 +1769,7 @@ public: BOOLEAN CanProcessPrisoners(); UINT32 GetSurrenderStrength(); BOOLEAN FreePrisoner(); // used for an enemy liberating fellow prisoners + BOOLEAN CanBeHandcuffed(); // can this guy be handcuffed? // Flugente: scuba gear BOOLEAN UsesScubaGear(); diff --git a/Tactical/UI Cursors.cpp b/Tactical/UI Cursors.cpp index 4590c594..6eab2c37 100644 --- a/Tactical/UI Cursors.cpp +++ b/Tactical/UI Cursors.cpp @@ -2253,11 +2253,9 @@ UINT8 HandleHandcuffCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCurso { // is there a person here? UINT8 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); - if ( usSoldierIndex != NOBODY ) + if ( usSoldierIndex != NOBODY && MercPtrs[usSoldierIndex]->CanBeHandcuffed( ) ) { - // no handcuffing if the guy is already caught... - if ( !(MercPtrs[usSoldierIndex]->usSoldierFlagMask & SOLDIER_POW) ) - return( HANDCUFF_GREY_UICURSOR ); + return( HANDCUFF_GREY_UICURSOR ); } }