Hiranus icon

Starbound LiquidMix

Hiranus | PRO | 12/15/18 05:52:27 PM UTC | 0 ⭐ | 471 👁️ | Never ⏰ | []
Lua |

2.89 KB

|

None

|

0 👍

/

0 👎

require "/HLib/Scripts/HelperScripts.lua"
function GetLiquidCombinations()
 
  local Liquids = {};
 
  local function LiquidInteraction (ingredient1,ingredient2,result)
    local self =  {};
    self.Ingredient1 = ingredient1;
    self.Ingredient2 = ingredient2;
    self.Result = result;
    return self;
  end
 
  for i=1,256 do
    local liquid = root.liquidConfig(i);
    if liquid then
      Liquids[i] = liquid;
    end
  end
 
  local ItemLiquids = {}
  local nameToItem = function (itemname)
    return Item({name = itemname,count = 1});
  end
  local nameToDisplayName = function (id,itemname)
    if id == 8 then
      return "Core Lava";
    else
      return nameToItem(itemname).DisplayName;
    end
  end
 
  local materialToDisplayName = function (material)
    return nameToItem(root.materialConfig(material).config.itemDrop).DisplayName;
  end
 
  for id,liquid in pairs(Liquids) do
    local item = nameToDisplayName(id,liquid.config.itemDrop);
    ItemLiquids[id] = {Name = item; Interactions = liquid.config.interactions};
  end
 
  local LiquidInteractions = {};
 
  for id,liquid in pairs(ItemLiquids) do
    if liquid.Interactions then
      for i=1,#liquid.Interactions do
        local mix = liquid.Interactions[i];
        if mix.materialResult then
          LiquidInteractions[#LiquidInteractions + 1] = LiquidInteraction(liquid.Name,ItemLiquids[mix.liquid].Name,materialToDisplayName(mix.materialResult));
        else
          if mix.liquidResult ~= 0 then
            LiquidInteractions[#LiquidInteractions + 1] = LiquidInteraction(liquid.Name,ItemLiquids[mix.liquid].Name,ItemLiquids[mix.liquidResult].Name);
          end
        end
      end
    end
  end
 
  local interactions = #LiquidInteractions;
  for i=1,interactions do
    LiquidInteractions[#LiquidInteractions + 1] = LiquidInteraction(LiquidInteractions[i].Ingredient2,LiquidInteractions[i].Ingredient1,LiquidInteractions[i].Result);
  end
 
  local output = "";
 
  for i=1,#LiquidInteractions do
    output = output .. LiquidInteractions[i].Ingredient1 .. ";"..LiquidInteractions[i].Ingredient2.. ";"..LiquidInteractions[i].Result.."\n";
  end
  LogDebug(output);
  output = "";
  local results = {};
 
  local function res_contains(int)
    for i=1,#results do
      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
        return true;
      end
    end
    return false;
  end
 
  for i=1,#LiquidInteractions do
    if not res_contains(LiquidInteractions[i]) then
      results[#results + 1] = LiquidInteractions[i];
      output = output .. LiquidInteractions[i].Ingredient1 .. ";"..LiquidInteractions[i].Ingredient2.. ";"..LiquidInteractions[i].Result.."\n";
    end
  end
  LogDebug(output);
 
end

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎