diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/CrateCollide.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/CrateCollide.cpp index 8e2b5504616..5b3b3eb3900 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/CrateCollide.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/CrateCollide.cpp @@ -162,6 +162,12 @@ Bool CrateCollide::isValidToExecute( const Object *other ) const if( getObject()->isAboveTerrain() && !validBuildingAttempt ) return FALSE; + // TheSuperHackers @bugfix Stubbjax 09/02/2026 Prevent the crate from being collected multiple times in a single frame. +#if !RETAIL_COMPATIBLE_CRC + if (getObject()->isDestroyed()) + return FALSE; +#endif + if( md->m_isForbidOwnerPlayer && (getObject()->getControllingPlayer() == other->getControllingPlayer()) ) return FALSE; // Design has decreed this to not be picked up by the dead guy's team. diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/CrateCollide.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/CrateCollide.cpp index e81c884b836..0dbabc28777 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/CrateCollide.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/CrateCollide.cpp @@ -165,6 +165,12 @@ Bool CrateCollide::isValidToExecute( const Object *other ) const if( getObject()->isAboveTerrain() && !validBuildingAttempt ) return FALSE; + // TheSuperHackers @bugfix Stubbjax 09/02/2026 Prevent the crate from being collected multiple times in a single frame. +#if !RETAIL_COMPATIBLE_CRC + if (getObject()->isDestroyed()) + return FALSE; +#endif + if( md->m_isForbidOwnerPlayer && (getObject()->getControllingPlayer() == other->getControllingPlayer()) ) return FALSE; // Design has decreed this to not be picked up by the dead guy's team.