Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.09 KB | None | 0 0
  1. include("Move");
  2. include("Leek");
  3.  
  4. /*
  5. global ennemies_position=[];
  6. for (var e in getAliveEnemies())
  7. ennemies_position[getCell(e)]=1;
  8.  
  9.  
  10. debug(ennemies_position);
  11. var aaaa=getInstructionsCount();
  12. debug("tt="+ennemies_at_range(getCell(getNearestEnemy())+18,2));
  13. debug("ttinstr="+(getInstructionsCount()-aaaa));
  14.  
  15. aaaa=getInstructionsCount();
  16. debug(getCellDistance(getCell(getNearestEnemy())+18
  17. , getNearestEnemyToCell(getCell(getNearestEnemy())+18))<3);
  18. debug("gginstr="+(getInstructionsCount()-aaaa));
  19.  
  20. function ennemies_at_range(cell,range) {
  21. var res=false;
  22. if (range==0)
  23. return (getLeekOnCell(cell) !=-1);
  24. else {
  25. var x= getCellX(cell);
  26. var y=getCellY(cell);
  27. mark(cell,COLOR_GREEN);
  28. for (var i=x-range;i<=x+range;i++) {
  29. for (var j=y-range;j<=y+range;j++) {
  30. var new_cell = getCellFromXY(i,j);
  31. if (new_cell==null || abs(i-x)+abs(j-y)>range)continue;
  32. if (ennemies_position[new_cell]!=null) return true;
  33.  
  34. }
  35. }
  36.  
  37. }
  38. return false;
  39. }
  40. */
  41.  
  42. // marche pour aoe de taille 0 ou 2 (chip ou weapon)
  43. function get_best_cell_area_weapon_or_chip(me, weapon, mp) {
  44. if (getMP() + get_weapon_aoe(weapon)
  45. + (isWeapon(weapon) ? getWeaponMaxScope(weapon)
  46. : getChipMaxScope(weapon)) <
  47. getCellDistance(getCell(me), getCell(getNearestEnemyTo(me)))) return;
  48.  
  49. return (get_cells_weapon_or_chip(weapon,mp));
  50. }
  51.  
  52. function get_cells_focus2(weapon,mp) {
  53. if (mp==null) mp=getMP();
  54. var instr = getInstructionsCount();
  55. if (instr > 250000) {
  56. debug("calculs stoppés");
  57. return;
  58. }
  59. var boolWeapon = isWeapon(weapon);
  60. // var boolLine =boolWeapon?isInlineWeapon(weapon):isInlineChip(weapon);
  61. var res = [];
  62. var minscope = boolWeapon ? getWeaponMinScope(weapon) : getChipMinScope(weapon);
  63. var maxscope = boolWeapon ? getWeaponMaxScope(weapon) : getChipMaxScope(weapon);
  64. var mypos = getCell();
  65. var myX = getCellX(mypos);
  66. var myY = getCellY(mypos);
  67. var weapon_aoe = get_weapon_aoe(weapon);
  68. var minX = myX - maxscope - mp;
  69. var maxX = myX + maxscope + mp;
  70. var minY = myY - maxscope - mp;
  71. var maxY = myY + maxscope + mp;
  72.  
  73. for (var i = minX; i <= maxX; i++) {
  74. var absX = abs(i - myX);
  75. for (var j = minY; j <= maxY; j++) {
  76. var absY = abs(j - myY);
  77. var new_cell = getCellFromXY(i, j);
  78. if (new_cell != null) {
  79. if (
  80. absX + absY > maxscope+mp
  81. || (getCellDistance(new_cell, getCell(getNearestEnemyToCell(new_cell)))
  82. > weapon_aoe) || isObstacle(new_cell)
  83. || absX + absY < minscope-mp
  84.  
  85. )
  86.  
  87.  
  88. continue;
  89.  
  90. var toMove = boolWeapon ? getCellToUseWeaponOnCell(weapon, new_cell)
  91. : getCellToUseChipOnCell(weapon, new_cell);
  92. if (toMove == null || toMove == -1) continue;
  93. var pathLength = getPathLength(getCell(), toMove);
  94. if (pathLength <= mp && lineOfSight(toMove, new_cell)) push(res, new_cell);
  95.  
  96.  
  97. }
  98. }
  99. }
  100.  
  101. return (res);
  102. }
  103.  
  104.  
  105. function formForce(x) {
  106. return (x * (1 + (getForce() / 100)));
  107. }
  108.  
  109.  
  110.  
  111.  
  112. function getWeaponDmg(weapon) {
  113. var dmg = [];
  114. var effects = getWeaponEffects(weapon);
  115. for (var effect in effects) {
  116. if (effect[0] == EFFECT_DAMAGE) {
  117. push(dmg, effect[1]); //min dmg
  118. push(dmg, effect[2]); //max dmg
  119. return (dmg);
  120. }
  121. }
  122. return;
  123. }
  124.  
  125. function initWeapon() {
  126. if (getWeapon() == null) setWeapon(WEAPON_GRENADE_LAUNCHER);
  127. }
  128.  
  129. function get_weapon_or_chip_cost(weapon) {
  130. if (weapon==null) return;
  131. return (isWeapon(weapon) ? getWeaponCost(weapon) : getChipCost(weapon));
  132. }
  133.  
  134.  
  135.  
  136. function get_cells_weapon_or_chip(weapon,mp) {
  137. if (getInstructionsCount() > 240000) return;
  138. /* var bb = getInstructionsCount();
  139. var res = get_cells_focus(cells, weapon);
  140. debug("instr_old="+(getInstructionsCount()-bb));
  141. bb = getInstructionsCount();
  142.  
  143. var res2=get_cells_focus2(weapon);
  144. debug("instr_new="+(getInstructionsCount()-bb));
  145.  
  146. debug("res==res2?"+(res==res2));
  147. debug("count?"+(count(res)==count(res2)));
  148. mark(res2,COLOR_BLUE);
  149. debug("res="+res);
  150. debug(" et res2="+res2);
  151.  
  152. debug("cette pute coute" + (getInstructionsCount() - bb)); */
  153.  
  154. var res = get_cells_focus2(weapon,mp);
  155. var bestCell = null;
  156. var dmg = [];
  157. dmg['min'] = 0;
  158. dmg['max'] = 0;
  159. var affectedEnnemies = 0;
  160. // var maxscope = isWeapon(weapon) ? getWeaponMaxScope(weapon) : getChipMaxScope(weapon);
  161. for (var cell in res) {
  162. // if (getMP()<getPathLength(cell, getCell())+maxscope)
  163. // continue;
  164. var from = isWeapon(weapon) ? getCellToUseWeaponOnCell(cell) : getCellToUseChipOnCell(weapon, cell);
  165. // if (weapon==WEAPON_LASER)
  166. //from=isWeapon(weapon) ? getCellToUseWeaponOnCell(weapon, cell) : getCellToUseChipOnCell(weapon, cell);
  167. var damageDealt = getAreaDamageOnCell(cell, weapon, from);
  168. if (damageDealt == null) continue;
  169. else if ((damageDealt['min'] + damageDealt['max']) /2 > (dmg['min']+dmg['max'])/2) {
  170. dmg['min'] = damageDealt['min'];
  171. dmg['max'] = damageDealt['max'];
  172. dmg['killed'] = damageDealt['killed'];
  173. dmg['togo'] = from;
  174. dmg['mpSpend'] = damageDealt['mpSpend'];
  175.  
  176. bestCell = cell;
  177. }
  178.  
  179. }
  180. if (bestCell == null || dmg['min'] <= 0) {
  181. return;
  182. } else {
  183. var weap = [];
  184. weap['tohit'] = bestCell;
  185.  
  186. //weap['togo'] = isWeapon(weapon) ? getCellToUseWeaponOnCell(bestCell) : getCellToUseChipOnCell(weapon, bestCell);
  187. weap['togo'] = dmg['togo'];
  188. weap['min'] = dmg['min'];
  189. weap['max'] = dmg['max'];
  190. weap['killed'] = dmg['killed'];
  191. weap['mpSpend'] = dmg['mpSpend'];
  192. debug(weap+(isWeapon(weapon)?getWeaponName(weapon):getChipName(weapon)));
  193. return weap;
  194.  
  195. }
  196.  
  197.  
  198. }
  199.  
  200. // work for both chip and weapon
  201. function getAreaDamageOnCell(cell, weapon, from) {
  202. var boolWeapon = isWeapon(weapon);
  203. var tabBaseDamage = boolWeapon ? getWeaponDmg(weapon) : getChipDamage(weapon);
  204. var targets = null;
  205. var distanceToTravel = 0;
  206. var aoe=get_weapon_aoe(weapon);
  207. if (from != getCell()) distanceToTravel = getPathLength(getCell(), from);
  208. if (from != null && aoe>0) targets = getTargetsFrom(weapon, cell, from);
  209. else {
  210. if (aoe==0)
  211. targets=[getLeekOnCell(cell)];
  212. else
  213. targets = boolWeapon ? getWeaponTargets(weapon, cell)
  214. : getChipTargets(weapon, cell);
  215. }
  216. var res = [];
  217. res['killed'] = 0;
  218. res['min'] = 0;
  219. res['max'] = 0;
  220. if (targets == null || isEmpty(targets)) return;
  221. for (var target in targets) {
  222. if (isAlly(target)) {
  223. if (target == getLeek() && weapon == CHIP_LIGHTNING) continue;
  224. else return;
  225. }
  226. var tabDmg = [];
  227. tabDmg[0] = tabBaseDamage[0];
  228. tabDmg[1] = tabBaseDamage[1];
  229. var distanceToMiddleArea = getCellDistance(cell, getCell(target));
  230. var multiplier;
  231. var weapon_aoe = get_weapon_aoe(weapon);
  232. if (weapon_aoe > 0)
  233. multiplier = (100 - (50 * distanceToMiddleArea / weapon_aoe));
  234. else multiplier = 100;
  235. applyForceAndMultiplier(tabDmg, multiplier);
  236. var dmgAfterReduc = reducedDmg(tabDmg, target);
  237.  
  238.  
  239.  
  240. /*
  241. if (average(dmgAfterReduc) >= life) {
  242. if (dmgAfterReduc[0]>life)
  243. res['killed']++;
  244. dmgAfterReduc[0] = 5 * life;
  245. dmgAfterReduc[1] = 5 * life;
  246.  
  247. } */
  248. if (getLevel(target)>80 && (isWeapon(weapon)|| getChipCooldown(weapon)==0)) {
  249. var dmgTurn =
  250. average(dmgAfterReduc)*ceil(getTP()/get_weapon_or_chip_cost(weapon));
  251. var life = getLife(target);
  252. if (dmgTurn>life) {
  253. res['killed']++;
  254. dmgAfterReduc[0] += 500;
  255. dmgAfterReduc[1] += 500;
  256. }}
  257. if (getLevel(target) < 85) {
  258. dmgAfterReduc[0] *= 0.7;
  259. dmgAfterReduc[1] *= 0.7;
  260. }
  261. if (dmgAfterReduc[1] > 0) {
  262. res['min'] += dmgAfterReduc[0];
  263. res['max'] += dmgAfterReduc[1];
  264. }
  265.  
  266. }
  267.  
  268. res['min'] *= 1 - 0.09 * distanceToTravel;
  269. res['max'] *= 1 - 0.09 * distanceToTravel;
  270. res['mpSpend'] = distanceToTravel;
  271. return res;
  272.  
  273. }
  274.  
  275. function get_weapon_aoe(weapon) {
  276. if (weapon == WEAPON_LASER) return 5;
  277. else if (weapon == WEAPON_GRENADE_LAUNCHER || weapon == CHIP_METEORITE
  278. || weapon == CHIP_ICEBERG || weapon == CHIP_LIGHTNING) return 2;
  279. else if (weapon=WEAPON_GAZOR) return 3;
  280. else return 0;
  281. }
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291. global global_force;
  292. global_force = getForce();
  293.  
  294. function formForceGlobal(x) {
  295. return (x * (1 + global_force / 100));
  296. }
  297. // renvoit les dmg reduits par le bouclier de enemy
  298. function reducedDmg(dmg, enemy) {;
  299. var absoluteShield = getAbsoluteShield(enemy);
  300. var relativeShield = getRelativeShield(enemy);
  301. var res = [];
  302. var minDmg = ((1 - (relativeShield / 100)) * dmg[0]) - absoluteShield;
  303. var maxDmg = ((1 - (relativeShield / 100)) * dmg[1]) - absoluteShield;
  304. minDmg <= 0 ? push(res, 0) : push(res, minDmg);
  305. maxDmg <= 0 ? push(res, 0) : push(res, maxDmg);
  306. return (res);
  307. }
  308.  
  309. function applyForceAndMultiplier(@tabDmg, multiplier) {
  310. tabDmg[0] = floor(formForceGlobal(tabDmg[0]) * multiplier / 100);
  311. tabDmg[1] = floor(formForceGlobal(tabDmg[1]) * multiplier / 100);
  312. }
  313.  
  314. function getTargetsFrom(weapon, cell, from) {
  315. var cells = isWeapon(weapon) ? getWeaponEffectiveArea(weapon, cell, from) : getChipEffectiveArea(weapon, cell, from);
  316. var victims = [];
  317. for (var cellTest in cells) {
  318. var leek = getLeekOnCell(cellTest);
  319. if (leek != -1) {
  320. push(victims, leek);
  321. }
  322. }
  323. if (victims == null || isEmpty(victims)) return;
  324. else return victims;
  325. }
  326.  
  327.  
  328.  
  329.  
  330. function get_weapon_or_chip_victims_area(weapon, cell, from) {
  331. var targets = getTargetsFrom(weapon, cell, from);
  332. var res = 0;
  333. for (var target in targets) {
  334. if (isAlly(target)) {
  335. if (target == getLeek() && (weapon == CHIP_LIGHTNING || weapon == WEAPON_LASER)) continue;
  336. else return 0;
  337. } else {
  338. res++;
  339. }
  340. }
  341. return res;
  342. }
  343.  
  344.  
  345. function attack(cell, weapon) {
  346. isWeapon(weapon) ? useWeaponOnCell(cell['tohit']) : useChipOnCell(weapon, cell['tohit']);
  347. }
  348.  
  349. function moveCell(cell) {
  350. moveTowardCell(cell['togo']);
  351. }
  352.  
  353. //verifie qu'il y a au moins 1 ennemi'
  354. function verifTargets(weapon, cell) {
  355. var cells = isWeapon(weapon)
  356. ? getWeaponEffectiveArea(weapon, cell, getCell())
  357. : getChipEffectiveArea(weapon, cell, getCell());
  358. for (var cellTest in cells) {
  359. var leek = getLeekOnCell(cellTest);
  360. if ( leek != -1 && isEnemy(leek))return true;
  361.  
  362. }
  363. return false;
  364. }
  365.  
  366.  
  367.  
  368. function chip_or_weapon_cell(weapon, cell) {
  369. if (weapon==null) return;
  370. var tp_cost = isWeapon(weapon) ? getWeaponCost(weapon) : getChipCost(weapon);
  371. if (cell == null || cell == -1 || cell['max'] == null || getTP() < tp_cost || cell['max'] <= 0) return;
  372.  
  373.  
  374. if ((cell != null && (cell['max'] > 0)
  375. && ((getTP() >= tp_cost) && (verifTargets(weapon, cell['tohit']))))) {
  376.  
  377. mark(cell['togo'], COLOR_GREEN);
  378. mark(cell['tohit'], COLOR_RED);
  379. moveCell(cell);
  380. var ee = getNearestEnemyToCell(cell['tohit']);
  381. if (getCooldown(CHIP_LIBERATION) == 0
  382. && (canUseChip(CHIP_LIBERATION, ee)) && getTP() >= tp_cost + 5 && (
  383. (getAbsoluteShield(ee) > 80 && getRelativeShield(ee) > 25) || (getAbsoluteShield(ee) > 150
  384. || getRelativeShield(ee) > 44))) {
  385.  
  386. useChip(CHIP_LIBERATION, ee);
  387.  
  388. }
  389. var timeout = 6;
  390. while (getTP()>=tp_cost && (verifTargets(weapon, cell['tohit'])) && timeout>0) {
  391. attack(cell, weapon);
  392. timeout--;
  393. }
  394. }
  395. }
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402. function setBestWeapon(@res, weapons, @bestWeapon, @bestDmg) {
  403. var me = getLeek();
  404. bestWeapon = null;
  405. res = [];
  406. bestDmg = 0;
  407. for (var weapon in weapons) {
  408. if ((isWeapon(weapon) ? getWeaponCost(weapon)
  409. : getChipCost(weapon)) <= getTP())
  410. res[weapon] = get_best_cell_area_weapon_or_chip(me, weapon, getMP());
  411. if (getInstructionsCount() > 250000) {
  412. debug("calculs stoppés");
  413. break;
  414. }
  415. }
  416. for (var weapon in weapons) {
  417. if (res[weapon] == null) continue;
  418. var avg = getEfficacite(res[weapon], weapon);
  419. if (avg > bestDmg) {
  420. bestDmg = avg;
  421. bestWeapon = weapon;
  422. }
  423.  
  424. }
  425. }
  426.  
  427.  
  428.  
  429. function getChipDamage(chip) {
  430. var dmg = [];
  431. var effects = getChipEffects(chip);
  432. for (var effect in effects) {
  433. if (effect[0] == EFFECT_DAMAGE) {
  434. push(dmg, effect[1]); //min dmg
  435. push(dmg, effect[2]); //max dmg
  436. }
  437. }
  438. return (dmg);
  439. }
  440.  
  441.  
  442.  
  443. function getEfficacite(cell, weapon) {
  444. if (weapon == null) return 0;
  445. var weapon_cost = get_weapon_or_chip_cost(weapon);
  446. var ec= max(0,isWeapon(weapon)
  447. ? getWeaponFailure(weapon) : getChipFailure(weapon)-(getCores()-1));
  448. return ((((((100 - ec)) / 100)
  449. * ((cell['min'] + cell['max']) / 2)) / weapon_cost));
  450.  
  451. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement