Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import pandas as pd
- import sys
- df = pd.read_csv("FTB Revelations 3.3.0 (1.12) Tinkers.csv")
- # Add Tool totals (Total Durability), ... actually that's it for now.
- # df["Total Durability"] = (df["Base Durability"] + df["Handle Durability"] + df["Extra Durability"]) * df["Durability Modifier"]
- def higher_mining_levels(mining_level: str):
- mining_level = mining_level.lower()
- if mining_level == "stone":
- return ["Iron", "Diamond", "Obsidian", "Cobalt"]
- elif mining_level == "iron":
- return ["Diamond", "Obsidian", "Cobalt"]
- elif mining_level == "diamond":
- return ["Obsidian", "Cobalt"]
- elif mining_level == "obsidian":
- return ["Cobalt"]
- else:
- return []
- def blacklist(df, mat_blacklist):
- df_blacklist = df
- # Get rid of all the stuff on the blacklist
- for mat in mat_blacklist:
- df_blacklist = df_blacklist.loc[df_blacklist["Material"] != mat]
- return df_blacklist
- def optimize_tool(stat: str, min_mining_level: str, mat_blacklist):
- df_blacklist = blacklist(df, mat_blacklist)
- # Make sure only stuff with the min mining level is considered
- df_mining_level = df_blacklist.loc[df_blacklist["Mining Level"] == min_mining_level.capitalize()]
- dur = dict()
- # Also consider stuff with higher mining levels
- for mining_level in higher_mining_levels(min_mining_level):
- higher = df_blacklist.loc[df_blacklist["Mining Level"] == mining_level]
- df_mining_level = df_mining_level.append(higher)
- df_stat = df_mining_level
- # Get the Head stuff
- if stat.lower() == "durability":
- df_stat = df_stat.loc[df_blacklist["Base Durability"] == df_stat["Base Durability"].max()]
- dur["Head Material"] = df_stat["Material"]
- dur["Head Durability"] = df_stat["Base Durability"]
- elif stat.lower() == "mining speed":
- df_stat = df_stat.loc[df_blacklist["Mining Speed"] == df_stat["Mining Speed"].max()]
- dur["Head Material"] = df_stat["Material"]
- dur["Mining Speed"] = df_stat["Mining Speed"]
- elif stat.lower() == "attack":
- df_stat = df_stat.loc[df_blacklist["Attack"] == df_stat["Attack"].max()]
- dur["Head Material"] = df_stat["Material"]
- dur["Attack"] = df_stat["Attack"]
- # Get the Handle stuff
- df_dur = df_blacklist.loc[df_blacklist["Durability Modifier"] == df_blacklist["Durability Modifier"].max()]
- dur["Handle Material"] = df_dur["Material"]
- dur["Handle Durability"] = df_dur["Handle Durability"]
- dur["Durability Modifier"] = df_dur["Durability Modifier"]
- # Get the Extra stuff
- df_dur = df_blacklist.loc[df_blacklist["Extra Durability"] == df_blacklist["Extra Durability"].max()]
- dur["Extra Material"] = df_dur["Material"]
- dur["Extra Durability"] = df_dur["Extra Durability"]
- return pd.DataFrame(data=dur)
- def optimize_armor(stat: str, mat_blacklist):
- df_blacklist = blacklist(df, mat_blacklist)
- damage_values = []
- # average damage reduction doesn't work yet
- #for damage in range(1, 101):
- # 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))
- #df_blacklist["Average Damage Reduction"] = np.mean(damage_values)
- dur = dict()
- if stat.lower() == "defense":
- df_stat = df_blacklist.loc[df_blacklist["Armor Core Defense"] == df_blacklist["Armor Core Defense"].max()]
- dur["Armor Core Material"] = df_stat["Material"]
- dur["Armor Core Defense"] = df_stat["Armor Core Defense"]
- df_stat = df_blacklist.loc[df_blacklist["Armor Plates Toughness"] == df_blacklist["Armor Plates Toughness"].max()]
- dur["Armor Plates Material"] = df_stat["Material"]
- dur["Armor Plates Toughness"] = df_stat["Armor Plates Toughness"]
- elif stat.lower() == "durability":
- df_stat = df_blacklist.loc[df_blacklist["Armor Core Durability"] == df_blacklist["Armor Core Durability"].max()]
- dur["Armor Core Material"] = df_stat["Material"]
- dur["Armor Core Durability"] = df_stat["Armor Core Durability"]
- df_stat = df_blacklist.loc[df_blacklist["Armor Plates Durability Modifier"] == df_blacklist["Armor Plates Durability Modifier"].max()]
- dur["Armor Plates Material"] = df_stat["Material"]
- dur["Armor Plates Durability"] = df_stat["Armor Plates Durability"]
- df_dur = df_blacklist.loc[df_blacklist["Armor Trim Durability"] == df_blacklist["Armor Trim Durability"].max()]
- dur["Armor Trim Material"] = df_dur["Material"]
- dur["Armor Trim Durability"] = df_dur["Armor Trim Durability"]
- return pd.DataFrame(data=dur)
- def optimize(kind: str, stat: str, min_mining_level: str, mat_blacklist):
- if kind == "tools":
- return optimize_tool(stat, min_mining_level, mat_blacklist)
- else:
- return optimize_armor(stat, mat_blacklist)
- mat_blacklist = [
- #"Evil Infused Iron",
- #"Cobalt",
- #"Reinforced Pink Slime",
- #"End Steel",
- #"Obsidian",
- #"Manyullyn",
- #"Knightly",
- #"Dark Steel",
- #"Soularium",
- #"Ardite",
- #"Vibrant Alloy",
- #"Energetic Alloy",
- #"Pink Slime",
- #"Fiery",
- #"Blue Slime",
- #"Slime",
- #"Sponge",
- #"Electrum",
- #"Pulsating Iron",
- #"Conductive Iron",
- #"Steeleaf",
- #"Steel",
- #"Bronze",
- #"Pig Iron",
- #"Magma Slime",
- #"Firewood",
- #"Redstone Alloy",
- #"Plastic",
- #"Silver",
- #"Enchanted Metal",
- #"Bone",
- #"Electrical Steel",
- #"Iron",
- #"Corrupted",
- #"Copper",
- #"Knightslime",
- #"Constantan",
- #"Treated Wood",
- #"Magical Wood",
- #"Prismarine",
- #"Lead",
- #"End",
- #"Wood",
- #"Netherrack",
- #"Cactus",
- #"Naga Scale",
- #"Flint",
- #"Stone",
- #"Iron Alloy",
- #"Demonic Metal",
- #"Paper"
- ]
- # optimize works as follows:
- # the first argument determines whether to optimize "tools" or "armor"
- #
- # the second argument determines the stat to optimize for
- # currently the following stats are supported for tools:
- # "durability": For the head and the extra, look for the maximum durability. For the handle look for maximum durability modifier.
- # "mining speed": For the head look for maximum mining speed and for the others look for max durability as above.
- # "attack": For the head look for maximum attack and for the others look for max durability as above.
- # for armor these stats are available:
- # "defense": For the core look for maximum defense, for the plates look for maximum toughness, for the trim look for maximum durability.
- # "durability" For any part look for maximum durability.
- #
- # the third argument is the mining level a tool should have at least
- # this is ignored for armors
- #
- # the fourth argument is a blacklist of materials you don't want to use
- print(optimize("armor", "defense", "stone", mat_blacklist))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement