Hi James, 
  
  I've seen this problem too.  It's an AI problem and not a coding  problem per se.  So as long as people don't move them planets  around during a pickup game, I think we are okay. 
  
  Many years ago, I used to run 
  
  gdb robot -h localhost
  
  And wait for a segmentation fault. Found quite a few "bugs" (about 5)  that got plugged up. Since this code is really different from what I  worked with. Not sure if I should do that again. 
  
  I'm going to take the Microsoft approach, and add all the features into  the robotd directory in first before I go into de-bugging...
  
  Jimmy
  

James Cameron <quozl at us.netrek.org> wrote:  The following patch (from my repository) builds on Jimmy's work and
takes into account home planets that may have been moved as part of a
scenario, or where new home planets are nominated by the PLANETS setting
in etc/sysdef.

I've tested this to my satisfaction, by running a game with the robots
and using xsg to move things around.

One thing I did notice, which I'm calling for help on from anyone who
knows the code better ... is that the robots would stop concentrating on
the enemy planets in favour of the third space planets, if those third
space planets were within range of them.

Move a few Orion planets to the front between Romulan and Federation,
and the robots just orbit them with shields down, presumably trying to
bomb, and dying.

I think I've seen this in situations with unmodified planet positions.

-- 
James Cameron    mailto:quozl at us.netrek.org     http://quozl.netrek.org/
Wed May 10 17:31:41 EST 2006  quozl at us.netrek.org
  * robots to cloak near any home planet
  Factorised the decision of what makes a res death risk, and included a
  check for proximity to any home planet.  Used ntserv/enter.c and max
  phaser distance to determine a rectangular area of risk.
diff -rN -u old-netrek-server/Vanilla/NEWS new-netrek-server/Vanilla/NEWS
--- old-netrek-server/Vanilla/NEWS 2006-05-10 22:16:31.000000000 +1000
+++ new-netrek-server/Vanilla/NEWS 2006-05-10 22:16:31.000000000 +1000
@@ -1,3 +1,4 @@
+- fix practice robots to cloak when bombing near home planet [Huang]
 - fix INL confine to knock ships out of orbit [Cameron]
 - describe a local unnamed server as "server on this computer" [Cameron]
 - fix cambot regression [Cameron]
diff -rN -u old-netrek-server/Vanilla/robotd/assault.c new-netrek-server/Vanilla/robotd/assault.c
--- old-netrek-server/Vanilla/robotd/assault.c 2006-05-10 22:16:31.000000000 +1000
+++ new-netrek-server/Vanilla/robotd/assault.c 2006-05-10 22:16:31.000000000 +1000
@@ -43,6 +43,30 @@
    }
 }
 
+/* determine if there is risk of death due to res of opponent */
+static int risk_res_death(struct planet *pl)
+{
+  if (pl = NULL) return 0;
+  /* One of the home planets identified by server etc/sysdef PLANETS */
+  if (pl->pl_flags & PLHOME) return 1;
+  /* Altair in standard position */
+  if (pl->pl_no = 7 && pl->pl_x = 11000 && pl->pl_y = 75000) return 1;
+  /* Draconis in standard position */
+  if (pl->pl_no = 16 && pl->pl_x = 28000 && pl->pl_y = 23000) return 1;
+  /* Scorpii in standard position */
+  if (pl->pl_no = 26 && pl->pl_x = 70720 && pl->pl_y = 26320) return 1;
+  /* Within rectangular phaser distance of any home planet res point */
+  int i;
+  for (i=0,pl=planets;i
+    if (pl->pl_flags & PLHOME) {
+      if(ABS(pl->pl_x - me->p_x) < 12000 && ABS(pl->pl_y - me->p_y) < 12000) {
+ return 1;
+      }
+    }
+  }
+  return 0;
+}
+
 goto_assault_planet()
 {
    Player  *e @@ -79,17 +103,7 @@
    /* cloak bomb near enemy core, so you don't get res-killed */
 
    if (pdist < 7000) {
-     if (pl && pl->pl_flags&PLHOME)
-       cloak=1;
-
-     if (pl && pl->pl_no = 7) /* Altair */
-       cloak=1;
-
-     if (pl && pl->pl_no = 16) /* Draconis */
-       cloak=1;
-
-     if (pl && pl->pl_no = 26) /* Scorpii */
-       cloak=1;
+     if (risk_res_death(pl)) cloak     }
 
    if(pdist < 10000 && edist < 18000)
@@ -174,17 +188,7 @@
    }
 
    /* cloak bomb near enemy core, so you don't get res-killed */
-   if (pl && pl->pl_flags&PLHOME)
-     cloak=1;
-
-   if (pl && pl->pl_no = 7) /* Altair */
-     cloak=1;
-
-   if (pl && pl->pl_no = 16) /* Draconis */
-     cloak=1;
-
-   if (pl && pl->pl_no = 26) /* Scorpii */
-     cloak=1;
+   if (risk_res_death(pl)) cloak  
    if(cloak)
       req_cloak_on();

_______________________________________________
netrek-dev mailing list
netrek-dev at us.netrek.org
http://mailman.us.netrek.org/listinfo/netrek-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.us.netrek.org/pipermail/netrek-dev/attachments/20060510/9f197d4f/attachment-0001.htm