neweff production work: Fix crash for sea sector

The work required for building sea sectors is zero in sect.config.
When a deity runs neweff or production on a sea sector, e.g. with
"neweff *", buildeff() divides by zero.  Same when a player or deity
runs work with an engineer in a sea sector.  Broken in commit
2ffd7b948 "config: Make work to build sectors configurable", v4.4.0

Fix buildeff() to avoid the division.  Change the required work to 100
in sect.config for good measure.

Cover deity use of neweff and production in tests/update.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
Markus Armbruster 2021-01-15 07:47:59 +01:00
parent 223add6a92
commit 5f3c64c062
6 changed files with 1109 additions and 6 deletions

View file

@ -65,7 +65,7 @@
config sect-chr
uid mnem prd peff l_b h_b bwork cost maint name ...
0 "." -1 0 0 0 0 0 0 "sea"
0 "." -1 0 0 0 100 0 0 "sea"
1 "^" dust 100 0 0 100 100 0 "mountain"
2 "s" -1 0 0 0 100 0 0 "sanctuary"
3 "\134" -1 0 0 0 100 0 0 "wasteland"

View file

@ -29,7 +29,7 @@
* Known contributors to this file:
* Dave Pare, 1986
* Steve McClure, 1996
* Markus Armbruster, 2004-2016
* Markus Armbruster, 2004-2021
*/
#include <config.h>
@ -58,7 +58,7 @@ buildeff(struct sctstr *sp)
* Easier to destroy than to build.
*/
dcp = &dchr[sp->sct_type];
build = 4 * avail / dcp->d_bwork;
build = dcp->d_bwork > 0 ? 4 * avail / dcp->d_bwork : 100;
if (build <= sp->sct_effic)
sp->sct_effic -= build;
else {
@ -72,7 +72,7 @@ buildeff(struct sctstr *sp)
if (sp->sct_type == sp->sct_newtype) {
dcp = &dchr[sp->sct_type];
delta = avail / dcp->d_bwork;
delta = dcp->d_bwork > 0 ? avail / dcp->d_bwork : 100;
if (delta > 100 - sp->sct_effic)
delta = 100 - sp->sct_effic;
build = get_materials(sp, dcp->d_mat, delta);