Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Array.prototype.addSet = function(a) {
- for(var i = 0; i < this.length; i++) {
- this[i] += a[i];
- }
- return this;
- };
- Array.prototype.sum = function() {
- return this.reduce(function(a, b) { return a + b; }, 0);
- };
- function reduceResources(res, reduceBy) {
- var sizes = res.slice().sort(function(a, b) { return a - b; });
- var sum = 0, n = 0, cap;
- while(sizes.length) {
- var v = sizes.pop();
- if(cap >= v)
- break;
- sum += v;
- n++;
- cap = Math.floor((sum - reduceBy) / n);
- }
- return res.map(function(v) { return Math.min(v, cap); });
- }
- var hub = planetsName.santorini;
- var planetsTransportRes = Array(planets.length);
- var cp, i, b;
- for(cp = 0; cp < game.planets.length; cp++) {
- var p = game.planets[cp];
- var planet = planets[p];
- var planetProd = Array(resNum).fill(0);
- for(b = 0; b < buildings.length; b++) {
- var building = buildings[b];
- var planetBuilding = planet.structure[b];
- if(!planetBuilding.number || !planetBuilding.active)
- continue;
- var prod = building.rawProduction(planet);
- planetProd.addSet(prod.map(function(v) { return v * planetBuilding.number; }));
- }
- planetsTransportRes[p] = planetProd.map(function(v, k) { return v * -1; });
- }
- fleetSchedule.civisFleet(game.id).filter(function(route) {
- return route.type == "auto" && (route.origin == hub || route.destination == hub);
- }).map(function(route) {
- var routeFor = (route.origin == hub) ? route.destination : route.origin;
- var fleet = fleetSchedule.fleets[route.fleet];
- var a = fleet.autoMap[routeFor], b = fleet.autoMap[hub];
- var travelTime = parseInt(Math.floor(2 * planets[routeFor].shortestPath[hub].distance / (idleBon * fleet.speed())));
- var storage = fleet.maxStorage();
- var resIn = planetsTransportRes[routeFor].map(function(v, k) { return (v > 0 && fleet.autoRes[b][k]) ? Math.ceil(v * travelTime) : 0 });
- var resOut = planetsTransportRes[routeFor].map(function(v, k) { return (v < 0 && fleet.autoRes[a][k]) ? Math.ceil(-v * travelTime) : 0; });
- var ratioIn = resIn.sum() / storage; if(ratioIn > 1) resIn = reduceResources(resIn, (ratioIn-1)*storage);
- var ratioOut = resOut.sum() / storage; if(ratioOut > 1) resOut = reduceResources(resOut, (ratioOut-1)*storage);
- if(Math.max(ratioIn, ratioOut) > 1) console.log(fleet.name+" needs "+(Math.max(ratioIn, ratioOut)-1)*storage+" more storage");
- fleet.autoRes[a] = resOut;
- fleet.autoRes[b] = resIn;
- return route.fleet_name;
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement