Do not assert with invalid position if a droid tries to build where it

stands, and it has no HQ or landing lights to guide it away from there.


git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@4631 4a71c877-e1ca-e34f-864e-861f7616d084
master
Per Inge Mathisen 2008-04-15 16:55:44 +00:00
parent 24e128b5dc
commit fa0b7162fa
2 changed files with 20 additions and 4 deletions

View File

@ -962,7 +962,8 @@ BOOL actionDroidOnBuildPos(DROID *psDroid, SDWORD x, SDWORD y, BASE_STATS *psSta
// return the position of a players home base
void actionHomeBasePos(SDWORD player, SDWORD *px, SDWORD *py)
// MAY return an invalid (0, 0) position on MP maps!
static void actionHomeBasePos(SDWORD player, SDWORD *px, SDWORD *py)
{
STRUCTURE *psStruct;
@ -1985,6 +1986,12 @@ void actionUpdateDroid(DROID *psDroid)
(SDWORD)psDroid->orderX,(SDWORD)psDroid->orderY, psDroid->psTarStats))
{
actionHomeBasePos(psDroid->player, &pbx,&pby);
if (pbx == 0 || pby == 0)
{
debug(LOG_NEVER, "DACTION_MOVETOBUILD: No HQ, cannot move in that direction.");
psDroid->action = DACTION_NONE;
break;
}
moveDroidToNoFormation(psDroid, (UDWORD)pbx,(UDWORD)pby);
}
else
@ -2074,6 +2081,12 @@ void actionUpdateDroid(DROID *psDroid)
(SDWORD)psDroid->actionX,(SDWORD)psDroid->actionY, psDroid->psTarStats))
{
actionHomeBasePos(psDroid->player, &pbx,&pby);
if (pbx == 0 || pby == 0)
{
debug(LOG_NEVER, "No HQ - cannot move in that direction.");
psDroid->action = DACTION_NONE;
break;
}
moveDroidToNoFormation(psDroid, (UDWORD)pbx,(UDWORD)pby);
}
else
@ -2710,6 +2723,12 @@ static void actionDroidBase(DROID *psDroid, DROID_ACTION_DATA *psAction)
if (actionDroidOnBuildPos(psDroid, psDroid->orderX, psDroid->orderY, psDroid->psTarStats))
{
actionHomeBasePos(psDroid->player, &pbx,&pby);
if (pbx == 0 || pby == 0)
{
debug(LOG_NEVER, "DACTION_BUILD: No HQ, cannot move in that direction.");
psDroid->action = DACTION_NONE;
break;
}
moveDroidToNoFormation(psDroid, (UDWORD)pbx,(UDWORD)pby);
}
else

View File

@ -136,9 +136,6 @@ BOOL actionReachedBuildPos(DROID *psDroid, SDWORD x, SDWORD y, BASE_STATS *psSta
// check if a droid is on the foundations of a new building
BOOL actionDroidOnBuildPos(DROID *psDroid, SDWORD x, SDWORD y, BASE_STATS *psStats);
// return the position of a players home base
void actionHomeBasePos(SDWORD player, SDWORD *px, SDWORD *py);
/*send the vtol droid back to the nearest rearming pad - if one otherwise
return to base*/
extern void moveToRearm(DROID *psDroid);