Module:Farming

From SWGoH Wiki
Jump to navigationJump to search

Documentation for this module may be created at Module:Farming/doc

local call = {}

function split(inputstr, sep)
        if sep == nil then
                sep = ","
        end
        local t={}
        for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                table.insert(t, trim(str))
        end
        return t
end


function trim(s)
   return s:match( "^%s*(.-)%s*$" )
end

function call.charFarm(a)
  locations = split(a.args[1],",")
  ignore = split(a.args.ignore,",")
  slot = a.args.slot
  rank = {
   galactic_war_store = 1,
   cantina_battle = 2,
   cantina_store = 3,
   arena_store = 4,
   guild_store = 5,
   fleet_store = 6,
   ls_battle = 7,
   ds_battle = 8,
   fleet_battle = 9,
   shard_shop = 10,
   event = 11,
   guild_event_store = 12
  }
  rankFilled = {
   galactic_war_store = "",
   cantina_battle = "",
   cantina_store = "",
   arena_store = "",
   guild_store = "",
   fleet_store = "",
   ls_battle = "",
   ds_battle = "",
   fleet_battle = "",
   shard_shop = "",
   event = "",
   guild_event_store = ""   
  }
  result = ""
  locRank = {}
  if(table.maxn(locations) == 1) then
    if(slot == "Best") then
      result = "[["..locations[1].."]]"
    else
      result = "na"
    end
  else
    for i,loc in ipairs(locations) do
      locRank[i] = {}
      if(string.find(loc, "Galactic War") ~= nil) then
        if(rankFilled["galactic_war_store"] == "") then          
          locRank[i].rank = 1
          locRank[i].pos = i
          rankFilled["galactic_war_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Cantina Battles Store") ~= nil) then
        if(rankFilled["cantina_store"] == "") then          
          locRank[i].rank = 3
          locRank[i].pos = i
          rankFilled["cantina_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Cantina Battle") ~= nil) then
          if(rankFilled["cantina_battle"] == "") then          
            locRank[i].rank = 2
            locRank[i].pos = i
            rankFilled["cantina_battle"] = "Yes"  
          else
            locRank[i].rank = 13
            locRank[i].pos = i
          end
      elseif(string.find(loc, "Squad Arena") ~= nil) then
        if(rankFilled["arena_store"] == "") then          
          locRank[i].rank = 4
          locRank[i].pos = i
          rankFilled["arena_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Guild Store") ~= nil) then
        if(rankFilled["guild_store"] == "") then          
          locRank[i].rank = 5
          locRank[i].pos = i
          rankFilled["guild_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Fleet Arena") ~= nil) then
        if(rankFilled["fleet_store"] == "") then          
          locRank[i].rank = 6
          locRank[i].pos = i
          rankFilled["fleet_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Light Side") ~= nil) then
        if(rankFilled["ls_battle"] == "") then          
          locRank[i].rank = 7
          locRank[i].pos = i
          rankFilled["ls_battle"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Dark Side") ~= nil) then
        if(rankFilled["ds_battle"] == "") then          
          locRank[i].rank = 8
          locRank[i].pos = i
          rankFilled["ds_battle"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Fleet Battle") ~= nil) then
        if(rankFilled["fleet_battle"] == "") then          
          locRank[i].rank = 9
          locRank[i].pos = i
          rankFilled["fleet_battle"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Shard Shop") ~= nil) then
        if(rankFilled["shard_shop"] == "") then          
          locRank[i].rank = 10
          locRank[i].pos = i
          rankFilled["shard_shop"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Guild Event") ~= nil) then
        if(rankFilled["guild_event_store"] == "" and table.maxn(locations) == 2) then          
          locRank[i].rank = 12
          locRank[i].pos = i
          rankFilled["guild_event_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      else
        if(string.find(loc, "Shipment") == nil) then
          if(table.maxn(locations) == 2) then
            if(rankFilled["event"] == "") then          
              locRank[i].rank = 11
              locRank[i].pos = i
              rankFilled["event"] = "Yes"  
            else
              locRank[i].rank = 13
              locRank[i].pos = i
            end
          else
              locRank[i].rank = 13
              locRank[i].pos = i
          end
        else
          locRank[i].rank = 14
          locRank[i].pos = i
        end
      end
    end
  end

table.sort(locRank, function( a,b )
    --if (a.rank < b.rank) then
    --    return true
    --elseif (a.rank > b.rank) then
    --    return false
    --else
        return a.rank < b.rank
    --end
end)

  remove = false
  if(table.maxn(locations) > 1) then
    if(slot == "Best") then
      return "[["..locations[locRank[1].pos].."]]"
    elseif(slot == "Better") then
      if(locRank[2].rank > 12) then
        return "na"
      else
        for i,content in ipairs(ignore) do
          if(content == locations[locRank[2].pos]) then
            remove = true
          end
        end
        if(remove) then
          return "na"
        else
          return "[["..locations[locRank[2].pos].."]]"
        end
      end
    elseif(slot == "Decent") then
      if(table.maxn(locations) > 2) then
        if(locRank[3].rank > 12) then
          return "na"
        else
          for i,content in ipairs(ignore) do
            if(content == locations[locRank[3].pos]) then
              remove = true
            end
          end
          if(remove) then
            return "na"
          else
            return "[["..locations[locRank[3].pos].."]]"
          end
        end
      else
        return "na"
      end
    end
  end
  return result
end


function call.shipFarm(a)
  locations = split(a.args[1],",")
  ignore = split(a.args.ignore,",")
  slot = a.args.slot
  rank = {
   galactic_war_store = 1,
   cantina_battle = 2,
   cantina_store = 3,
   arena_store = 4,
   guild_store = 5,
   fleet_store = 6,
   fleet_battle = 7,
   ls_battle = 8,
   ds_battle = 9,
   shard_shop = 10,
   event = 11,
   guild_event_store = 12
  }
  rankFilled = {
   galactic_war_store = "",
   cantina_battle = "",
   cantina_store = "",
   arena_store = "",
   guild_store = "",
   fleet_store = "",
   ls_battle = "",
   ds_battle = "",
   fleet_battle = "",
   shard_shop = "",
   event = "",
   guild_event_store = ""   
  }
  result = ""
  locRank = {}
  if(table.maxn(locations) == 1) then
    if(slot == "Best") then
      result = "[["..locations[1].."]]"
    else
      result = "na"
    end
  else
    for i,loc in ipairs(locations) do
      locRank[i] = {}
      if(string.find(loc, "Galactic War") ~= nil) then
        if(rankFilled["galactic_war_store"] == "") then          
          locRank[i].rank = 1
          locRank[i].pos = i
          rankFilled["galactic_war_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Cantina Battles Store") ~= nil) then
        if(rankFilled["cantina_store"] == "") then          
          locRank[i].rank = 3
          locRank[i].pos = i
          rankFilled["cantina_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Cantina Battle") ~= nil) then
          if(rankFilled["cantina_battle"] == "") then          
            locRank[i].rank = 2
            locRank[i].pos = i
            rankFilled["cantina_battle"] = "Yes"  
          else
            locRank[i].rank = 13
            locRank[i].pos = i
          end
      elseif(string.find(loc, "Squad Arena") ~= nil) then
        if(rankFilled["arena_store"] == "") then          
          locRank[i].rank = 4
          locRank[i].pos = i
          rankFilled["arena_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Guild Store") ~= nil) then
        if(rankFilled["guild_store"] == "") then          
          locRank[i].rank = 5
          locRank[i].pos = i
          rankFilled["guild_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Fleet Arena") ~= nil) then
        if(rankFilled["fleet_store"] == "") then          
          locRank[i].rank = 6
          locRank[i].pos = i
          rankFilled["fleet_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Light Side") ~= nil) then
        if(rankFilled["ls_battle"] == "") then          
          locRank[i].rank = 8
          locRank[i].pos = i
          rankFilled["ls_battle"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Dark Side") ~= nil) then
        if(rankFilled["ds_battle"] == "") then          
          locRank[i].rank = 9
          locRank[i].pos = i
          rankFilled["ds_battle"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Fleet Battle") ~= nil) then
        if(rankFilled["fleet_battle"] == "") then          
          locRank[i].rank = 7
          locRank[i].pos = i
          rankFilled["fleet_battle"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Shard Shop") ~= nil) then
        if(rankFilled["shard_shop"] == "") then          
          locRank[i].rank = 10
          locRank[i].pos = i
          rankFilled["shard_shop"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      elseif(string.find(loc, "Guild Event") ~= nil) then
        if(rankFilled["guild_event_store"] == "" and table.maxn(locations) == 2) then          
          locRank[i].rank = 12
          locRank[i].pos = i
          rankFilled["guild_event_store"] = "Yes"  
        else
          locRank[i].rank = 13
          locRank[i].pos = i
        end
      else
        if(string.find(loc, "Shipment") == nil) then
          if(table.maxn(locations) == 2) then
            if(rankFilled["event"] == "") then          
              locRank[i].rank = 11
              locRank[i].pos = i
              rankFilled["event"] = "Yes"  
            else
              locRank[i].rank = 13
              locRank[i].pos = i
            end
          else
              locRank[i].rank = 13
              locRank[i].pos = i
          end
        else
          locRank[i].rank = 14
          locRank[i].pos = i
        end
      end
    end
  end

table.sort(locRank, function( a,b )
    --if (a.rank < b.rank) then
    --    return true
    --elseif (a.rank > b.rank) then
    --    return false
    --else
        return a.rank < b.rank
    --end
end)

  remove = false
  if(table.maxn(locations) > 1) then
    if(slot == "Best") then
      return "[["..locations[locRank[1].pos].."]]"
    elseif(slot == "Better") then
      if(locRank[2].rank > 12) then
        return "na"
      else
        for i,content in ipairs(ignore) do
          if(content == locations[locRank[2].pos]) then
            remove = true
          end
        end
        if(remove) then
          return "na"
        else
          return "[["..locations[locRank[2].pos].."]]"
        end
      end
    elseif(slot == "Decent") then
      if(table.maxn(locations) > 2) then
        if(locRank[3].rank > 12) then
          return "na"
        else
          for i,content in ipairs(ignore) do
            if(content == locations[locRank[3].pos]) then
              remove = true
            end
          end
          if(remove) then
            return "na"
          else
            return "[["..locations[locRank[3].pos].."]]"
          end
        end
      else
        return "na"
      end
    end
  end
  return result
end



return call