<URL: http://bugs.freeciv.org/Ticket/Display.html?id=21843 >
On 1/13/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote:
> We have an alliance, but no shared vision. Alliance allows us to see
> units inside transport. When transport moves out of sight, transported
> units are not removed.
Patch
- ML
diff -Nurd -X.diff_ignore freeciv/server/unittools.c freeciv/server/unittools.c
--- freeciv/server/unittools.c 2006-08-18 10:51:27.000000000 +0300
+++ freeciv/server/unittools.c 2007-01-13 06:11:43.000000000 +0200
@@ -1895,9 +1895,24 @@
if ((!pplayer && pconn->observer) || pplayer == punit->owner) {
send_packet_unit_info(pconn, &info);
} else if (pplayer) {
- if (can_player_see_unit_at(pplayer, punit, punit->tile)
- || can_player_see_unit_at(pplayer, punit, ptile)) {
+ bool see_in_old;
+ bool see_in_new = can_player_see_unit_at(pplayer, punit, punit->tile);
+
+ if (punit->tile == ptile) {
+ /* This is not about movement */
+ see_in_old = see_in_new;
+ } else {
+ see_in_old = can_player_see_unit_at(pplayer, punit, ptile);
+ }
+
+ if (see_in_new || see_in_old) {
+ /* First send movement */
send_packet_unit_short_info(pconn, &sinfo);
+
+ if (!see_in_new) {
+ /* Then remove unit if necessary */
+ unit_goes_out_of_sight(pplayer, punit);
+ }
} else {
if (remove_unseen) {
dsend_packet_unit_remove(pconn, punit->id);
@@ -2810,17 +2825,6 @@
vision_clear_sight(old_vision);
vision_free(old_vision);
- /*
- * Let the unit goes out of sight for the players which doesn't see
- * the unit anymore.
- */
- players_iterate(pplayer) {
- if (can_player_see_unit_at(pplayer, punit, psrctile)
- && !can_player_see_unit_at(pplayer, punit, pdesttile)) {
- unit_goes_out_of_sight(pplayer, punit);
- }
- } players_iterate_end;
-
/* Remove hidden units (like submarines) which aren't seen anymore. */
square_iterate(psrctile, 1, tile1) {
players_iterate(pplayer) {
_______________________________________________
Freeciv-dev mailing list
[email protected]
https://mail.gna.org/listinfo/freeciv-dev