Advertisement
Guest User

Moe

a guest
Jun 13th, 2014
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Replaces the existing calcTotalrecursive-Method
  2. function calcTotalRecursive() {
  3.     var type, id, req, i, j;
  4.     try {
  5.         if (DEVMODE_FUNCTION) {
  6.             var trackingHandle = tracking.start("berater", "calcTotalRecursive", []);
  7.         }
  8.  
  9.         totalRecursive = new Array(new Object(), new Object(), new Object(), new Object());
  10.         // Type is set to '1', so only forestry products are inspected
  11.         type = 1;
  12.  
  13.         // Iterate over all products starting with those which are no pre-product. It is important that an inspected product won't be needed by a non-yet-inspected product!
  14.         for (i = prodNameSort[type].length - 1; i >= 0; i--) {
  15.             // Id of currently inspected product
  16.             id = prodNameSort[type][i];
  17.  
  18.             // If this product is directly or recursivly needed...
  19.             if (prodMinRack[type][id] > 0 || totalRecursive[type][id] > 0) {
  20.                 // If this product requires other products... (e.g. tree logs DON'T!)
  21.                 if (prodRequire[type][id]) {
  22.                     // Iterate over pre-products
  23.                     for (j = 0; j < prodRequire[type][id].length; j++) {
  24.                         // Cache the currently inspected pre-product
  25.                         req = prodRequire[type][id][j];
  26.                         if (!totalRecursive[req[0]][req[1]]) {
  27.                             // Initialize result storage of pre-product, if necessary
  28.                             totalRecursive[req[0]][req[1]] = 0;
  29.                         }
  30.  
  31.                         /**
  32.                          * Some real magic is done here: We calculate, how many pre-products are recursivly needed!
  33.                          * - At first, we add the directly and recursivly needed products. If the latter not initialized, we assume 0.
  34.                          * - Second, we divide the sum by the amount yielded product per production cycle, e.g. a 'Waschzuber' is 1 and 'Bretter (Gemeine
  35.                          *      Fichte)' is 5.
  36.                          * - Third, we (should) multiply the result by the amount of products needed to initiate the production process.
  37.                          * - Fourth, we round up to the next integer, because we can't spend fractions of pre-products.
  38.                          * - At last, we sometimes don't want to round to the next integer, but to the next number e.g. dividable by 5. For instance, the
  39.                          *      production process of 30 'Bonbons' needs 5 'Honig' to start. The formula therefore would be: Math.ceil(x / 5) * 5, where
  40.                          *      x is our result of third. As the mathematicians might have recognized, we can reduce req[2] (amount of products needed to
  41.                          *      initiate the production process).
  42.                          */
  43.                         totalRecursive[req[0]][req[1]] += Math.ceil((prodMinRack[type][id] + (totalRecursive[type][id] ? totalRecursive[type][id] : 0)) / prodYield[type][id]) * req[2]; // Anzahl rekursiv benötigte Stämme = (direkt + rekursiv benötigte Bretter) / Bretter je Stamm
  44.                     }
  45.                 }
  46.             }
  47.         }
  48.         if (DEVMODE_FUNCTION) {
  49.             tracking.end("berater", trackingHandle);
  50.         }
  51.     } catch (err) {
  52.         GM_logError("calcTotalRecursive\ntype=" + type + " id=" + id + " req=" + implode(req) + " i=" + i + " j=" + j + "\n" + err);
  53.     }
  54. }
  55.  
  56. // In 'function calcProdMinRack(caller)', the call of calcTotalRecursive must be fitted to the new signiture
  57. if (valMinRackRecursive) {
  58.     calcTotalRecursive(); // recursive need products calculation
  59.     // Some iteration over variable totalRecursive to adjust prodMinRack
  60. }
  61.  
  62. // German menu-item translation in function startScript()
  63. texte["de"]["settings_valMinRackRecursive"] = ["Rekursive Produkte", "Berechne die rekursiv benötigten Produkte (in der Baumerei) und addiere sie zur Liste der (direkt) benötigten Produkte hinzu."];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement