From 265fd3bc617f2d74ba73bc3c04fee58b260f93b3 Mon Sep 17 00:00:00 2001 From: Flugente Date: Wed, 1 May 2013 21:23:55 +0000 Subject: [PATCH] Fix: EPC inventory cannot be accessed, and Nails does not allow to take his vest git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6048 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Handle Items.cpp | 6 +++++- Tactical/Overhead.cpp | 10 +++++++++- Tactical/Overhead.h | 3 +++ Tactical/Turn Based Input.cpp | 2 +- Tactical/Weapons.cpp | 4 ++-- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index c986afbc..638c58e4 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -6294,7 +6294,7 @@ UINT8 StealItems(SOLDIERTYPE* pSoldier,SOLDIERTYPE* pOpponent, UINT8* ubIndexRet else { // Flugente: if we are on the same team, allow guaranteed full access - if ( gGameExternalOptions.fAccessOtherMercInventories && pOpponent->bTeam == pSoldier->bTeam && pOpponent->ubID != pSoldier->ubID ) + if ( AllowedToStealFromTeamMate(pSoldier->ubID, pOpponent->ubID) ) { fStealItem = TRUE; @@ -6305,6 +6305,10 @@ UINT8 StealItems(SOLDIERTYPE* pSoldier,SOLDIERTYPE* pOpponent, UINT8* ubIndexRet // - or introduce a flag that prohibits teammembers from 'reaction-firing' on us. Set it upon stealing (here) and remove it after the steal menu is closed // or simplicity reasons, I will do #2 here. Until it breaks, then I'll be forced to do #1. pSoldier->bSoldierFlagMask |= SOLDIER_ACCESSTEAMMEMBER; + + // if we are Nails, don't allow taking our vest + if ( pOpponent->ubProfile == 34 && i == VESTPOS ) + fStealItem = FALSE; } else { diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index ba41aa62..ff133250 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -8553,7 +8553,7 @@ BOOLEAN ProcessImplicationsOfPCAttack( SOLDIERTYPE * pSoldier, SOLDIERTYPE ** pp else if ( pTarget->bTeam == gbPlayerNum && !(gTacticalStatus.uiFlags & INCOMBAT) ) { // Flugente: if we are on the same team adn are currently stealing (accessing inventory) from a teammember, do NOT retaliate - if ( gGameExternalOptions.fAccessOtherMercInventories && pTarget->bTeam == pSoldier->bTeam && pTarget->ubID != pSoldier->ubID && pSoldier->bSoldierFlagMask & SOLDIER_ACCESSTEAMMEMBER ) + if ( AllowedToStealFromTeamMate(pSoldier->ubID, pTarget->ubID) && pSoldier->bSoldierFlagMask & SOLDIER_ACCESSTEAMMEMBER ) { } @@ -10147,3 +10147,11 @@ void TeamDropAll(UINT8 bTeam, BOOLEAN fForce) } } +// are we allowed to steal access this guy's inventory? +BOOLEAN AllowedToStealFromTeamMate( UINT8 ubID, UINT8 ubTargetID ) +{ + if ( gGameExternalOptions.fAccessOtherMercInventories && ubID != ubTargetID && MercPtrs[ubID]->bTeam == MercPtrs[ubTargetID]->bTeam && !AM_AN_EPC(MercPtrs[ubTargetID]) && !IsVehicle(MercPtrs[ubTargetID]) ) + return TRUE; + + return FALSE; +} diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index d45869dd..0a1d98c8 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -358,5 +358,8 @@ void HandleSurrenderOffer( SOLDIERTYPE* pSoldier ); // Flugente: offer t // setting fForce to TRUE allows dropping of gear in combat (used in auto-resolve instances) void TeamDropAll(UINT8 bTeam, BOOLEAN fForce = FALSE); +// are we allowed to steal access this guy's inventory? +BOOLEAN AllowedToStealFromTeamMate( UINT8 aAccessorID, UINT8 aTargetID ); + #endif diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index f590e967..cf1382e1 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -5676,7 +5676,7 @@ void HandleHandCursorClick( INT32 usMapPos, UINT32 *puiNewEvent ) if ( gfUIFullTargetFound ) { // Flugente: allow stealing if the other guy is an enemy, OR if we are on the same team - if ( (( guiUIFullTargetFlags & ENEMY_MERC ) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC )) || (gGameExternalOptions.fAccessOtherMercInventories && gusUIFullTargetID != pSoldier->ubID && guiUIFullTargetFlags & OWNED_MERC) ) + if ( (( guiUIFullTargetFlags & ENEMY_MERC ) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC )) || (AllowedToStealFromTeamMate(pSoldier->ubID, (UINT8)gusUIFullTargetID) && guiUIFullTargetFlags & OWNED_MERC) ) { sActionGridNo = FindAdjacentGridEx( pSoldier, MercPtrs[ gusUIFullTargetID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); if ( sActionGridNo == -1 ) diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 071c0f67..68433162 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -3089,7 +3089,7 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, BOOLEAN fStea { // Calculate the possible chance to steal! // Flugente: if we are on the same team, allow guaranteed full access - if ( gGameExternalOptions.fAccessOtherMercInventories && pTargetSoldier->bTeam == pSoldier->bTeam && pTargetSoldier->ubID != pSoldier->ubID ) + if ( AllowedToStealFromTeamMate(pSoldier->ubID, pTargetSoldier->ubID) ) { iHitChance = 100; } @@ -3188,7 +3188,7 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, BOOLEAN fStea // Do we have the chance to steal more than 1 item? // SANDRO - taking items from collapsed soldiers is treated differently // Flugente: if we are on the same team, allow guaranteed full access - if ( (gGameExternalOptions.fAccessOtherMercInventories && pTargetSoldier->bTeam == pSoldier->bTeam && pTargetSoldier->ubID != pSoldier->ubID ) || ( fSoldierCollapsed || (!gGameExternalOptions.fEnhancedCloseCombatSystem && iDiceRoll < (iHitChance * 2 / 3))) && pSoldier->bTeam == gbPlayerNum ) + if ( AllowedToStealFromTeamMate(pSoldier->ubID, pTargetSoldier->ubID) || ( fSoldierCollapsed || (!gGameExternalOptions.fEnhancedCloseCombatSystem && iDiceRoll < (iHitChance * 2 / 3))) && pSoldier->bTeam == gbPlayerNum ) { // first, charge extra Aps, because it's difficlut to pickup from other soldier if (gGameExternalOptions.fEnhancedCloseCombatSystem)