Fix infinite loop when modifying a template in infinite production.
If a factory was set to infinite production, but no templates were in the production queue, there was an infinite loop looking for something to produce.master
parent
29413f5a01
commit
db58c7c5f9
|
@ -7009,6 +7009,7 @@ DROID_TEMPLATE * factoryProdUpdate(STRUCTURE *psStructure, DROID_TEMPLATE *psTem
|
||||||
{
|
{
|
||||||
UDWORD inc, factoryType, factoryInc;
|
UDWORD inc, factoryType, factoryInc;
|
||||||
FACTORY *psFactory;
|
FACTORY *psFactory;
|
||||||
|
bool somethingInQueue = false;
|
||||||
|
|
||||||
CHECK_STRUCTURE(psStructure);
|
CHECK_STRUCTURE(psStructure);
|
||||||
ASSERT_OR_RETURN(NULL, psStructure->player == productionPlayer, "%s called for incorrect player", __FUNCTION__);
|
ASSERT_OR_RETURN(NULL, psStructure->player == productionPlayer, "%s called for incorrect player", __FUNCTION__);
|
||||||
|
@ -7022,6 +7023,8 @@ DROID_TEMPLATE * factoryProdUpdate(STRUCTURE *psStructure, DROID_TEMPLATE *psTem
|
||||||
//find the entry in the array for this template
|
//find the entry in the array for this template
|
||||||
for (inc=0; inc < MAX_PROD_RUN; inc++)
|
for (inc=0; inc < MAX_PROD_RUN; inc++)
|
||||||
{
|
{
|
||||||
|
somethingInQueue = somethingInQueue || asProductionRun[factoryType][factoryInc][inc].quantity != 0;
|
||||||
|
|
||||||
if (asProductionRun[factoryType][factoryInc][inc].psTemplate != NULL && asProductionRun[factoryType][factoryInc][inc].psTemplate->multiPlayerID == psTemplate->multiPlayerID)
|
if (asProductionRun[factoryType][factoryInc][inc].psTemplate != NULL && asProductionRun[factoryType][factoryInc][inc].psTemplate->multiPlayerID == psTemplate->multiPlayerID)
|
||||||
{
|
{
|
||||||
asProductionRun[factoryType][factoryInc][inc].built++;
|
asProductionRun[factoryType][factoryInc][inc].built++;
|
||||||
|
@ -7043,6 +7046,11 @@ DROID_TEMPLATE * factoryProdUpdate(STRUCTURE *psStructure, DROID_TEMPLATE *psTem
|
||||||
return asProductionRun[factoryType][factoryInc][inc].psTemplate;
|
return asProductionRun[factoryType][factoryInc][inc].psTemplate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Check that we aren't looping doing nothing.
|
||||||
|
if (!somethingInQueue)
|
||||||
|
{
|
||||||
|
psFactory->productionLoops = 0; // Don't do nothing infinitely many times.
|
||||||
|
}
|
||||||
/*If you've got here there's nothing left to build unless factory is
|
/*If you've got here there's nothing left to build unless factory is
|
||||||
on loop production*/
|
on loop production*/
|
||||||
if (psFactory->productionLoops != 0)
|
if (psFactory->productionLoops != 0)
|
||||||
|
|
Loading…
Reference in New Issue