Advertisement
Hiranus

Starbound LiquidMix

Dec 15th, 2018
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.89 KB | None | 0 0
  1. require "/HLib/Scripts/HelperScripts.lua"
  2. function GetLiquidCombinations()
  3.  
  4.   local Liquids = {};
  5.  
  6.   local function LiquidInteraction (ingredient1,ingredient2,result)
  7.     local self =  {};
  8.     self.Ingredient1 = ingredient1;
  9.     self.Ingredient2 = ingredient2;
  10.     self.Result = result;
  11.     return self;
  12.   end
  13.  
  14.   for i=1,256 do
  15.     local liquid = root.liquidConfig(i);
  16.     if liquid then
  17.       Liquids[i] = liquid;
  18.     end
  19.   end
  20.  
  21.   local ItemLiquids = {}
  22.   local nameToItem = function (itemname)
  23.     return Item({name = itemname,count = 1});
  24.   end
  25.   local nameToDisplayName = function (id,itemname)
  26.     if id == 8 then
  27.       return "Core Lava";
  28.     else
  29.       return nameToItem(itemname).DisplayName;
  30.     end
  31.   end
  32.  
  33.   local materialToDisplayName = function (material)
  34.     return nameToItem(root.materialConfig(material).config.itemDrop).DisplayName;
  35.   end
  36.  
  37.   for id,liquid in pairs(Liquids) do
  38.     local item = nameToDisplayName(id,liquid.config.itemDrop);
  39.     ItemLiquids[id] = {Name = item; Interactions = liquid.config.interactions};
  40.   end
  41.  
  42.   local LiquidInteractions = {};
  43.  
  44.   for id,liquid in pairs(ItemLiquids) do
  45.     if liquid.Interactions then
  46.       for i=1,#liquid.Interactions do
  47.         local mix = liquid.Interactions[i];
  48.         if mix.materialResult then
  49.           LiquidInteractions[#LiquidInteractions + 1] = LiquidInteraction(liquid.Name,ItemLiquids[mix.liquid].Name,materialToDisplayName(mix.materialResult));
  50.         else
  51.           if mix.liquidResult ~= 0 then
  52.             LiquidInteractions[#LiquidInteractions + 1] = LiquidInteraction(liquid.Name,ItemLiquids[mix.liquid].Name,ItemLiquids[mix.liquidResult].Name);
  53.           end
  54.         end
  55.       end
  56.     end
  57.   end
  58.  
  59.   local interactions = #LiquidInteractions;
  60.   for i=1,interactions do
  61.     LiquidInteractions[#LiquidInteractions + 1] = LiquidInteraction(LiquidInteractions[i].Ingredient2,LiquidInteractions[i].Ingredient1,LiquidInteractions[i].Result);
  62.   end
  63.  
  64.   local output = "";
  65.  
  66.   for i=1,#LiquidInteractions do
  67.     output = output .. LiquidInteractions[i].Ingredient1 .. ";"..LiquidInteractions[i].Ingredient2.. ";"..LiquidInteractions[i].Result.."\n";
  68.   end
  69.   LogDebug(output);
  70.   output = "";
  71.   local results = {};
  72.  
  73.   local function res_contains(int)
  74.     for i=1,#results do
  75.       if results[i].Result == int.Result and ((results[i].Ingredient1 == int.Ingredient1 and results[i].Ingredient2 == int.Ingredient2) or ((results[i].Ingredient1 == int.Ingredient2 and results[i].Ingredient2 == int.Ingredient1))) then
  76.         return true;
  77.       end
  78.     end
  79.     return false;
  80.   end
  81.  
  82.   for i=1,#LiquidInteractions do
  83.     if not res_contains(LiquidInteractions[i]) then
  84.       results[#results + 1] = LiquidInteractions[i];
  85.       output = output .. LiquidInteractions[i].Ingredient1 .. ";"..LiquidInteractions[i].Ingredient2.. ";"..LiquidInteractions[i].Result.."\n";
  86.     end
  87.   end
  88.   LogDebug(output);
  89.  
  90. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement