Follow-up Comment #5, bug #18816 (project freeciv):

OK, here's what I guess is going on here. (Sorry if you'd worked this out; I
finally got there.)
* You had a bunch of cities building Caravans.
* You got The Corporation. You won't be able to direct new cities to build
Caravans, but the existing ones are left as they are; there's no check on
productions at this point.
* You tried to get Genetic Engineering, but fumbled it. You never had it.
** However, as I noted in comment #1, forget_tech_transfered() is called. This
calls player_tech_lost().
*** That loops around all governments, unit activities, and city productions,
and aborts any that you wouldn't be able to start in your current situation.
This is done without reference to the specific tech you "lost". In the case of
city productions, it chooses a replacement project with
*** So that includes the Caravan productions, even though (a) they're nothing
to do with Genetic Engineering, (b) the server would have upgraded them to
Freight the next turn.

Two things to fix:
* Trying to "remove" a tech the player never had. That just looks dangerous.
* However, that's not sufficient; had you been the donor of Genetic
Engineering you could genuinely have lost it and triggered this. Therefore,
the checks in player_tech_lost() need to be reviewed and unified somehow with
other server behaviour, particularly the end-turn production upgrade
** We don't want to just upgrade here and now; if we were doing that, we
should do it when we gained the tech. We just want to leave the existing
production alone.
** (I don't think anything other than production is actually affected, as I
suspect nothing other than actually losing techs can cause activities or
governments to become unavailable.)


Reply to this item at:


  Message sent via/by Gna!

Freeciv-dev mailing list

Reply via email to