Comment 4 for bug 530646

Revision history for this message
Nicolai Hähnle (nha) wrote : Re: [Widelands-dev] [Bug 530646] Re: Idle military people

Am Monday 08 March 2010 11:10:33 schrieb Timowi:
> I had a look at the code again and I think it's the following problem:
> A soldier launched from a militarysite has a task "buildingwork" and then
> task "attack" or "defense". Soldiers launched from a headquarter (or
> warehouse?) only have task "defense". If pop_task is called in the first
> case task "buildingwork" takes the solider home (or to a warehouse). In the
> second case the solider is forever at his last position without any task
> (But he is a worker of his building).
>
> Either calling pop_task without being home or something with the sending
> of soldiers from a headquarter is wrong. I am not completely familiar
> with the task system but I think pop_task should no be called if the
> worker is not at his building.

Keep in mind that's it's been a long time since I was really deep in that
code. However: The case of an empty task stack is supposed to be handled by
init_auto_task. Unless the soldier has 0 hit points left, this should be
handled by Worker::init_auto_task which should start the gowarehouse task.
However, it seems that the gowarehouse task then incorporates the worker
without checking whether it is actually at the warehouse's position. That is
bound to cause problems later on.

I suggest to add a check in gowarehouse_update which, instead of incorporating
the worker, will zero out her location if she's not actually at the warehouse
position. What do you think?