Advertisement
LaniusFNV

TC Optimizer

Nov 28th, 2020
2,727
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.02 KB | None | 0 0
  1. import numpy as np
  2. import pandas as pd
  3. import sys
  4.  
  5. df = pd.read_csv("FTB Revelations 3.3.0 (1.12) Tinkers.csv")
  6.  
  7.  
  8. # Add Tool totals (Total Durability), ... actually that's it for now.
  9. # df["Total Durability"] = (df["Base Durability"] + df["Handle Durability"] + df["Extra Durability"]) * df["Durability Modifier"]
  10.  
  11. def higher_mining_levels(mining_level: str):
  12.     mining_level = mining_level.lower()
  13.     if mining_level == "stone":
  14.         return ["Iron", "Diamond", "Obsidian", "Cobalt"]
  15.     elif mining_level == "iron":
  16.         return ["Diamond", "Obsidian", "Cobalt"]
  17.     elif mining_level == "diamond":
  18.         return ["Obsidian", "Cobalt"]
  19.     elif mining_level == "obsidian":
  20.         return ["Cobalt"]
  21.     else:
  22.         return []
  23.  
  24. def blacklist(df, mat_blacklist):
  25.     df_blacklist = df
  26.  
  27.     # Get rid of all the stuff on the blacklist
  28.     for mat in mat_blacklist:
  29.         df_blacklist = df_blacklist.loc[df_blacklist["Material"] != mat]
  30.  
  31.     return df_blacklist
  32.  
  33. def optimize_tool(stat: str, min_mining_level: str, mat_blacklist):
  34.     df_blacklist = blacklist(df, mat_blacklist)
  35.  
  36.     # Make sure only stuff with the min mining level is considered
  37.     df_mining_level = df_blacklist.loc[df_blacklist["Mining Level"] == min_mining_level.capitalize()]
  38.     dur = dict()
  39.  
  40.     # Also consider stuff with higher mining levels
  41.     for mining_level in higher_mining_levels(min_mining_level):
  42.         higher = df_blacklist.loc[df_blacklist["Mining Level"] == mining_level]
  43.         df_mining_level = df_mining_level.append(higher)
  44.  
  45.     df_stat = df_mining_level
  46.  
  47.     # Get the Head stuff
  48.     if stat.lower() == "durability":
  49.         df_stat = df_stat.loc[df_blacklist["Base Durability"] == df_stat["Base Durability"].max()]
  50.         dur["Head Material"] = df_stat["Material"]
  51.         dur["Head Durability"] = df_stat["Base Durability"]
  52.     elif stat.lower() == "mining speed":
  53.         df_stat = df_stat.loc[df_blacklist["Mining Speed"] == df_stat["Mining Speed"].max()]
  54.         dur["Head Material"] = df_stat["Material"]
  55.         dur["Mining Speed"] = df_stat["Mining Speed"]
  56.     elif stat.lower() == "attack":
  57.         df_stat = df_stat.loc[df_blacklist["Attack"] == df_stat["Attack"].max()]
  58.         dur["Head Material"] = df_stat["Material"]
  59.         dur["Attack"] = df_stat["Attack"]
  60.  
  61.     # Get the Handle stuff
  62.     df_dur = df_blacklist.loc[df_blacklist["Durability Modifier"] == df_blacklist["Durability Modifier"].max()]
  63.     dur["Handle Material"] = df_dur["Material"]
  64.     dur["Handle Durability"] = df_dur["Handle Durability"]
  65.     dur["Durability Modifier"] = df_dur["Durability Modifier"]
  66.  
  67.     # Get the Extra stuff
  68.     df_dur = df_blacklist.loc[df_blacklist["Extra Durability"] == df_blacklist["Extra Durability"].max()]
  69.     dur["Extra Material"] = df_dur["Material"]
  70.     dur["Extra Durability"] = df_dur["Extra Durability"]
  71.  
  72.     return pd.DataFrame(data=dur)
  73.  
  74. def optimize_armor(stat: str, mat_blacklist):
  75.     df_blacklist = blacklist(df, mat_blacklist)
  76.  
  77.     damage_values = []
  78.  
  79.     # average damage reduction doesn't work yet
  80.     #for damage in range(1, 101):
  81.     #    damage_values[damage] = damage * (1 - (min(20, max(df_blacklist["Armor Core Defense"] / 5, df_blacklist["Armor Core Defense"] - (damage / 2 + df_blacklist["Armor Plates Toughness"] / 4))) / 25))
  82.  
  83.     #df_blacklist["Average Damage Reduction"] = np.mean(damage_values)
  84.  
  85.     dur = dict()
  86.  
  87.     if stat.lower() == "defense":
  88.         df_stat = df_blacklist.loc[df_blacklist["Armor Core Defense"] == df_blacklist["Armor Core Defense"].max()]
  89.         dur["Armor Core Material"] = df_stat["Material"]
  90.         dur["Armor Core Defense"] = df_stat["Armor Core Defense"]
  91.         df_stat = df_blacklist.loc[df_blacklist["Armor Plates Toughness"] == df_blacklist["Armor Plates Toughness"].max()]
  92.         dur["Armor Plates Material"] = df_stat["Material"]
  93.         dur["Armor Plates Toughness"] = df_stat["Armor Plates Toughness"]
  94.     elif stat.lower() == "durability":
  95.         df_stat = df_blacklist.loc[df_blacklist["Armor Core Durability"] == df_blacklist["Armor Core Durability"].max()]
  96.         dur["Armor Core Material"] = df_stat["Material"]
  97.         dur["Armor Core Durability"] = df_stat["Armor Core Durability"]
  98.         df_stat = df_blacklist.loc[df_blacklist["Armor Plates Durability Modifier"] == df_blacklist["Armor Plates Durability Modifier"].max()]
  99.         dur["Armor Plates Material"] = df_stat["Material"]
  100.         dur["Armor Plates Durability"] = df_stat["Armor Plates Durability"]
  101.     df_dur = df_blacklist.loc[df_blacklist["Armor Trim Durability"] == df_blacklist["Armor Trim Durability"].max()]
  102.     dur["Armor Trim Material"] = df_dur["Material"]
  103.     dur["Armor Trim Durability"] = df_dur["Armor Trim Durability"]
  104.  
  105.     return pd.DataFrame(data=dur)
  106.  
  107. def optimize(kind: str, stat: str, min_mining_level: str, mat_blacklist):
  108.     if kind == "tools":
  109.         return optimize_tool(stat, min_mining_level, mat_blacklist)
  110.     else:
  111.         return optimize_armor(stat, mat_blacklist)
  112.  
  113. mat_blacklist = [
  114.     #"Evil Infused Iron",
  115.     #"Cobalt",
  116.     #"Reinforced Pink Slime",
  117.     #"End Steel",
  118.     #"Obsidian",
  119.     #"Manyullyn",
  120.     #"Knightly",
  121.     #"Dark Steel",
  122.     #"Soularium",
  123.     #"Ardite",
  124.     #"Vibrant Alloy",
  125.     #"Energetic Alloy",
  126.     #"Pink Slime",
  127.     #"Fiery",
  128.     #"Blue Slime",
  129.     #"Slime",
  130.     #"Sponge",
  131.     #"Electrum",
  132.     #"Pulsating Iron",
  133.     #"Conductive Iron",
  134.     #"Steeleaf",
  135.     #"Steel",
  136.     #"Bronze",
  137.     #"Pig Iron",
  138.     #"Magma Slime",
  139.     #"Firewood",
  140.     #"Redstone Alloy",
  141.     #"Plastic",
  142.     #"Silver",
  143.     #"Enchanted Metal",
  144.     #"Bone",
  145.     #"Electrical Steel",
  146.     #"Iron",
  147.     #"Corrupted",
  148.     #"Copper",
  149.     #"Knightslime",
  150.     #"Constantan",
  151.     #"Treated Wood",
  152.     #"Magical Wood",
  153.     #"Prismarine",
  154.     #"Lead",
  155.     #"End",
  156.     #"Wood",
  157.     #"Netherrack",
  158.     #"Cactus",
  159.     #"Naga Scale",
  160.     #"Flint",
  161.     #"Stone",
  162.     #"Iron Alloy",
  163.     #"Demonic Metal",
  164.     #"Paper"
  165. ]
  166.  
  167. # optimize works as follows:
  168.     # the first argument determines whether to optimize "tools" or "armor"
  169.     #
  170.     # the second argument determines the stat to optimize for
  171.     # currently the following stats are supported for tools:
  172.         # "durability": For the head and the extra, look for the maximum durability. For the handle look for maximum durability modifier.
  173.         # "mining speed": For the head look for maximum mining speed and for the others look for max durability as above.
  174.         # "attack": For the head look for maximum attack and for the others look for max durability as above.
  175.     # for armor these stats are available:
  176.         # "defense": For the core look for maximum defense, for the plates look for maximum toughness, for the trim look for maximum durability.
  177.         # "durability" For any part look for maximum durability.
  178.     #
  179.     # the third argument is the mining level a tool should have at least
  180.     # this is ignored for armors
  181.     #
  182.     # the fourth argument is a blacklist of materials you don't want to use
  183. print(optimize("armor", "defense", "stone", mat_blacklist))
  184.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement