Loading

Paste #pfjjpkvto

  1. /* Utils.nut */
  2. function Utils::HasMoney(money)
  3. {
  4.     local loan_amount = AICompany.GetLoanAmount();
  5.     local max_loan_amount = AICompany.GetMaxLoanAmount();
  6.     local bank_balance = AICompany.GetBankBalance(AICompany.COMPANY_SELF);
  7.     if (bank_balance + max_loan_amount - loan_amount >= money) return true;
  8.     return false;
  9. }
  10.  
  11. function Utils::GetMoney(money)
  12. {
  13.     local bank_balance = AICompany.GetBankBalance(AICompany.COMPANY_SELF);
  14.     if (bank_balance >= money) return;
  15.     local request_loan = money - bank_balance;
  16.     local loan_interval = AICompany.GetLoanInterval();
  17.     local over_interval = request_loan % loan_interval;
  18.     request_loan += loan_interval - over_interval;
  19.     local loan_amount = AICompany.GetLoanAmount();
  20.     local max_loan_amount = AICompany.GetMaxLoanAmount();
  21.     if (loan_amount + request_loan > max_loan_amount) {
  22.         AICompany.SetLoanAmount(max_loan_amount);
  23.     } else {
  24.         AICompany.SetLoanAmount(loan_amount + request_loan);
  25.     }
  26. }
  27.  
  28. function Utils::RepayLoan()
  29. {
  30.     local bank_balance = AICompany.GetBankBalance(AICompany.COMPANY_SELF);
  31.     local loan_amount = AICompany.GetLoanAmount();
  32.     local repay_loan = loan_amount - bank_balance > 0 ? loan_amount - bank_balance : 0;
  33.     AICompany.SetMinimumLoanAmount(repay_loan);
  34. }
  35.  
  36. class MoneyTest {
  37.     function DoMoneyTest() {
  38.         local price = GetPrice();
  39.         if (Utils.HasMoney(price)) {
  40.             Utils.GetMoney(price);
  41.         }
  42.         if (DoAction()) {
  43.             Utils.RepayLoan();
  44.             return true;
  45.         }
  46.         Utils.RepayLoan();
  47.         return false;
  48.     }
  49. }
  50.  
  51. /* WrightAI.nut */
  52. class TestBuildAirport extends MoneyTest {
  53.     l = null;
  54.     t = null;
  55.     i = null;
  56.  
  57.     function DoAction() {
  58.         return AIExecMode() && AIAirport.BuildAirport(l, t, i);
  59.     }
  60.    
  61.     function GetPrice() {
  62.         local cost = AIAccounting();
  63.         AITestMode() && AIAirport.BuildAirport(l, t, i);
  64.         return cost.GetCosts();
  65.     }
  66.    
  67.     function TryBuild(airport_location, airport_type, airport_stationId) {
  68.         l = airport_location;
  69.         t = airport_type;
  70.         i = airport_stationId;
  71.         if (DoMoneyTest()) {
  72.             return true;
  73.         }
  74.         assert(AIError.GetLastError() != AIError.ERR_STATION_TOO_SPREAD_OUT);
  75.         return false;
  76.     }
  77. }
  78.  
  79. class TestBuildAircraft extends MoneyTest {
  80.     h = null;
  81.     e = null;
  82.     v = null;
  83.    
  84.     function DoAction() {
  85.         v = AIVehicle.BuildVehicle(h, e);
  86.         if (!AIVehicle.IsValidVehicle(v)) {
  87.             return false;
  88.         }
  89.         return true;
  90.     }
  91.    
  92.     function GetPrice() {
  93.         return AIEngine.GetPrice(e);
  94.     }
  95.    
  96.     function TryBuild(best_hangar, engine) {
  97.         h = best_hangar;
  98.         e = engine;
  99.         if (DoMoneyTest()) {
  100.             return v;
  101.         }
  102.         return null;
  103.     }
  104. }
  105.  
  106. class TestRefitAircraft extends MoneyTest {
  107.     v = null;
  108.     c = null;
  109.    
  110.     function DoAction() {
  111.         if (AIExecMode() && AIVehicle.RefitVehicle(v, c)) {
  112.             return true;
  113.         }
  114.         AIVehicle.SellVehicle(v);
  115.         return false;
  116.     }
  117.    
  118.     function GetPrice() {
  119.         local cost = AIAccounting();
  120.         AITestMode() && AIVehicle.RefitVehicle(v, c);
  121.         return cost.GetCosts();
  122.     }
  123.    
  124.     function TryRefit(vehicle, cargoId) {
  125.         v = vehicle;
  126.         c = cargoId;
  127.         return DoMoneyTest();
  128.     }
  129. }
  130.  
  131. class TestRemoveAirport extends MoneyTest {
  132.     l = null;
  133.    
  134.     function DoAction() {
  135.         if (AIExecMode() && AIAirport.RemoveAirport(l)) {
  136.             return true;
  137.         }
  138.         return false;
  139.     }
  140.    
  141.     function GetPrice() {
  142.         local cost = AIAccounting();
  143.         AITestMode() && AIAirport.RemoveAirport(l);
  144.         return cost.GetCosts();
  145.     }
  146.    
  147.     function TryRemove(airport_location) {
  148.         l = airport_location;
  149.         if (DoMoneyTest()) {
  150.             return true;
  151.         }
  152.         return false;
  153.     }
  154. }
  155.  
  156. /* BuildManager.nut */
  157. class TestDemolishTile extends MoneyTest {
  158.     l = null;
  159.    
  160.     function DoAction() {
  161.         return AIExecMode() && AITile.DemolishTile(l);
  162.     }
  163.    
  164.     function GetPrice() {
  165.         local cost = AIAccounting();
  166.         AITestMode() && AITile.DemolishTile(l);
  167.         return cost.GetCosts();
  168.     }
  169.    
  170.     function TryDemolish(location) {
  171.         l = location;
  172.         return DoMoneyTest();
  173.     }
  174. }
  175.  
  176. class TestRemoveRoadStation extends MoneyTest {
  177.     l = null;
  178.    
  179.     function DoAction() {
  180.         return AIExecMode() && AIRoad.RemoveRoadStation(l);
  181.     }
  182.    
  183.     function GetPrice() {
  184.         local cost = AIAccounting();
  185.         AITestMode() && AIRoad.RemoveRoadStation(l);
  186.         return cost.GetCosts();
  187.     }
  188.    
  189.     function TryRemove(location) {
  190.         l = location;
  191.         return DoMoneyTest();
  192.     }
  193. }
  194.  
  195. class TestBuildRoad extends MoneyTest {
  196.     s = null;
  197.     e = null;
  198.    
  199.     function DoAction() {
  200.         return AIExecMode() && AIRoad.BuildRoad(s, e);
  201.     }
  202.    
  203.     function GetPrice() {
  204.         local cost = AIAccounting();
  205.         AITestMode() && AIRoad.BuildRoad(s, e);
  206.         return cost.GetCosts();
  207.     }
  208.    
  209.     function TryBuild(start, end) {
  210.         s = start;
  211.         e = end;
  212.         return DoMoneyTest();
  213.     }
  214. }
  215.  
  216. class TestBuildTunnel extends MoneyTest {
  217.     t = null;
  218.     l = null;
  219.    
  220.     function DoAction() {
  221.         return AIExecMode() && AITunnel.BuildTunnel(t, l);
  222.     }
  223.    
  224.     function GetPrice() {
  225.         local cost = AIAccounting();
  226.         AITestMode() && AITunnel.BuildTunnel(t, l);
  227.         return cost.GetCosts();
  228.     }
  229.    
  230.     function TryBuild(vehicleType, location) {
  231.         t = vehicleType;
  232.         l = location;
  233.         return DoMoneyTest();
  234.     }
  235. }
  236.  
  237. class TestBuildBridge extends MoneyTest {
  238.     t = null;
  239.     i = null;
  240.     s = null;
  241.     e = null;
  242.    
  243.     function DoAction() {
  244.         return AIExecMode() && AIBridge.BuildBridge(t, i, s, e);
  245.     }
  246.    
  247.     function GetPrice() {
  248.         local cost = AIAccounting();
  249.         AITestMode() && AIBridge.BuildBridge(t, i, s, e);
  250.         return cost.GetCosts();
  251.     }
  252.    
  253.     function TryBuild(vehicleType, bridgeId, start, end) {
  254.         t = vehicleType;
  255.         i = bridgeId;
  256.         s = start;
  257.         e = end;
  258.         return DoMoneyTest();
  259.     }
  260. }
  261.  
  262. class TestBuildRoadStation extends MoneyTest {
  263.     l = null;
  264.     e = null;
  265.     t = null;
  266.     i = null;
  267.    
  268.     function DoAction() {
  269.         return AIExecMode() && AIRoad.BuildRoadStation(l, e, t, i);
  270.     }
  271.    
  272.     function GetPrice() {
  273.         local cost = AIAccounting();
  274.         AITestMode() && AIRoad.BuildRoadStation(l, e, t, i);
  275.         return cost.GetCosts();
  276.     }
  277.    
  278.     function TryBuild(location, exit, vehicleType, stationId) {
  279.         l = location;
  280.         e = exit;
  281.         t = vehicleType;
  282.         i = stationId;
  283.         return DoMoneyTest();
  284.     }
  285. }
  286.  
  287. class TestBuildDriveThroughRoadStation extends MoneyTest {
  288.     l = null;
  289.     e = null;
  290.     t = null;
  291.     i = null;
  292.    
  293.     function DoAction() {
  294.         return AIExecMode() && AIRoad.BuildDriveThroughRoadStation(l, e, t, i);
  295.     }
  296.    
  297.     function GetPrice() {
  298.         local cost = AIAccounting();
  299.         AITestMode() && AIRoad.BuildDriveThroughRoadStation(l, e, t, i);
  300.         return cost.GetCosts();
  301.     }
  302.    
  303.     function TryBuild(location, exit, vehicleType, stationId) {
  304.         l = location;
  305.         e = exit;
  306.         t = vehicleType;
  307.         i = stationId;
  308.         return DoMoneyTest();
  309.     }
  310. }
  311.  
  312. class TestBuildRoadDepot extends MoneyTest {
  313.     l = null;
  314.     e = null;
  315.    
  316.     function DoAction() {
  317.         return AIExecMode() && AIRoad.BuildRoadDepot(l, e);
  318.     }
  319.    
  320.     function GetPrice() {
  321.        local cost = AIAccounting();
  322.        AITestMode() && AIRoad.BuildRoadDepot(l, e);
  323.        return cost.GetCosts();
  324.     }
  325.    
  326.     function TryBuild(location, exit) {
  327.         l = location;
  328.         e = exit;
  329.         return DoMoneyTest();
  330.     }
  331. }
  332.  
  333. /* Route.nut */
  334. class TestBuildRoadVehicle extends MoneyTest {
  335.     d = null;
  336.     e = null;
  337.     v = null;
  338.    
  339.     function DoAction() {
  340.         v = AIVehicle.BuildVehicle(d, e);
  341.         if (!AIVehicle.IsValidVehicle(v)) {
  342.             return false;
  343.         }
  344.         return true;
  345.     }
  346.    
  347.     function GetPrice() {
  348.         return AIEngine.GetPrice(e);
  349.     }
  350.    
  351.     function TryBuild(depot, engine) {
  352.         d = depot;
  353.         e = engine;
  354.         if (DoMoneyTest()) {
  355.             return v;
  356.         }
  357.         return null;
  358.     }
  359. }

Comments