Advertisement
sinkir

game.mods.sophie.smartBuild("field")

Jul 7th, 2023 (edited)
774
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. if(!game.mods)
  2. {
  3.     game.mods = {};
  4. }
  5. if(!game.mods.sophie)
  6. {
  7.     game.mods.sophie = {};
  8. }
  9.  
  10.  
  11. game.mods.sophie.genMyBuildFunction = function ()
  12. {
  13.     var sFunc = game.time.queue.update.toString();
  14.     var asFunc = sFunc.split("\n");
  15.  
  16.     var bFlag_el = false;
  17.     var bFlag_controller = false;
  18.     var sParsed = "";
  19.     for(var i=1;i<asFunc.length;i++)
  20.     {
  21.         if(bFlag_el)
  22.         {
  23.             if(bFlag_controller)
  24.             {
  25.                
  26.             }
  27.             else
  28.             {
  29.                 if(asFunc[i].includes("if(!props.controller){"))
  30.                 {
  31.                     bFlag_controller = true;
  32.                 }
  33.                 else
  34.                 {
  35.                     if(asFunc[i].includes(`"invalid queue item:"`))
  36.                     {
  37.                         sParsed += asFunc[i].replace(`"invalid queue item:"`,
  38.                         `"invalid myBuild item:"`)+"\n";
  39.                     }
  40.                     else if(asFunc[i].includes(`props.controller.build(model, 1);`))
  41.                     {
  42.                         sParsed += asFunc[i].replace(`props.controller.build(model, 1);`,
  43.                         `props.controller.build(model, el.value);`)+"\n";
  44.                     }
  45.                     else
  46.                     {
  47.                         sParsed += asFunc[i].replace(`this.game`, `game`)+"\n";
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.         else
  53.         {
  54.             if(asFunc[i].includes("var el = this.queueItems[0];"))
  55.             {
  56.                 bFlag_el = true;
  57.             }      
  58.         }
  59.     }
  60.  
  61.  
  62.     var sPreText = `
  63.     game.mods.sophie.myBuild = function(sElName, sElType, iValue = 1){
  64.             if(iValue > 1 && game.time.queue.queueNonStackable.includes(sElType) || iValue < 1)
  65.             {
  66.                 iValue = 1;
  67.             }
  68.             var el = {"name":sElName, "type":sElType, "value":iValue};
  69.     `;
  70.  
  71.  
  72.     var sPostText = `
  73.             if(!props.controller){
  74.                 console.error(el.name + " of " + el.type + " no controller found :o");
  75.                 return false;
  76.             }
  77.             if(buyItem){
  78.                 props.controller.buyItem(model, el.value,  function(result) {});
  79.             }
  80.            
  81.            
  82.             var changed = false;
  83.             if (Array.isArray(compare)){
  84.                 for (var i in compare){
  85.                     if (oldVal[compare[i]] != model.metadata[compare[i]]){
  86.                         changed = true;
  87.                     }
  88.                 }
  89.             }else{
  90.                 changed = oldVal != model.metadata[compare];
  91.             }
  92.            
  93.             return changed;
  94.     }
  95.     `;
  96.  
  97.     var sFinalText = sPreText+sParsed+sPostText;
  98.     eval(sFinalText);
  99. };
  100.  
  101.  
  102.  
  103. game.mods.sophie.myGetController = function (sElName, sElType)
  104. {
  105.     var el = {"name":sElName, "type":sElType};
  106.  
  107.     switch (el.type){
  108.         case "policies":
  109.             return new classes.ui.PolicyBtnController(game);
  110.         case "tech":
  111.             return new com.nuclearunicorn.game.ui.TechButtonController(game);
  112.         case "buildings":
  113.             var itemMetaRaw = game.getUnlockByName(el.name, el.type);
  114.             var bld = new classes.BuildingMeta(itemMetaRaw).getMeta();
  115.             if (typeof(bld.stages) == "object"){
  116.                 return new classes.ui.btn.StagingBldBtnController(game);
  117.             } else {
  118.                 return new classes.ui.btn.BuildingBtnModernController(game);
  119.             }
  120.         case "spaceMission":
  121.             return new com.nuclearunicorn.game.ui.SpaceProgramBtnController(game);
  122.         case "spaceBuilding":
  123.             return new classes.ui.space.PlanetBuildingBtnController(game);
  124.         case "chronoforge":
  125.             return new classes.ui.time.ChronoforgeBtnController(game);
  126.         case "voidSpace":
  127.             return new classes.ui.time.VoidSpaceBtnController(game);
  128.         case "zigguratUpgrades":
  129.             return new com.nuclearunicorn.game.ui.ZigguratBtnController(game);
  130.         case "religion":
  131.             return new com.nuclearunicorn.game.ui.ReligionBtnController(game);
  132.         case "transcendenceUpgrades":
  133.             return new classes.ui.TranscendenceBtnController(game);
  134.         case "pacts":
  135.             return new com.nuclearunicorn.game.ui.PactsBtnController(game);
  136.         case "upgrades":
  137.             return new com.nuclearunicorn.game.ui.UpgradeButtonController(game);
  138.         case "zebraUpgrades":
  139.             return new com.nuclearunicorn.game.ui.ZebraUpgradeButtonController(game);
  140.     }
  141. };
  142.  
  143. game.mods.sophie.smartGetController = function (sName)
  144. {
  145.     var sType = game.mods.sophie.nameToType(sName);
  146.     if(!sType)
  147.     {
  148.         console.error("game.mods.sophie.smartGetController type from item not found in game.mods.sophie.queueLabelsAndValues ", sName);
  149.     }
  150.     else
  151.     {
  152.         return game.mods.sophie.myGetController(sName, sType);
  153.     }  
  154. };
  155.  
  156.  
  157. game.mods.sophie.fillPossibleValues = function ()
  158. {
  159.     aListOfLabels = Object.keys(game.time.queue.queueLabels);
  160.     game.mods.sophie.queueLabelsAndValues = [];
  161.    
  162.     for(var i=0;i<aListOfLabels.length;i++)
  163.     {
  164.         var possibleValues = false;
  165.         switch (aListOfLabels[i])
  166.         {
  167.             case "policies":
  168.                 possibleValues = game.managers[3].meta[1].meta.map(arr => arr.name);
  169.                 break;
  170.             case "tech":
  171.                 possibleValues = game.managers[3].meta[0].meta.map(arr => arr.name);
  172.                 break;
  173.             case "buildings":
  174.                 possibleValues = game.managers[2].meta[0].meta.map(arr => arr.name);
  175.                 break;
  176.             case "spaceMission":
  177.                 possibleValues = game.managers[6].meta[0].meta.map(arr => arr.name);
  178.                 break;
  179.             case "spaceBuilding":
  180.                 possibleValues = game.managers[6].meta[1].meta.map(arr => arr.name);
  181.                
  182.                 possibleValues = possibleValues.concat(game.managers[6].meta[2].meta.map(arr => arr.name));
  183.                 possibleValues = possibleValues.concat(game.managers[6].meta[3].meta.map(arr => arr.name));
  184.                 possibleValues = possibleValues.concat(game.managers[6].meta[4].meta.map(arr => arr.name));
  185.                 possibleValues = possibleValues.concat(game.managers[6].meta[5].meta.map(arr => arr.name));
  186.                 possibleValues = possibleValues.concat(game.managers[6].meta[6].meta.map(arr => arr.name));
  187.                 possibleValues = possibleValues.concat(game.managers[6].meta[7].meta.map(arr => arr.name));
  188.                 possibleValues = possibleValues.concat(game.managers[6].meta[8].meta.map(arr => arr.name));
  189.                 possibleValues = possibleValues.concat(game.managers[6].meta[9].meta.map(arr => arr.name));
  190.                 possibleValues = possibleValues.concat(game.managers[6].meta[10].meta.map(arr => arr.name));
  191.                 possibleValues = possibleValues.concat(game.managers[6].meta[11].meta.map(arr => arr.name));
  192.                 possibleValues = possibleValues.concat(game.managers[6].meta[12].meta.map(arr => arr.name));
  193.                 break;
  194.             case "chronoforge":
  195.                 possibleValues = game.managers[7].meta[0].meta.map(arr => arr.name);
  196.                 break;
  197.             case "voidSpace":
  198.                 possibleValues = game.managers[7].meta[1].meta.map(arr => arr.name);
  199.                 break;
  200.             case "zigguratUpgrades":
  201.                 possibleValues = game.managers[5].meta[0].meta.map(arr => arr.name);
  202.                 break;
  203.             case "religion":
  204.                 possibleValues = game.managers[5].meta[1].meta.map(arr => arr.name);
  205.                 break;
  206.             case "transcendenceUpgrades":
  207.                 possibleValues = game.managers[5].meta[2].meta.map(arr => arr.name);
  208.                 break;
  209.             case "pacts":
  210.                 possibleValues = game.managers[5].meta[3].meta.map(arr => arr.name);
  211.                 break;
  212.             case "upgrades":
  213.                 possibleValues = game.managers[0].meta[0].meta.map(arr => arr.name);
  214.                 break;
  215.             case "zebraUpgrades":
  216.                 possibleValues = game.managers[0].meta[1].meta.map(arr => arr.name);
  217.                 break;
  218.         }
  219.        
  220.         if(possibleValues)
  221.         {
  222.             /*var sSearch = /function\(model\).?{/;
  223.             var sReplace = `function(model, iVal=0) {
  224.                
  225.            
  226.             `;*/
  227.            
  228.             var oController = game.mods.sophie.myGetController(possibleValues[0], aListOfLabels[i]);
  229.             //var sFuncString = oController.getPrices.toString();
  230.             //*sFuncString = sFuncString.replace(`function(model)`, `function(model, iVal=0)`);
  231.             //game.mods.sophie.queueLabelsAndValues.push([aListOfLabels[i], possibleValues, sFuncString]);
  232.             game.mods.sophie.queueLabelsAndValues.push([aListOfLabels[i], possibleValues]);
  233.         }
  234.         else
  235.         {
  236.             console.error("unknow item:", aListOfLabels[i]);
  237.         }
  238.     }
  239. };
  240.  
  241. game.mods.sophie.nameToType = function (sName)
  242. {
  243.     for(var i=0 ;i<game.mods.sophie.queueLabelsAndValues.length; i++)
  244.     {
  245.         if(game.mods.sophie.queueLabelsAndValues[i][1].includes(sName))
  246.         {
  247.             return game.mods.sophie.queueLabelsAndValues[i][0];
  248.         }
  249.     }
  250.     return false;
  251. };
  252.  
  253.  
  254.  
  255.  
  256.  
  257. game.mods.sophie.myGetModel = function (sElName, sElType)
  258. {
  259.     var oController = game.mods.sophie.myGetController(sElName, sElType);
  260.     if(sElType == "buildings")
  261.     {
  262.         var itemMetaRaw = game.getUnlockByName(sElName, sElType);
  263.         var bld = new classes.BuildingMeta(itemMetaRaw).getMeta();
  264.         props = {
  265.             id:             bld.name,
  266.             key:            bld.name,
  267.             name:           bld.label,
  268.             description:    bld.description,
  269.             building:       bld.name
  270.         };
  271.         return oController.fetchModel(props);
  272.     }
  273.     return oController.fetchModel({"id":sElName});
  274.    
  275. };
  276.  
  277. game.mods.sophie.smartGetModel = function (sName)
  278. {
  279.     var sType = game.mods.sophie.nameToType(sName);
  280.     if(!sType)
  281.     {
  282.         console.error("game.mods.sophie.smartGetModel type from item not found in game.mods.sophie.queueLabelsAndValues ", sName);
  283.         return false;
  284.     }
  285.     else
  286.     {
  287.         return game.mods.sophie.myGetModel(sName, sType);
  288.     }  
  289. };
  290.  
  291.  
  292. game.mods.sophie.myGetPrices = function (sName, sType, iAddValue = 0)
  293. {
  294.     // make a fake model
  295.     var oController = game.mods.sophie.myGetController(sName, sType);
  296.     var oModelSource = game.mods.sophie.myGetModel(sName, sType);
  297.     if(sType == "buildings")
  298.     {
  299.         return game.bld.getPricesWithAccessor(oModelSource.metaAccessor, iAddValue);
  300.     }
  301.  
  302.     if(game.time.queue.queueNonStackable.includes(sType))
  303.     {
  304.         return oController.getPrices(oModelSource);
  305.     }
  306.     else
  307.     {
  308.         var oFakeModel = {};
  309.         oFakeModel.metadata = {}
  310.         oFakeModel.metadata.prices = oModelSource.metadata.prices;
  311.         oFakeModel.metadata.priceRatio = oModelSource.metadata.priceRatio;
  312.         oFakeModel.metadata.name = oModelSource.metadata.name;
  313.        
  314.         oFakeModel.metadata.val = oModelSource.metadata.val;
  315.         oFakeModel.metadata.val += iAddValue;
  316.  
  317.         return oController.getPrices(oFakeModel);
  318.     }
  319. };
  320.  
  321. game.mods.sophie.smartGetPrices = function (sName, iAddValue = 0)
  322. {
  323.     var sType = game.mods.sophie.nameToType(sName);
  324.     if(!sType)
  325.     {
  326.         console.error("game.mods.sophie.smartGetPrices type from item not found in game.mods.sophie.queueLabelsAndValues ", sName);
  327.         return false;
  328.     }
  329.     else
  330.     {
  331.         return game.mods.sophie.myGetPrices(sName, sType, iAddValue);
  332.     }      
  333. };
  334.  
  335. game.mods.sophie.smartGetPricesSum = function (sName, iAddValue = 0)
  336. {
  337.     var sType = game.mods.sophie.nameToType(sName);
  338.     if(!sType)
  339.     {
  340.         console.error("game.mods.sophie.smartGetPrices type from item not found in game.mods.sophie.queueLabelsAndValues ", sName);
  341.         return false;
  342.     }
  343.     else
  344.     {
  345.         if(game.time.queue.queueNonStackable.includes(sType))
  346.         {
  347.             return game.mods.sophie.myGetPrices(sName, sType);
  348.         }
  349.        
  350.         var aPricesSum = [];
  351.         var aPricesSum2 = [];
  352.  
  353.  
  354.         for(var i=0; i<iAddValue+1; i++)
  355.         {
  356.             var aPrices = game.mods.sophie.myGetPrices(sName, sType, i);
  357.             aPricesSum2.push(aPrices);
  358.             for(var j=0; j<aPrices.length; j++)
  359.             {
  360.                 if(!aPricesSum.find(o => o.name === aPrices[j].name))
  361.                 {
  362.                     aPricesSum.push({"name":aPrices[j].name, "val":0});
  363.                 }
  364.                
  365.                 var iIndex = aPricesSum.findIndex(o => o.name === aPrices[j].name) ;
  366.                 aPricesSum[iIndex].val += aPrices[j].val;
  367.             }
  368.            
  369.         }
  370.        
  371.         return aPricesSum;
  372.     }      
  373. };
  374.  
  375.  
  376.  
  377.  
  378. game.mods.sophie.smartBuild = function (sName, iValue = 1)
  379. {
  380.     var sType = game.mods.sophie.nameToType(sName);
  381.     if(!sType)
  382.     {
  383.         console.error("game.mods.sophie.smartBuild type from item not found in game.mods.sophie.queueLabelsAndValues ", sName);
  384.         return false;
  385.     }
  386.     else
  387.     {
  388.         return game.mods.sophie.myBuild(sName, sType, iValue);
  389.     }
  390. };
  391.  
  392. game.mods.sophie.init = function ()
  393. {
  394.     if(!game.mods.sophie.myBuild)
  395.     {  
  396.         game.mods.sophie.genMyBuildFunction();
  397.         game.mods.sophie.fillPossibleValues();
  398.     }
  399. };
  400.  
  401. game.mods.sophie.init();
  402.  
  403.  
  404.  
Tags: Kittensgame
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement