#2876: AI Script: buildDerrick + closestOil + droidCanReach + Map Sk-Concrete 
(8P)
= Error
-------------------------------------------------+-------------------------
  Reporter:  wzdude                              |             Owner:  Per
      Type:  bug                                 |            Status:  new
  Priority:  normal                              |         Milestone:
 Component:  Engine: Scripting / AI              |  unspecified
  Keywords:  buildDerrick closestOil             |           Version:
  droidCanReach AI                               |  unspecified
Blocked By:                                      |  Operating System:  All
                                                 |  /Non-Specific
                                                 |          Blocking:
-------------------------------------------------+-------------------------
 buildDerrick() uses closest_oil(). This fkt. is looking for the closest
 oil resource no matter if any contruction droid can reach it. For map Sk-
 Concrete (with 8 Players) this is fatal, because there are oil resources
 located at islands and if no contruction droid was build with hover (as it
 is always the case) any AI gets stuck here. Free oil resources little bit
 further away will be completely ignored.

 I found a solution that worked for me:

 1. removed droidCanReach()-check from buildDerrick()

 2. replaced closestOil() fkt. with this one:

 function FEATURE closestOil(int _x, int _y, bool _bAvoidThreat)
 {
         local FEATURE   _oil, _closestOil;

         local int       _bestDist, _newDist;

         local DROID     _droid;

         _closestOil = NULLOBJECT;

         initIterateGroup(buildGroup);

         _droid = iterateGroup(buildGroup);

         while (_droid != NULLOBJECT)
         {
                 _bestDist = distBetweenTwoPoints(0, 0, (mapWidth * TILE),
 (mapHeight * TILE));

                 initGetFeature(oilRes, -1, me);

                 _oil = getFeatureB(me);

                 while (_oil != NULLOBJECT)
                 {
                         _newDist = distBetweenTwoPoints(_x, _y, _oil.x,
 _oil.y);

                         if (_newDist < _bestDist and droidCanReach(_droid,
 _oil.x, _oil.y))
                         {
                                 if ( !(_bAvoidThreat && threatInRange(me,
 _oil.x, _oil.y, OIL_THREAT_RANGE, FALSE)) )
                                 {
                                         _bestDist = _newDist;
                                         _closestOil = _oil;
                                 }
                         }

                         _oil = getFeatureB(me);
                 }

                 if (_closestOil != NULLOBJECT)
                 {
                         return _closestOil;
                 }

                 _droid = iterateGroup(buildGroup);
         }

         return _closestOil;
 }

-- 
Ticket URL: <http://developer.wz2100.net/ticket/2876>
Warzone 2100 Trac <http://developer.wz2100.net/>
The Warzone 2100 Project
_______________________________________________
Warzone-dev mailing list
Warzone-dev@gna.org
https://mail.gna.org/listinfo/warzone-dev

Reply via email to