diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 96a15da5..687b8730 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -1914,6 +1914,19 @@ OBJECTTYPE* FindAttachmentByClass( OBJECTTYPE * pObj, UINT32 uiItemClass, UINT8 return( 0 ); } +OBJECTTYPE* FindAttachmentByAttachmentClass( OBJECTTYPE * pObj, UINT32 uiAttachmentClass, UINT8 subObject ) +{ + if (pObj->exists() == true) { + for (attachmentList::iterator iter = (*pObj)[subObject]->attachments.begin(); iter != (*pObj)[subObject]->attachments.end(); ++iter) { + if (Item[iter->usItem].attachmentclass == uiAttachmentClass && iter->exists()) + { + return &(*iter); + } + } + } + return( 0 ); +} + INT8 FindLaunchable( SOLDIERTYPE * pSoldier, UINT16 usWeapon ) { INT8 bLoop; diff --git a/Tactical/Items.h b/Tactical/Items.h index 2de92999..3a06bcb6 100644 --- a/Tactical/Items.h +++ b/Tactical/Items.h @@ -191,6 +191,7 @@ void SwapOutHandItem( SOLDIERTYPE * pSoldier ); void SwapHandItems( SOLDIERTYPE * pSoldier ); OBJECTTYPE* FindAttachmentByClass( OBJECTTYPE * pObj, UINT32 uiItemClass, UINT8 subObject = 0 ); +OBJECTTYPE* FindAttachmentByAttachmentClass( OBJECTTYPE * pObj, UINT32 uiAttachmentClass, UINT8 subObject = 0 ); void WaterDamage( SOLDIERTYPE *pSoldier ); INT8 FindObj( SOLDIERTYPE * pSoldier, UINT16 usItem, INT8 bLower = 0, INT8 bUpper = NUM_INV_SLOTS ); diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 530d9005..1a0c5d04 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -1938,7 +1938,10 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) if ( Item[ usUBItem ].usItemClass == IC_GUN ) { // lalien: search for barrel extender not for any item with range bonus. (else barrel extender will fall off even when none is attached) - OBJECTTYPE* pAttachment = FindAttachment( pObjHand, GUN_BARREL_EXTENDER ); + // silversurfer: Instead of searching for one single item we can also search for attachment class "AC_EXTENDER". + // With this a barrel extender doesn't need to have item ID 310 anymore. + //OBJECTTYPE* pAttachment = FindAttachment( pObjHand, GUN_BARREL_EXTENDER ); + OBJECTTYPE* pAttachment = FindAttachmentByAttachmentClass( pObjHand, AC_EXTENDER ); if ( pAttachment ) { @@ -2531,7 +2534,10 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) if ( Item[ usUBItem ].usItemClass == IC_GUN ) { // lalien: search for barrel extender not for any item with range bonus. (else barrel extender will fall off even when none is attached) - OBJECTTYPE* pAttachment = FindAttachment( pObjUsed, GUN_BARREL_EXTENDER ); + // silversurfer: Instead of searching for one single item we can also search for attachment class "AC_EXTENDER". + // With this a barrel extender doesn't need to have item ID 310 anymore. + //OBJECTTYPE* pAttachment = FindAttachment( pObjUsed, GUN_BARREL_EXTENDER ); + OBJECTTYPE* pAttachment = FindAttachmentByAttachmentClass( pObjUsed, AC_EXTENDER ); if ( pAttachment->exists() ) {