From 4816beb53a2ca5c9cabb1c883c0b227759c35751 Mon Sep 17 00:00:00 2001 From: Wanne Date: Mon, 11 Sep 2006 07:31:24 +0000 Subject: [PATCH] - bugfix: CTD bug when stealing (thx to Brent Johnson aka Nonomori) git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@522 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- JA2.suo | Bin 97280 -> 96768 bytes Tactical/Interface Items.cpp | 23 +++++++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/JA2.suo b/JA2.suo index 93683d98783e89f73de1be36e9bf19b19d083016..f1ac581937600be6437275ee913371a15fcecefc 100644 GIT binary patch delta 606 zcmYLGO-NKx6u#f}J)LLMoo41Wy>QCp5ty0Qu0o=QL=?jjDr9oe{A|J@M-$Q^Y_grT z5H7w;(4t%nQ9(aLtYGZ6T+}4Jz}DA}^3Uxuofc zdQPjzY@N(1E3au?pqJ!SoGvh_DVYl`7_KcXm)lwU6wQduK!Wi>TfQhcl$ctywh=^}9aQ*_**s^v2 delta 565 zcmYLFOK4L;6rD4DiHUi>qE2{T9bIE8wbwJJ?GrH_s*1m`pWCRH^VZR z5JGgi-ENe|<$!NHvpw#0xe03}@%Cxu^D=r^N|)V|Q407UaeU#5yJ1=gzJm}=MwEIj zJIIFE#W<=NrL8+gC?*8mr=9f4O6?C>>}AEYxF&9jtGo*lGI=}C^pYrw8(N@9*f|*L z<8XpAXSS>vj*8mU1x7@Hvvq-4ExCno)sRBcZ@UBA{S^)MpyR^nhU=-m`T~{;xPma@rW`@>UNqTlMQj1`ezv`~OQfuG?ZgX^MK_Xy0=V6s8k-%db$`9fp zjpt7UUa+crsj9@3Z%H%nhr}S%1h8+b)u5NQq3EPd9g$Iwp*pQ bq2ZQOX{gmvRJ_UuiFlags |= BUTTON_CLICKED_ON; - if (gfStealing) //jackaians modif - { - DeletePool(gItemPickupMenu.pItemPool); - } } else if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) { @@ -6991,6 +6987,12 @@ void ItemPickupCancel( GUI_BUTTON *btn, INT32 reason ) // OK, pickup item.... gItemPickupMenu.fHandled = TRUE; + + // Nonomori: Fix crash-on-cancel by doing this here instead of on the ...LBUTTON_DWN event + if (gfStealing) //jackaians modif + { + DeletePool(gItemPickupMenu.pItemPool); + } } else if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE ) { @@ -7023,13 +7025,22 @@ void ItemPickMenuMouseMoveCallback( MOUSE_REGION * pRegion, INT32 iReason ) // Show compatible ammo... pTempItemPool = gItemPickupMenu.ItemPoolSlots[ gItemPickupMenu.bCurSelect - gItemPickupMenu.ubScrollAnchor ]; - memcpy( &(gItemPickupMenu.CompAmmoObject), &( gWorldItems[ pTempItemPool->iItemIndex ].o ), sizeof( OBJECTTYPE ) ); + // Nonomori: Fix crash caused by stealing ammo in a sector with no items loaded. + // memcpy( &(gItemPickupMenu.CompAmmoObject), &( gWorldItems[ pTempItemPool->iItemIndex ].o ), sizeof( OBJECTTYPE ) ); + OBJECTTYPE * pCompAmmoObject = (OBJECTTYPE *) _alloca( sizeof( OBJECTTYPE ) ); + if ( gWorldItems && gWorldItems[ pTempItemPool->iItemIndex ].fExists ) + pCompAmmoObject = &( gWorldItems[ pTempItemPool->iItemIndex ].o ); + else + CreateItem( pTempItemPool->iItemIndex, 100, pCompAmmoObject); + memcpy( &(gItemPickupMenu.CompAmmoObject), pCompAmmoObject, sizeof( OBJECTTYPE ) ); // Turn off first... HandleAnyMercInSquadHasCompatibleStuff( (INT8) CurrentSquad( ), NULL, TRUE ); InternalHandleCompatibleAmmoUI( gpSMCurrentMerc, &( gItemPickupMenu.CompAmmoObject ), TRUE ); - HandleAnyMercInSquadHasCompatibleStuff( (INT8)CurrentSquad( ), &(gWorldItems[ pTempItemPool->iItemIndex ].o ), FALSE ); + // Nonomori: Fix crash caused by stealing ammo in a sector with no items loaded. + // HandleAnyMercInSquadHasCompatibleStuff( (INT8)CurrentSquad( ), &(gWorldItems[ pTempItemPool->iItemIndex ].o ), FALSE ); + HandleAnyMercInSquadHasCompatibleStuff( (INT8)CurrentSquad( ), pCompAmmoObject, FALSE ); SetItemPickupMenuDirty( DIRTYLEVEL2 );