diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 335abca3..9b4a9c96 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -17090,9 +17090,8 @@ void ReEvaluateEveryonesNothingToDo() INT32 iCounter = 0; SOLDIERTYPE *pSoldier = NULL; BOOLEAN fNothingToDo; - - - for( iCounter = 0; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; iCounter++ ) + + for( iCounter = 0; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++iCounter ) { pSoldier = &Menptr[ iCounter ]; @@ -17172,7 +17171,13 @@ void ReEvaluateEveryonesNothingToDo() break; case MOVE_EQUIPMENT: - fNothingToDo = FALSE; + { + // which sector do we want to move stuff to? + INT16 targetX = SECTORX( pSoldier->usItemMoveSectorID ); + INT16 targetY = SECTORY( pSoldier->usItemMoveSectorID ); + + fNothingToDo = (GetNumberOfMovableItems( targetX, targetY, 0 ) == 0); + } break; case FACILITY_STRATEGIC_MILITIA_MOVEMENT: @@ -17218,15 +17223,12 @@ void ReEvaluateEveryonesNothingToDo() { pSoldier->usQuoteSaidExtFlags &= ~SOLDIER_QUOTE_SAID_DONE_ASSIGNMENT; } - - } } // re-evaluation completed gfReEvaluateEveryonesNothingToDo = FALSE; - - + // redraw the map, in case we're showing teams, and someone just came on duty or off duty, their icon needs updating fMapPanelDirty = TRUE; } diff --git a/Tactical/Tactical Save.cpp b/Tactical/Tactical Save.cpp index 42637c0e..ec1d8551 100644 --- a/Tactical/Tactical Save.cpp +++ b/Tactical/Tactical Save.cpp @@ -798,6 +798,63 @@ BOOLEAN GetNumberOfWorldItemsFromTempItemFile( INT16 sMapX, INT16 sMapY, INT8 bM return( TRUE ); } +UINT32 GetNumberOfMovableItems( INT16 sMapX, INT16 sMapY, INT8 bMapZ ) +{ + // not underground! + if ( bMapZ ) + return 0; + + // open the inventory of the sector we are taking stuff from + SECTORINFO *pSectorInfo_Target = &(SectorInfo[SECTOR( sMapX, sMapY )]); + UINT32 uiTotalNumberOfRealItems_Target = 0; + + // use the new map + std::vector pWorldItem_Target; + + if ( (gWorldSectorX == sMapX) && (gWorldSectorY == sMapY) && (gbWorldSectorZ == bMapZ) ) + { + uiTotalNumberOfRealItems_Target = guiNumWorldItems; + pWorldItem_Target = gWorldItems; + } + else + { + // not loaded, load + // get total number, visable and invisible + BOOLEAN fReturn = GetNumberOfWorldItemsFromTempItemFile( sMapX, sMapY, bMapZ, &(uiTotalNumberOfRealItems_Target), FALSE ); + Assert( fReturn ); + + if ( uiTotalNumberOfRealItems_Target > 0 ) + { + // allocate space for the list + pWorldItem_Target.resize( uiTotalNumberOfRealItems_Target );//dnl ch75 271013 + + // now load into mem + LoadWorldItemsFromTempItemFile( sMapX, sMapY, bMapZ, pWorldItem_Target ); + } + } + + UINT32 validitems = 0; + + for ( UINT32 uiCount = 0; uiCount < uiTotalNumberOfRealItems_Target; ++uiCount ) // ... for all items in the world ... + { + if ( pWorldItem_Target[uiCount].fExists ) // ... if item exists ... + { + // test wether item is reachable and allowed to be moved by this assignment + if ( (pWorldItem_Target[uiCount].usFlags & WORLD_ITEM_REACHABLE) && !(pWorldItem_Target[uiCount].usFlags & WORLD_ITEM_MOVE_ASSIGNMENT_IGNORE) && pWorldItem_Target[uiCount].bVisible > 0 ) + { + OBJECTTYPE* pObj = &(pWorldItem_Target[uiCount].object); // ... get pointer for this item ... + + if ( pObj != NULL && pObj->exists( ) ) // ... if pointer is not obviously useless ... + { + ++validitems; + } + } + } + } + + return validitems; +} + BOOLEAN AddItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT32 sGridNo, UINT32 uiNumberOfItemsToAdd, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, BOOLEAN fReplaceEntireFile ) { diff --git a/Tactical/Tactical Save.h b/Tactical/Tactical Save.h index 393ef88d..d6da8de6 100644 --- a/Tactical/Tactical Save.h +++ b/Tactical/Tactical Save.h @@ -40,6 +40,9 @@ BOOLEAN DeleteTempItemMapFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ ); //Retrieves the number of items in the sectors temp item file BOOLEAN GetNumberOfWorldItemsFromTempItemFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ, UINT32 *puiNumberOfItems, BOOLEAN fIfEmptyCreate ); +// Flugente: how many items in this sector can be moved via the MOVE_EQUIPMENT assignement? +UINT32 GetNumberOfMovableItems( INT16 sMapX, INT16 sMapY, INT8 bMapZ ); + //Saves the Current Sectors, ( world Items, rotting corpses, ... ) to the temporary file used to store the sectors items BOOLEAN SaveCurrentSectorsInformationToTempItemFile( );