<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40435 >

2008/8/13 Marko Lindqvist <[EMAIL PROTECTED]>:
>
> <URL: http://bugs.freeciv.org/Ticket/Display.html?id=40435 >
>
>  Border claiming code is mess. It uses vision sites on player maps and
> fails to keep things in sync. Result is that players can even see
> borders differently after fortress is conquered (no idea how server
> side works in that case...)
>  Initial border claiming for new fortress seems to claim somewhat
> random tiles around the fortress.

 Main problem seemed to be that sites were never added to list of
vision sites to check each turn, so borders never changed from initial
value. Attached patch fixes that. Also, only visible tiles were inside
borders, leading to funny effects when units moved around (borders
moving around as units saw different tiles, to the extend that their
vision was completely separated from rest of the nation). Changed that
so that not everything inside borders need to be seen, but must be
known.


 - ML

diff -Nurd -X.diff_ignore freeciv/common/vision.c freeciv/common/vision.c
--- freeciv/common/vision.c     2008-08-12 19:08:20.000000000 +0300
+++ freeciv/common/vision.c     2008-08-14 01:26:14.000000000 +0300
@@ -86,6 +86,12 @@
     return;
   }
   assert(psite->ref_count == 0);
+
+
+  if (psite->identity < 0) {
+    /* This is base, not city */
+    site_list_unlink(psite->owner->sites, psite);
+  }
   free(psite);
 }
 
@@ -100,6 +106,7 @@
   psite->identity = identity;
   psite->location = location;
   psite->owner = owner;
+
   return psite;
 }
 
@@ -113,13 +120,15 @@
 
   psite->size = pcity->size;
   sz_strlcpy(psite->name, city_name(pcity));
+
   return psite;
 }
 
 /****************************************************************************
   Build basic vision_site structure based on military base on tile.
 ****************************************************************************/
-struct vision_site *create_vision_site_from_base(struct tile *ptile)
+struct vision_site *create_vision_site_from_base(struct tile *ptile,
+                                                 struct player *owner)
 {
   struct vision_site *psite;
   struct base_type *pbase;
@@ -130,11 +139,13 @@
     return NULL;
   }
 
-  psite = create_vision_site(-base_number(pbase) - 1, ptile, ptile->owner);
+  psite = create_vision_site(-base_number(pbase) - 1, ptile, owner);
   psite->size = 0;
   psite->border_radius_sq = game.info.borders_sq;
   sz_strlcpy(psite->name, base_name_translation(pbase));
 
+  site_list_append(owner->sites, psite);
+
   return psite;
 }
 
diff -Nurd -X.diff_ignore freeciv/common/vision.h freeciv/common/vision.h
--- freeciv/common/vision.h     2008-08-12 19:08:20.000000000 +0300
+++ freeciv/common/vision.h     2008-08-14 01:26:08.000000000 +0300
@@ -134,7 +134,8 @@
 struct vision_site *create_vision_site(int identity, struct tile *location,
                                       struct player *owner);
 struct vision_site *create_vision_site_from_city(const struct city *pcity);
-struct vision_site *create_vision_site_from_base(struct tile *ptile);
+struct vision_site *create_vision_site_from_base(struct tile *ptile,
+                                                 struct player *owner);
 void update_vision_site_from_city(struct vision_site *psite,
                                  const struct city *pcity);
 void copy_vision_site(struct vision_site *dest, struct vision_site *src);
diff -Nurd -X.diff_ignore freeciv/server/maphand.c freeciv/server/maphand.c
--- freeciv/server/maphand.c    2008-08-12 19:08:20.000000000 +0300
+++ freeciv/server/maphand.c    2008-08-14 01:27:08.000000000 +0300
@@ -1589,7 +1589,7 @@
       if (NULL != pcity) {
         psite = create_vision_site_from_city(pcity);
       } else {
-        psite = create_vision_site_from_base(ptile);
+        psite = create_vision_site_from_base(ptile, powner);
       }
       change_playertile_site(playsite, psite);
     }
@@ -1733,7 +1733,7 @@
       continue;
     }
 
-    if (!map_is_known_and_seen(dtile, powner, V_MAIN)) {
+    if (!map_is_known(dtile, powner)) {
       /* without city_reveal_tiles option */
       continue;
     }
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to