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 ); } }