Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. Array.prototype.addSet = function(a) {
  2. for(var i = 0; i < this.length; i++) {
  3. this[i] += a[i];
  4. }
  5. return this;
  6. };
  7. Array.prototype.sum = function() {
  8. return this.reduce(function(a, b) { return a + b; }, 0);
  9. };
  10.  
  11. function reduceResources(res, reduceBy) {
  12. var sizes = res.slice().sort(function(a, b) { return a - b; });
  13. var sum = 0, n = 0, cap;
  14. while(sizes.length) {
  15. var v = sizes.pop();
  16. if(cap >= v)
  17. break;
  18. sum += v;
  19. n++;
  20. cap = Math.floor((sum - reduceBy) / n);
  21. }
  22. return res.map(function(v) { return Math.min(v, cap); });
  23. }
  24.  
  25. var hub = planetsName.santorini;
  26.  
  27. var planetsTransportRes = Array(planets.length);
  28. var cp, i, b;
  29. for(cp = 0; cp < game.planets.length; cp++) {
  30. var p = game.planets[cp];
  31. var planet = planets[p];
  32. var planetProd = Array(resNum).fill(0);
  33. for(b = 0; b < buildings.length; b++) {
  34. var building = buildings[b];
  35. var planetBuilding = planet.structure[b];
  36. if(!planetBuilding.number || !planetBuilding.active)
  37. continue;
  38. var prod = building.rawProduction(planet);
  39. planetProd.addSet(prod.map(function(v) { return v * planetBuilding.number; }));
  40. }
  41. planetsTransportRes[p] = planetProd.map(function(v, k) { return v * -1; });
  42. }
  43.  
  44. fleetSchedule.civisFleet(game.id).filter(function(route) {
  45. return route.type == "auto" && (route.origin == hub || route.destination == hub);
  46. }).map(function(route) {
  47. var routeFor = (route.origin == hub) ? route.destination : route.origin;
  48. var fleet = fleetSchedule.fleets[route.fleet];
  49. var a = fleet.autoMap[routeFor], b = fleet.autoMap[hub];
  50. var travelTime = parseInt(Math.floor(2 * planets[routeFor].shortestPath[hub].distance / (idleBon * fleet.speed())));
  51. var storage = fleet.maxStorage();
  52. var resIn = planetsTransportRes[routeFor].map(function(v, k) { return (v > 0 && fleet.autoRes[b][k]) ? Math.ceil(v * travelTime) : 0 });
  53. var resOut = planetsTransportRes[routeFor].map(function(v, k) { return (v < 0 && fleet.autoRes[a][k]) ? Math.ceil(-v * travelTime) : 0; });
  54. var ratioIn = resIn.sum() / storage; if(ratioIn > 1) resIn = reduceResources(resIn, (ratioIn-1)*storage);
  55. var ratioOut = resOut.sum() / storage; if(ratioOut > 1) resOut = reduceResources(resOut, (ratioOut-1)*storage);
  56. if(Math.max(ratioIn, ratioOut) > 1) console.log(fleet.name+" needs "+(Math.max(ratioIn, ratioOut)-1)*storage+" more storage");
  57. fleet.autoRes[a] = resOut;
  58. fleet.autoRes[b] = resIn;
  59. return route.fleet_name;
  60. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement