Bewegung der Muellobjekte abgesichert
Beim Zerfall eines Fisches in einem Paket im Spieler konnte es
bisher dazu kommen, dass sowohl die Bewegung in das Paket, als
auch anschliessend in den Spieler fehlschlug. Dies wird nun
dadurch vermieden, dass der Reihe nach alle Environments von
innen nach aussen durchprobiert werden, bis die Bewegung klappt.
Change-Id: Ic0b5f662182a870e59c01b4a9a794bba69cbaf08
diff --git a/std/items/fishing/fish.c b/std/items/fishing/fish.c
index 4209b35..612123d 100644
--- a/std/items/fishing/fish.c
+++ b/std/items/fishing/fish.c
@@ -211,9 +211,16 @@
}
if ( stringp(corpseobject) ) {
object muell=clone_object(corpseobject);
- if ( muell->move(environment(), M_GET) != MOVE_OK ) {
- muell->move(environment(environment()), M_GET);
- }
+ // Environments der Reihe nach vom innersten zum aeussersten
+ // durchgehen, bis sich das Muellobjekt hineinbewegen laesst. Einfach
+ // direkt das aeusserste zu nehmen, koennte bei Spielern in
+ // Transportern dazu fuehren, dass das Objekt anschliessend im
+ // Hafenraum liegt. Es wird davon ausgegangen, dass im Normalfall
+ // spaetestens die Bewegung gelingt, die den Fisch in den Raum bewegt,
+ // in dem der Spieler steht.
+ foreach(object ziel : all_environment(this_object())) {
+ if (muell->move(ziel, M_GET)==MOVE_OK)
+ break;
}
call_out("remove",0);
return;