战网中国

标题: 到达障碍物包围的传送点 [打印本页]

作者: rocet    时间: 2017-10-17 14:31
标题: 到达障碍物包围的传送点
  1. crossDummy: function (x,y,range) {
  2.   var unit,
  3.     unitList = [], // 扫描到的障碍物
  4.     containers = ["crate", "chest", "barrel", "largeurn", "urn", "explodingchest"]; // 障碍物类型

  5.   if (!range) { // 障碍物与参照物的距离
  6.     range = 10;
  7.   }

  8.   unit = getUnit(2);  // 获得所有物品

  9.   if (unit) {
  10.     do {
  11.       if (unit.name && unit.mode === 0 && getDistance(x, y, unit.x, unit.y) <= range && getDistance(me.x, me.y, unit.x, unit.y) <= range && containers.indexOf(unit.name.toLowerCase()) > -1) {
  12.         // 筛选 距离传送点与角色间指定距离有交集的,未破坏的,在设定类型中的障碍物
  13.         // say( unit.name + ': ' + ' x: ' + unit.x + ' y: ' + unit.y + ' rangme: ' + getDistance(me.x, me.y, unit.x, unit.y) + ' rangwp: ' + getDistance(x, y, unit.x, unit.y) );

  14.         var has = 0; // 过滤掉重叠在一起的障碍物
  15.         for (var i = 0; i < unitList.length; i++) {
  16.           if( unitList[i].x == unit.x && unitList[i].y == unit.y  ) {
  17.             has = 1;
  18.           }
  19.         };
  20.         if( !has ){
  21.           unitList.push(copyUnit(unit));
  22.         }

  23.       }
  24.     } while (unit.getNext());
  25.   }

  26.   if( unitList.length > 2 ){ // 如果有多个只取2个
  27.     unitList = unitList.slice(0,2);
  28.   }

  29.   while (unitList.length > 0) { // 破坏障碍物
  30.     unitList.sort(Sort.units);
  31.     unit = unitList.shift();
  32.     if (unit && (Pather.useTeleport || !checkCollision(me, unit, 0x4)) && unit.mode === 0) {  //Misc.openChest(unit)
  33.       Pather.moveToUnit( unit );
  34.       Misc.click( 0, 0, unit );
  35.     }
  36.   }
  37.   return true;
  38. }
复制代码
有40%的几率走不到传送, 有没好的解决方法?

作者: darknesseye    时间: 2017-10-22 08:02
  高手啊。  这是kol的吧。
作者: loveqiao361    时间: 2017-10-23 06:12
Pather.moveToUnit( unit ); 感觉不靠谱,虽然没有实测,LZ应该经常move retry?
障碍物应该是根据地图类型来的,建议参照八神的思路
预先设定路线,扫描身边的障碍再破坏
作者: darknesseye    时间: 2017-10-23 11:51
       大神你写的这个我都看不太明白。 我就会用笨办法。   先判断是哪种桶的摆放方式。 然后走到固定的坐标,然后clike旁边的桶。完了之后再跑该跑的脚本。
作者: rocet    时间: 2017-10-30 09:01
loveqiao361 发表于 2017-10-23 06:12
Pather.moveToUnit( unit ); 感觉不靠谱,虽然没有实测,LZ应该经常move retry?
障碍物应该是根据地图类型 ...

不知道寻路计算怎么做才用得那个办法. 地图随即加载后wp的位置不定,所以踢固定位置的箱子失败几率也很大. 而且有的箱子还镶嵌在墙里,马车上.... 寻路计算的方法是什么?
作者: sywater102    时间: 2017-11-21 23:46
楼主设置的这些看不懂啊




欢迎光临 战网中国 (http://www.battlecn.net/) Powered by Discuz! X3.1