Attempt to fix ticket:449 - Warzone crashed when destroyed repair facility. Reviewed by Zarel.

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7281 4a71c877-e1ca-e34f-864e-861f7616d084
master
Per Inge Mathisen 2009-05-03 14:54:55 +00:00 committed by Git SVN Gateway
parent 83cb5626e4
commit 0a599f9818
2 changed files with 13 additions and 6 deletions

View File

@ -1125,6 +1125,12 @@ void actionUpdateDroid(DROID *psDroid)
formationLeave(psDroid->sMove.psFormation, psDroid); formationLeave(psDroid->sMove.psFormation, psDroid);
psDroid->sMove.psFormation = NULL; psDroid->sMove.psFormation = NULL;
} }
// Check that repair facility still exists
if (!psDroid->psTarget)
{
psDroid->action = DACTION_NONE;
break;
}
// move back to the repair facility if necessary // move back to the repair facility if necessary
if (DROID_STOPPED(psDroid) && if (DROID_STOPPED(psDroid) &&
!actionReachedBuildPos(psDroid, !actionReachedBuildPos(psDroid,
@ -2400,6 +2406,10 @@ void actionUpdateDroid(DROID *psDroid)
} }
} }
} }
if (psDroid->action != DACTION_DROIDREPAIR)
{
break; // action has changed
}
//check still next to the damaged droid //check still next to the damaged droid
xdiff = (SDWORD)psDroid->pos.x - (SDWORD)psDroid->psActionTarget[0]->pos.x; xdiff = (SDWORD)psDroid->pos.x - (SDWORD)psDroid->psActionTarget[0]->pos.x;

View File

@ -1568,14 +1568,11 @@ BOOL droidUpdateDroidRepair(DROID *psRepairDroid)
CHECK_DROID(psRepairDroid); CHECK_DROID(psRepairDroid);
ASSERT( psRepairDroid->action == DACTION_DROIDREPAIR, ASSERT_OR_RETURN(false, psRepairDroid->action == DACTION_DROIDREPAIR, "Unit does not have unit repair order");
"unitUpdateUnitRepair: unit does not have unit repair order" ); ASSERT_OR_RETURN(false, psRepairDroid->asBits[COMP_REPAIRUNIT].nStat != 0, "Unit does not have a repair turret");
ASSERT( psRepairDroid->asBits[COMP_REPAIRUNIT].nStat != 0,
"unitUpdateUnitRepair: unit does not have a repair turret" );
psDroidToRepair = (DROID *)psRepairDroid->psActionTarget[0]; psDroidToRepair = (DROID *)psRepairDroid->psActionTarget[0];
ASSERT( psDroidToRepair->type == OBJ_DROID, ASSERT_OR_RETURN(false, psDroidToRepair->type == OBJ_DROID, "Target is not a unit");
"unitUpdateUnitRepair: target is not a unit" );
// FIXME: add power cost for repair // FIXME: add power cost for repair
// remember that self repair is free // remember that self repair is free