Initial Release of IGNCore version 2.5
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
from core.chat_blob import ChatBlob
|
||||
from core.command_param_types import Any
|
||||
from core.db import DB
|
||||
from core.decorators import instance, command
|
||||
|
||||
|
||||
@instance()
|
||||
class ClusterController:
|
||||
def inject(self, registry):
|
||||
self.db: DB = registry.get_instance("db")
|
||||
self.text = registry.get_instance("text")
|
||||
self.command_alias_service = registry.get_instance("command_alias_service")
|
||||
|
||||
def start(self):
|
||||
self.command_alias_service.add_alias("clusters", "cluster")
|
||||
|
||||
@command(command="cluster", params=[], access_level="member",
|
||||
description="Show a list of implant slots and a list of attributes "
|
||||
"that can be buffed with an implant cluster")
|
||||
def cluster_list_cmd(self, _):
|
||||
data = self.db.query("SELECT Name, ShortName FROM ImplantType ORDER BY ImplantTypeID")
|
||||
blob = f"<header2>Slots ({len(data):d})</header2>\n"
|
||||
for row in data:
|
||||
blob += self.text.make_tellcmd(row.Name, f"cluster {row.ShortName}") + "\n"
|
||||
|
||||
data = self.db.query("SELECT ClusterID, LongName FROM Cluster WHERE ClusterID != 0 ORDER BY LongName")
|
||||
blob += f"\n<header2>Attributes ({len(data):d})</header2>\n"
|
||||
for row in data:
|
||||
blob += self.text.make_tellcmd(row["LongName"], f"cluster {row['LongName']}") + "\n"
|
||||
|
||||
return ChatBlob("Clusters", blob)
|
||||
|
||||
@command(command="cluster", params=[Any("attribute_or_slot")], access_level="member",
|
||||
description="Show which clusters buff a particular attribute, "
|
||||
"or which attributes can be buffed from a particular slot")
|
||||
def cluster_attribute_cmd(self, _, search):
|
||||
slot_data = self.db.query("SELECT ImplantTypeID, Name, ShortName FROM ImplantType "
|
||||
"WHERE Name <EXTENDED_LIKE=0> ? OR ShortName <EXTENDED_LIKE=1> ?",
|
||||
[search, search], extended_like=True)
|
||||
slot_count = len(slot_data)
|
||||
|
||||
if slot_count == 1:
|
||||
implant_type = slot_data[0]
|
||||
data = self.db.query("SELECT c2.Name AS cluster_type, c3.LongName AS attribute FROM ClusterImplantMap c1 "
|
||||
"JOIN ClusterType c2 ON c1.ClusterTypeID = c2.ClusterTypeID "
|
||||
"JOIN Cluster c3 ON c1.ClusterID = c3.ClusterID "
|
||||
"WHERE ImplantTypeID = ? "
|
||||
"ORDER BY c2.ClusterTypeID DESC, c3.LongName",
|
||||
[implant_type.ImplantTypeID])
|
||||
return self.format_slot_output(implant_type.Name, data)
|
||||
else:
|
||||
attribute_data = self.db.query("SELECT ClusterID, LongName FROM Cluster "
|
||||
"WHERE LongName <EXTENDED_LIKE=0> ?",
|
||||
[search], extended_like=True)
|
||||
attribute_count = len(attribute_data)
|
||||
|
||||
if attribute_count == 0:
|
||||
return f"No attributes or slots found that match <highlight>{search}</highlight>."
|
||||
else:
|
||||
return self.format_attribute_output(attribute_data)
|
||||
|
||||
def format_attribute_output(self, data):
|
||||
count = len(data)
|
||||
blob = ""
|
||||
for row in data:
|
||||
data2 = self.db.query("SELECT i.ShortName as Slot, c2.Name AS ClusterType "
|
||||
"FROM ClusterImplantMap c1 "
|
||||
"JOIN ClusterType c2 ON c1.ClusterTypeID = c2.ClusterTypeID "
|
||||
"JOIN ImplantType i ON c1.ImplantTypeID = i.ImplantTypeID "
|
||||
"WHERE c1.ClusterID = ? "
|
||||
"ORDER BY c2.ClusterTypeID DESC", [row["ClusterID"]])
|
||||
|
||||
blob += "<pagebreak><header2>%s</header2>\n" % row["LongName"]
|
||||
for row2 in data2:
|
||||
blob += "%s: <highlight>%s</highlight><tab>" % (row2["ClusterType"].capitalize(), row2["Slot"])
|
||||
blob += "\n\n"
|
||||
blob += "\n* indicates Jobe Cluster"
|
||||
|
||||
return ChatBlob("Cluster Search Results (%d)" % count, blob)
|
||||
|
||||
def format_slot_output(self, slot, data):
|
||||
count = len(data)
|
||||
blob = ""
|
||||
current_cluster_type = ""
|
||||
for row in data:
|
||||
if row.cluster_type != current_cluster_type:
|
||||
blob += f"\n<header2>{row.cluster_type.capitalize()}</header2>\n"
|
||||
current_cluster_type = row.cluster_type
|
||||
blob += self.text.make_tellcmd(row.attribute, f"cluster {row.attribute}") + "\n"
|
||||
blob += "\n\n"
|
||||
blob += "* indicates Jobe Cluster"
|
||||
|
||||
return ChatBlob(f"{slot} Attributes ({count:d})", blob)
|
||||
@@ -0,0 +1,232 @@
|
||||
import math
|
||||
|
||||
from core.chat_blob import ChatBlob
|
||||
from core.command_param_types import Int
|
||||
from core.decorators import instance, command
|
||||
from core.dict_object import DictObject
|
||||
|
||||
|
||||
# noinspection DuplicatedCode
|
||||
@instance()
|
||||
class ImplantController:
|
||||
def __init__(self):
|
||||
self.grades = ["shiny", "bright", "faded"]
|
||||
|
||||
self.normal_ability_req = {1: 6, 200: 404, 201: 426, 300: 1095}
|
||||
self.normal_treatment_req = {1: 11, 200: 951, 201: 1001, 300: 2051}
|
||||
|
||||
self.jobe_ability_req = {1: 6, 200: 464, 201: 476, 300: 1231}
|
||||
self.jobe_treatment_req = {1: 11, 200: 1005, 201: 1001, 300: 2051}
|
||||
|
||||
self.ability_shiny_bonus = {1: 5, 200: 55, 201: 55, 300: 73}
|
||||
self.ability_bright_bonus = {1: 3, 200: 33, 201: 33, 300: 44}
|
||||
self.ability_faded_bonus = {1: 2, 200: 22, 201: 22, 300: 29}
|
||||
|
||||
self.skill_shiny_bonus = {1: 6, 200: 105, 201: 106, 300: 141}
|
||||
self.skill_bright_bonus = {1: 3, 200: 63, 201: 63, 300: 85}
|
||||
self.skill_faded_bonus = {1: 2, 200: 42, 201: 42, 300: 57}
|
||||
|
||||
self.normal_build_shiny = {1: 4, 200: 800, 201: 994, 300: 1575}
|
||||
self.normal_build_bright = {1: 3, 200: 600, 201: 753, 300: 1125}
|
||||
self.normal_build_faded = {1: 2, 200: 400, 201: 552, 300: 825}
|
||||
|
||||
self.jobe_build_shiny = {1: 6, 200: 1250, 201: 1356, 300: 2025}
|
||||
self.jobe_build_bright = {1: 4, 200: 950, 201: 1055, 300: 1575}
|
||||
self.jobe_build_faded = {1: 3, 200: 650, 201: 753, 300: 1125}
|
||||
|
||||
self.clean_np = {1: 1, 200: 200}
|
||||
self.clean_be = {1: 4, 200: 950}
|
||||
|
||||
def inject(self, registry):
|
||||
self.db = registry.get_instance("db")
|
||||
self.util = registry.get_instance("util")
|
||||
self.text = registry.get_instance("text")
|
||||
self.command_alias_service = registry.get_instance("command_alias_service")
|
||||
|
||||
def pre_start(self):
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "Ability.sql", pre_optimized=True)
|
||||
self.db.create_view("Ability")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "Cluster.sql", pre_optimized=True)
|
||||
self.db.create_view("Cluster")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "ClusterImplantMap.sql", pre_optimized=True)
|
||||
self.db.create_view("ClusterImplantMap")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "ClusterType.sql", pre_optimized=True)
|
||||
self.db.create_view("ClusterType")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "EffectTypeMatrix.sql", pre_optimized=True)
|
||||
self.db.create_view("EffectTypeMatrix")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "EffectValue.sql", pre_optimized=True)
|
||||
self.db.create_view("EffectValue")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "ImplantMatrix.sql", pre_optimized=True)
|
||||
self.db.create_view("ImplantMatrix")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "ImplantType.sql", pre_optimized=True)
|
||||
self.db.create_view("ImplantType")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "Profession.sql", pre_optimized=True)
|
||||
self.db.create_view("Profession")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "Symbiant.sql", pre_optimized=True)
|
||||
self.db.create_view("Symbiant")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "SymbiantAbilityMatrix.sql", pre_optimized=True)
|
||||
self.db.create_view("SymbiantAbilityMatrix")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "SymbiantClusterMatrix.sql", pre_optimized=True)
|
||||
self.db.create_view("SymbiantClusterMatrix")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "SymbiantProfessionMatrix.sql", pre_optimized=True)
|
||||
self.db.create_view("SymbiantProfessionMatrix")
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "implant_requirements.sql", pre_optimized=True)
|
||||
self.db.create_view("implant_requirement")
|
||||
|
||||
def start(self):
|
||||
self.command_alias_service.add_alias("implants", "implant")
|
||||
|
||||
@command(command="implant", params=[Int("ql")], access_level="member",
|
||||
description="Shows information about an implant at given QL")
|
||||
def implant_cmd(self, _, ql):
|
||||
if ql > 300 or ql < 1:
|
||||
return "Implant QL must be between <highlight>1</highlight> and <highlight>300</highlight>."
|
||||
|
||||
implant = self.get_implant_by_ql(ql)
|
||||
blob = self.format_implant(implant)
|
||||
|
||||
return ChatBlob(f"Implant QL {implant.ql} ({implant.ability} Ability, {implant.treatment} Treatment)", blob)
|
||||
|
||||
@command(command="implant", params=[Int("ability"), Int("treatment")], access_level="member",
|
||||
description="Shows highest QL implant for a given ability and treatment")
|
||||
def implant_requirement_cmd(self, _, ability, treatment):
|
||||
implant = self.get_implant_by_requirements(ability, treatment)
|
||||
if not implant:
|
||||
return "You do not have enough ability or treatment to wear an implant."
|
||||
|
||||
blob = self.format_implant(implant)
|
||||
|
||||
return ChatBlob(f"Implant QL {implant.ql} ({implant.ability} Ability, {implant.treatment} Treatment)", blob)
|
||||
|
||||
def get_implant_by_requirements(self, ability, treatment):
|
||||
row = self.db.query_single("SELECT ql FROM implant_requirement "
|
||||
"WHERE ability <= ? AND treatment <= ? "
|
||||
"ORDER BY ql DESC LIMIT 1",
|
||||
[ability, treatment])
|
||||
|
||||
if row:
|
||||
return self.get_implant_by_ql(row.ql)
|
||||
else:
|
||||
return None
|
||||
|
||||
def format_implant(self, implant):
|
||||
blob = "<header2>Requirements to Wear</header2>\n"
|
||||
blob += f"<highlight>{implant.treatment}</highlight> Treatment\n"
|
||||
blob += f"<highlight>{implant.ability}</highlight> Ability\n"
|
||||
|
||||
blob += "\n<header2>Ability Cluster Bonuses</header2>\n"
|
||||
blob += f"<highlight>{implant.ability_shiny}</highlight> Shiny " \
|
||||
f"({implant.ability_shiny_min} - {implant.ability_shiny_max})\n"
|
||||
blob += f"<highlight>{implant.ability_bright}</highlight> Bright " \
|
||||
f"({implant.ability_bright_min} - {implant.ability_bright_max})\n"
|
||||
blob += f"<highlight>{implant.ability_faded}</highlight> Faded " \
|
||||
f"({implant.ability_faded_min} - {implant.ability_faded_max})\n"
|
||||
|
||||
blob += "\n<header2>Skill Cluster Bonuses</header2>\n"
|
||||
blob += f"<highlight>{implant.skill_shiny}</highlight> Shiny " \
|
||||
f"({implant.skill_shiny_min} - {implant.skill_shiny_max})\n"
|
||||
blob += f"<highlight>{implant.skill_bright}</highlight> Bright " \
|
||||
f"({implant.skill_bright_min} - {implant.skill_bright_max})\n"
|
||||
blob += f"<highlight>{implant.skill_faded}</highlight> Faded " \
|
||||
f"({implant.skill_faded_min} - {implant.skill_faded_max})\n"
|
||||
|
||||
blob += "\n<header2>Requirements to Clean</header2>\n"
|
||||
if implant.ql <= 200:
|
||||
blob += f"<highlight>{implant.clean_break_and_entry}</highlight> Break&Entry\n"
|
||||
blob += f"<highlight>{implant.clean_nano_programming}</highlight> NanoProgramming\n"
|
||||
else:
|
||||
blob += "Refined implants cannot be cleaned\n"
|
||||
|
||||
blob += "\n<header2>Max Requirements to Build</header2> (actual requirements may be lower)\n"
|
||||
blob += f"<highlight>{implant.build_shiny}</highlight> NanoProgramming for Shiny\n"
|
||||
blob += f"<highlight>{implant.build_bright}</highlight> NanoProgramming for Bright\n"
|
||||
blob += f"<highlight>{implant.build_faded}</highlight> NanoProgramming for Faded\n"
|
||||
|
||||
blob += "\n<header2>Min Cluster QL</header2>\n"
|
||||
blob += f"<highlight>{implant.minimum_cluster_shiny}</highlight> Shiny\n"
|
||||
blob += f"<highlight>{implant.minimum_cluster_bright}</highlight> Bright\n"
|
||||
blob += f"<highlight>{implant.minimum_cluster_faded}</highlight> Faded\n"
|
||||
|
||||
if implant.ql >= 99:
|
||||
blob += "\n<header2>Jobe Requirements</header2>\n"
|
||||
|
||||
blob += "\n<header2>Requirements to Wear</header2>\n"
|
||||
blob += f"<highlight>{implant.jobe_treatment}</highlight> Treatment\n"
|
||||
blob += f"<highlight>{implant.jobe_ability}</highlight> Ability\n"
|
||||
|
||||
blob += "\n<header2>Max Requirements to Build</header2> (actual requirements may be lower)\n"
|
||||
blob += f"<highlight>{implant.jobe_build_shiny}</highlight> NanoProgramming for Shiny\n"
|
||||
blob += f"<highlight>{implant.jobe_build_bright}</highlight> NanoProgramming for Bright\n"
|
||||
blob += f"<highlight>{implant.jobe_build_faded}</highlight> NanoProgramming for Faded\n"
|
||||
|
||||
blob += "\nJobe implants cannot be cleaned\n"
|
||||
|
||||
blob += f"\n\nBased on the !impql command written for " \
|
||||
f"{self.text.make_chatcmd('Ttst', '/tell ttst help')} by <highlight>Lucier</highlight>"
|
||||
|
||||
return blob
|
||||
|
||||
def get_implant_by_ql(self, ql):
|
||||
implant = DictObject({})
|
||||
|
||||
implant.ql = ql
|
||||
|
||||
implant.treatment = int(self.util.interpolate_value(ql, self.normal_treatment_req))
|
||||
implant.ability = int(self.util.interpolate_value(ql, self.normal_ability_req))
|
||||
|
||||
implant.jobe_treatment = self.util.interpolate_value(ql, self.jobe_treatment_req)
|
||||
implant.jobe_ability = self.util.interpolate_value(ql, self.jobe_ability_req)
|
||||
|
||||
implant.ability_shiny = self.util.interpolate_value(ql, self.ability_shiny_bonus)
|
||||
implant.ability_shiny_min, implant.ability_shiny_max = self.get_range(ql, implant.ability_shiny,
|
||||
self.ability_shiny_bonus)
|
||||
implant.ability_bright = self.util.interpolate_value(ql, self.ability_bright_bonus)
|
||||
implant.ability_bright_min, implant.ability_bright_max = self.get_range(ql, implant.ability_bright,
|
||||
self.ability_bright_bonus)
|
||||
implant.ability_faded = self.util.interpolate_value(ql, self.ability_faded_bonus)
|
||||
implant.ability_faded_min, implant.ability_faded_max = self.get_range(ql, implant.ability_faded,
|
||||
self.ability_faded_bonus)
|
||||
|
||||
implant.skill_shiny = self.util.interpolate_value(ql, self.skill_shiny_bonus)
|
||||
implant.skill_shiny_min, implant.skill_shiny_max = self.get_range(ql, implant.skill_shiny,
|
||||
self.skill_shiny_bonus)
|
||||
implant.skill_bright = self.util.interpolate_value(ql, self.skill_bright_bonus)
|
||||
implant.skill_bright_min, implant.skill_bright_max = self.get_range(ql, implant.skill_bright,
|
||||
self.skill_bright_bonus)
|
||||
implant.skill_faded = self.util.interpolate_value(ql, self.skill_faded_bonus)
|
||||
implant.skill_faded_min, implant.skill_faded_max = self.get_range(ql, implant.skill_faded,
|
||||
self.skill_faded_bonus)
|
||||
|
||||
implant.clean_break_and_entry = self.util.interpolate_value(ql, self.clean_be)
|
||||
implant.clean_nano_programming = self.util.interpolate_value(ql, self.clean_np)
|
||||
|
||||
implant.build_shiny = self.util.interpolate_value(ql, self.normal_build_shiny)
|
||||
implant.build_bright = self.util.interpolate_value(ql, self.normal_build_bright)
|
||||
implant.build_faded = self.util.interpolate_value(ql, self.normal_build_faded)
|
||||
|
||||
implant.jobe_build_shiny = self.util.interpolate_value(ql, self.jobe_build_shiny)
|
||||
implant.jobe_build_bright = self.util.interpolate_value(ql, self.jobe_build_bright)
|
||||
implant.jobe_build_faded = self.util.interpolate_value(ql, self.jobe_build_faded)
|
||||
|
||||
if ql >= 201:
|
||||
implant.minimum_cluster_shiny = max(201, math.floor(ql * 0.86))
|
||||
implant.minimum_cluster_bright = max(201, math.floor(ql * 0.84))
|
||||
implant.minimum_cluster_faded = max(201, math.floor(ql * 0.82))
|
||||
else:
|
||||
implant.minimum_cluster_shiny = math.floor(ql * 0.86)
|
||||
implant.minimum_cluster_bright = math.floor(ql * 0.84)
|
||||
implant.minimum_cluster_faded = math.floor(ql * 0.82)
|
||||
|
||||
return implant
|
||||
|
||||
def get_range(self, ql, value, interpolation):
|
||||
min_ql = ql
|
||||
max_ql = ql
|
||||
|
||||
while self.util.interpolate_value(min_ql - 1, interpolation) == value:
|
||||
min_ql -= 1
|
||||
|
||||
while self.util.interpolate_value(max_ql + 1, interpolation) == value:
|
||||
max_ql += 1
|
||||
|
||||
return [min_ql, max_ql]
|
||||
@@ -0,0 +1,169 @@
|
||||
import math
|
||||
|
||||
from core.chat_blob import ChatBlob
|
||||
from core.command_param_types import Const, Int
|
||||
from core.decorators import instance, command
|
||||
from core.dict_object import DictObject
|
||||
|
||||
|
||||
@instance()
|
||||
class LadderController:
|
||||
def __init__(self):
|
||||
self.grades = ["shiny", "bright", "faded"]
|
||||
|
||||
def inject(self, registry):
|
||||
self.db = registry.get_instance("db")
|
||||
self.util = registry.get_instance("util")
|
||||
self.text = registry.get_instance("text")
|
||||
|
||||
@command(command="ladder", params=[Const("treatment"), Int("starting_amount")], access_level="member",
|
||||
description="Show sequence of laddering implants for treatment",
|
||||
extended_description="The starting amount should be the treatment or "
|
||||
"ability you have with all nano buffs, "
|
||||
"perks, and items-buffing equipment equipped, "
|
||||
"but minus any buffs from implants that you have equipped.")
|
||||
def ladder_treatment_cmd(self, _, _1, treatment):
|
||||
if treatment < 11:
|
||||
return "Base treatment must be at least <highlight>11</highlight>."
|
||||
|
||||
prefix = "skill_"
|
||||
result = self.optimized_steps(prefix, treatment, self.get_implant_by_max_treatment)
|
||||
|
||||
blob = self.format_steps("treatment", result.steps, treatment,
|
||||
(treatment + self.calculate_total(result.slots, prefix)))
|
||||
|
||||
return ChatBlob("Laddering Treatment", blob)
|
||||
|
||||
@command(command="ladder", params=[Const("ability"), Int("starting_amount")], access_level="member",
|
||||
description="Show sequence of laddering implants for ability",
|
||||
extended_description="The starting amount should be the treatment or "
|
||||
"ability you have with all nano buffs, "
|
||||
"perks, and items-buffing equipment equipped, "
|
||||
"but minus any buffs from implants you have equipped.")
|
||||
def ladder_ability_cmd(self, _, _1, ability):
|
||||
if ability < 6:
|
||||
return "Base ability must be at least <highlight>6</highlight>."
|
||||
|
||||
prefix = "ability_"
|
||||
result = self.optimized_steps(prefix, ability, self.get_implant_by_max_ability)
|
||||
|
||||
blob = self.format_steps("ability", result.steps, ability,
|
||||
(ability + self.calculate_total(result.slots, prefix)))
|
||||
|
||||
return ChatBlob("Laddering Ability", blob)
|
||||
|
||||
def format_steps(self, label, steps, starting, ending):
|
||||
blob = f"Starting {label}: <highlight>{starting}</highlight>\n\n"
|
||||
blob += "-------------------\n\n"
|
||||
for (action, grade, implant) in steps:
|
||||
blob += f"{action.capitalize()} {grade} QL <highlight>{implant.ql:d}</highlight>\n\n"
|
||||
|
||||
blob += "-------------------\n\n"
|
||||
blob += "Ending %s: <highlight>%s</highlight>\n\n" % (label, ending)
|
||||
blob += "\nInspired by a command written by Lucier of the same name"
|
||||
|
||||
return blob
|
||||
|
||||
def optimized_steps(self, prefix, base_value, get_max_implant):
|
||||
grade_combinations = [self.grades,
|
||||
["shiny", "faded", "bright"],
|
||||
["bright", "shiny", "faded"],
|
||||
["bright", "faded", "shiny"],
|
||||
["faded", "shiny", "bright"],
|
||||
["faded", "bright", "shiny"]]
|
||||
|
||||
best = None
|
||||
for grade_combo in grade_combinations:
|
||||
result = self.get_steps(prefix, base_value, get_max_implant,
|
||||
lambda current_grade: self.get_next_grade(current_grade, grade_combo))
|
||||
if not best:
|
||||
best = result
|
||||
else:
|
||||
result_value = self.calculate_total(result.slots, prefix)
|
||||
best_value = self.calculate_total(best.slots, prefix)
|
||||
if result_value > best_value:
|
||||
# this is here as a sanity check, but it appears
|
||||
# that the result is always the same no matter which order you insert the implants
|
||||
best = result
|
||||
elif best_value == result_value and len(result.steps) < len(best.steps):
|
||||
# this optimizes for the least amount of steps/implants
|
||||
best = result
|
||||
|
||||
return best
|
||||
|
||||
def get_steps(self, prefix, base_value, get_max_implant, get_next_grade):
|
||||
slots = DictObject({"shiny": None,
|
||||
"bright": None,
|
||||
"faded": None})
|
||||
|
||||
steps = []
|
||||
|
||||
num_skipped = 0
|
||||
current_grade = None
|
||||
while num_skipped < 3:
|
||||
current_grade = get_next_grade(current_grade)
|
||||
|
||||
# find next highest possible implant
|
||||
new_implant = get_max_implant(self.calculate_total(slots, prefix, current_grade) + base_value)
|
||||
|
||||
if not slots.get(current_grade):
|
||||
steps.append(["add", current_grade, new_implant])
|
||||
slots[current_grade] = new_implant
|
||||
elif new_implant.get(prefix + current_grade) > slots.get(current_grade).get(prefix + current_grade):
|
||||
steps.append(["remove", current_grade, slots.get(current_grade)])
|
||||
steps.append(["add", current_grade, new_implant])
|
||||
slots[current_grade] = new_implant
|
||||
else:
|
||||
num_skipped += 1
|
||||
|
||||
return DictObject({"slots": slots,
|
||||
"steps": steps})
|
||||
|
||||
def get_next_grade(self, current_grade, grades):
|
||||
if not current_grade:
|
||||
next_index = 0
|
||||
else:
|
||||
next_index = grades.index(current_grade) + 1
|
||||
if next_index >= len(grades):
|
||||
next_index = 0
|
||||
|
||||
return grades[next_index]
|
||||
|
||||
def get_implant_by_max_treatment(self, treatment):
|
||||
return self.db.query_single("SELECT * from implant_requirement "
|
||||
"WHERE treatment <= ? "
|
||||
"ORDER BY ql DESC "
|
||||
"LIMIT 1",
|
||||
[treatment])
|
||||
|
||||
def get_implant_by_max_ability(self, ability):
|
||||
return self.db.query_single("SELECT * from implant_requirement "
|
||||
"WHERE ability <= ? "
|
||||
"ORDER BY ql DESC "
|
||||
"LIMIT 1",
|
||||
[ability])
|
||||
|
||||
def get_cluser_min_ql(self, ql, grade):
|
||||
if grade == "shiny":
|
||||
result = math.floor(ql * 0.86)
|
||||
elif grade == "bright":
|
||||
result = math.floor(ql * 0.84)
|
||||
elif grade == "faded":
|
||||
result = math.floor(ql * 0.82)
|
||||
else:
|
||||
raise Exception("Unknown grade: '%s'" % grade)
|
||||
|
||||
if ql >= 201:
|
||||
return max(201, result)
|
||||
else:
|
||||
return result
|
||||
|
||||
def calculate_total(self, slots, prefix, skip_grade=None):
|
||||
value = 0
|
||||
for grade in self.grades:
|
||||
if grade != skip_grade:
|
||||
implant = slots.get(grade)
|
||||
if implant:
|
||||
value += implant.get(prefix + grade)
|
||||
|
||||
return value
|
||||
@@ -0,0 +1,133 @@
|
||||
from core.chat_blob import ChatBlob
|
||||
from core.command_param_types import Any
|
||||
from core.decorators import instance, command
|
||||
|
||||
|
||||
# noinspection SqlCaseVsIf
|
||||
@instance()
|
||||
class PremadeImplantController:
|
||||
def __init__(self):
|
||||
self.slots = ["head", "eye", "ear", "rarm", "chest", "larm",
|
||||
"rwrist", "waist", "lwrist", "rhand", "legs", "lhand", "feet"]
|
||||
|
||||
def inject(self, registry):
|
||||
self.db = registry.get_instance("db")
|
||||
self.util = registry.get_instance("util")
|
||||
self.text = registry.get_instance("text")
|
||||
|
||||
def pre_start(self):
|
||||
self.db.load_sql_file(self.module_dir + "/sql/" + "premade_implant.sql", pre_optimized=True)
|
||||
self.db.create_view("premade_implant")
|
||||
|
||||
@command(command="premade", params=[], access_level="member",
|
||||
description="Search for implants in the premade implant booths")
|
||||
def premade_list_cmd(self, _):
|
||||
blob = "<header2>Professions</header2>\n"
|
||||
for row in self.db.query("SELECT Name FROM Profession "
|
||||
"WHERE ID IN (SELECT ProfessionID FROM premade_implant) "
|
||||
"ORDER BY Name"):
|
||||
blob += self.text.make_tellcmd(row.Name, f"premade {row.Name}") + "\n"
|
||||
|
||||
blob += "\n<header2>Slots</header2>\n"
|
||||
for row in self.db.query("SELECT * FROM ImplantType ORDER BY ImplantTypeID"):
|
||||
blob += self.text.make_tellcmd(row.Name, f"premade {row.ShortName}") + "\n"
|
||||
|
||||
blob += "\n<header2>Modifiers</header2>\n"
|
||||
sql = "SELECT LongName FROM Cluster WHERE ClusterID IN " \
|
||||
"(SELECT ShinyClusterID From premade_implant UNION SELECT BrightClusterID " \
|
||||
"FROM premade_implant UNION SELECT FadedClusterID FROM premade_implant) " \
|
||||
"AND ClusterID != 0 " \
|
||||
"ORDER BY LongName"
|
||||
for row in self.db.query(sql):
|
||||
blob += self.text.make_tellcmd(row.LongName, "premade %s" % row.LongName) + "\n"
|
||||
|
||||
return ChatBlob("Premade Implant", blob)
|
||||
|
||||
@command(command="premade",
|
||||
params=[Any("search")],
|
||||
access_level="member",
|
||||
description="Search for implants in the premade implant booths",
|
||||
extended_description="Search can be a profession, implant slot, or modifier (ability/skill)")
|
||||
def premade_show_cmd(self, _, search):
|
||||
search = search.lower()
|
||||
|
||||
prof = self.util.get_profession(search)
|
||||
slot = self.get_slot(search)
|
||||
if prof:
|
||||
blob = f"Search by profession: <highlight>{prof}</highlight>\n\n"
|
||||
results = self.search_by_profession(prof)
|
||||
elif slot:
|
||||
blob = f"Search by slot: <highlight>{slot.ShortName}</highlight>\n\n"
|
||||
results = self.search_by_slot(slot.ShortName)
|
||||
else:
|
||||
blob = f"Search by modifier: <highlight>{search}</highlight>\n\n"
|
||||
results = self.search_by_modifier(search)
|
||||
|
||||
for row in results:
|
||||
blob += f"<header2>{row.profession}</header2> {row.slot} " \
|
||||
f"<highlight>{row.ability}</highlight> {row.shiny}, {row.bright}, {row.faded}\n"
|
||||
|
||||
return ChatBlob(f"Premade Implant Search Results ({len(results):d})", blob)
|
||||
|
||||
def search_by_profession(self, profession):
|
||||
sql = """SELECT
|
||||
i.Name AS slot,
|
||||
p2.Name AS profession,
|
||||
a.Name AS ability,
|
||||
CASE WHEN c1.ClusterID = 0 THEN 'N/A' ELSE c1.LongName END AS shiny,
|
||||
CASE WHEN c2.ClusterID = 0 THEN 'N/A' ELSE c2.LongName END AS bright,
|
||||
CASE WHEN c3.ClusterID = 0 THEN 'N/A' ELSE c3.LongName END AS faded
|
||||
FROM premade_implant p
|
||||
JOIN ImplantType i ON p.ImplantTypeID = i.ImplantTypeID
|
||||
JOIN Profession p2 ON p.ProfessionID = p2.ID
|
||||
JOIN Ability a ON p.AbilityID = a.AbilityID
|
||||
JOIN Cluster c1 ON p.ShinyClusterID = c1.ClusterID
|
||||
JOIN Cluster c2 ON p.BrightClusterID = c2.ClusterID
|
||||
JOIN Cluster c3 ON p.FadedClusterID = c3.ClusterID
|
||||
WHERE p2.Name = ?
|
||||
ORDER BY slot"""
|
||||
|
||||
return self.db.query(sql, [profession])
|
||||
|
||||
def search_by_slot(self, slot):
|
||||
sql = """SELECT
|
||||
i.Name AS slot,
|
||||
p2.Name AS profession,
|
||||
a.Name AS ability,
|
||||
CASE WHEN c1.ClusterID = 0 THEN 'N/A' ELSE c1.LongName END AS shiny,
|
||||
CASE WHEN c2.ClusterID = 0 THEN 'N/A' ELSE c2.LongName END AS bright,
|
||||
CASE WHEN c3.ClusterID = 0 THEN 'N/A' ELSE c3.LongName END AS faded
|
||||
FROM premade_implant p
|
||||
JOIN ImplantType i ON p.ImplantTypeID = i.ImplantTypeID
|
||||
JOIN Profession p2 ON p.ProfessionID = p2.ID
|
||||
JOIN Ability a ON p.AbilityID = a.AbilityID
|
||||
JOIN Cluster c1 ON p.ShinyClusterID = c1.ClusterID
|
||||
JOIN Cluster c2 ON p.BrightClusterID = c2.ClusterID
|
||||
JOIN Cluster c3 ON p.FadedClusterID = c3.ClusterID
|
||||
WHERE i.ShortName = ?
|
||||
ORDER BY shiny, bright, faded"""
|
||||
|
||||
return self.db.query(sql, [slot])
|
||||
|
||||
def search_by_modifier(self, modifier):
|
||||
sql = """SELECT
|
||||
i.Name AS slot,
|
||||
p2.Name AS profession,
|
||||
a.Name AS ability,
|
||||
CASE WHEN c1.ClusterID = 0 THEN 'N/A' ELSE c1.LongName END AS shiny,
|
||||
CASE WHEN c2.ClusterID = 0 THEN 'N/A' ELSE c2.LongName END AS bright,
|
||||
CASE WHEN c3.ClusterID = 0 THEN 'N/A' ELSE c3.LongName END AS faded
|
||||
FROM premade_implant p
|
||||
JOIN ImplantType i ON p.ImplantTypeID = i.ImplantTypeID
|
||||
JOIN Profession p2 ON p.ProfessionID = p2.ID
|
||||
JOIN Ability a ON p.AbilityID = a.AbilityID
|
||||
JOIN Cluster c1 ON p.ShinyClusterID = c1.ClusterID
|
||||
JOIN Cluster c2 ON p.BrightClusterID = c2.ClusterID
|
||||
JOIN Cluster c3 ON p.FadedClusterID = c3.ClusterID
|
||||
WHERE c1.LongName <EXTENDED_LIKE=0> ? OR c2.LongName <EXTENDED_LIKE=1> ? OR c3.LongName <EXTENDED_LIKE=2> ?
|
||||
"""
|
||||
|
||||
return self.db.query(sql, [modifier, modifier, modifier], extended_like=True)
|
||||
|
||||
def get_slot(self, search):
|
||||
return self.db.query_single("SELECT * FROM ImplantType WHERE Name LIKE ? OR ShortName LIKE ?", [search, search])
|
||||
@@ -0,0 +1,15 @@
|
||||
# noinspection LongLineForFile
|
||||
|
||||
DROP TABLE IF EXISTS Ability;
|
||||
CREATE TABLE IF NOT EXISTS Ability
|
||||
(
|
||||
AbilityID INT NOT NULL PRIMARY KEY,
|
||||
Name VARCHAR(20) NOT NULL
|
||||
);
|
||||
INSERT INTO Ability (AbilityID, Name)
|
||||
VALUES (1, 'Agility'),
|
||||
(2, 'Intelligence'),
|
||||
(3, 'Psychic'),
|
||||
(4, 'Sense'),
|
||||
(5, 'Stamina'),
|
||||
(6, 'Strength');
|
||||
@@ -0,0 +1,125 @@
|
||||
# noinspection LongLineForFile
|
||||
|
||||
DROP TABLE IF EXISTS Cluster;
|
||||
CREATE TABLE IF NOT EXISTS Cluster
|
||||
(
|
||||
ClusterID INT NOT NULL PRIMARY KEY,
|
||||
EffectTypeID INT NOT NULL,
|
||||
LongName VARCHAR(50) NOT NULL,
|
||||
NPReq INT NOT NULL,
|
||||
AltName VARCHAR(50) NOT NULL,
|
||||
INDEX `LongName` (`LongName`) USING BTREE
|
||||
);
|
||||
INSERT INTO Cluster (ClusterID, EffectTypeID, LongName, NPReq, AltName)
|
||||
VALUES (0, 1, '', 0, ''),
|
||||
(2, 1, '1 Handed Blunt Weapons', 720, '1h Blunt'),
|
||||
(3, 1, '1 Handed Edged Weapon', 760, '1h Edged'),
|
||||
(4, 1, '2 Handed Blunt Weapons', 720, '2h Blunt'),
|
||||
(5, 1, '2 Handed Edged Weapons', 760, '2h Edged'),
|
||||
(6, 1, 'Adventuring', 600, ''),
|
||||
(7, 2, 'Agility', 900, ''),
|
||||
(8, 1, 'Aimed Shot', 840, ''),
|
||||
(9, 1, 'Assault Rifle', 900, ''),
|
||||
(10, 16, 'Biological Metamorphosis', 960, ''),
|
||||
(11, 1, 'Body Development', 800, ''),
|
||||
(12, 1, 'Bow', 800, ''),
|
||||
(13, 1, 'Bow Special Attack', 800, ''),
|
||||
(14, 1, 'Brawling', 660, 'Brawl'),
|
||||
(15, 1, 'Breaking and Entry', 800, ''),
|
||||
(16, 1, 'Burst', 840, ''),
|
||||
(17, 3, 'Chemical AC', 800, ''),
|
||||
(18, 1, 'Chemistry', 800, ''),
|
||||
(19, 3, 'Cold AC', 800, ''),
|
||||
(20, 1, 'Computer Literacy', 800, ''),
|
||||
(21, 1, 'Concealment', 720, ''),
|
||||
(22, 1, 'Dimach', 900, ''),
|
||||
(24, 1, 'Dodge Ranged Attacks', 800, 'Dodge Ranged'),
|
||||
(25, 1, 'Duck Explosives', 800, ''),
|
||||
(26, 1, 'Electrical Engineering', 800, ''),
|
||||
(27, 3, 'Energy AC', 900, ''),
|
||||
(28, 1, 'Evade Close Combat', 800, 'Evade Close'),
|
||||
(29, 1, 'Fast Attack', 760, ''),
|
||||
(30, 3, 'Fire AC', 800, ''),
|
||||
(31, 1, 'First Aid', 720, ''),
|
||||
(32, 1, 'Fling Shot', 720, ''),
|
||||
(33, 1, 'Full Auto', 900, ''),
|
||||
(34, 1, 'Grenade Throwing', 760, 'Grenade'),
|
||||
(35, 1, 'Heavy Weapons', 400, ''),
|
||||
(36, 3, 'Projectile AC', 900, ''),
|
||||
(37, 2, 'Intelligence', 900, ''),
|
||||
(38, 1, 'Map Navigation', 500, ''),
|
||||
(39, 1, 'Martial Arts', 1000, ''),
|
||||
(40, 16, 'Matter Creation', 960, ''),
|
||||
(41, 16, 'Matter Metamorphosis', 960, ''),
|
||||
(42, 4, 'Max Health', 1000, ''),
|
||||
(43, 4, 'Max Nano', 1000, ''),
|
||||
(44, 1, 'Mechanical Engineering', 800, ''),
|
||||
(45, 1, 'Melee Energy Weapons', 800, 'Melee Energy'),
|
||||
(46, 1, 'Melee Weapons Initiative', 800, 'Melee Init'),
|
||||
(47, 3, 'Melee AC', 900, ''),
|
||||
(48, 1, 'MG/SMG', 800, 'SMG'),
|
||||
(49, 1, 'Multiple Melee Weapons', 900, 'Multi Melee'),
|
||||
(50, 1, 'Multiple Ranged Weapons', 800, 'Multi Ranged'),
|
||||
(51, 1, 'Nano Initiative', 800, 'Nano Init'),
|
||||
(52, 1, 'Nano Pool', 1200, ''),
|
||||
(53, 1, 'Nano Programming', 800, ''),
|
||||
(54, 1, 'Nano Resistance', 800, 'Nano Resist'),
|
||||
(55, 1, 'Parry', 840, ''),
|
||||
(56, 1, 'Perception', 800, ''),
|
||||
(57, 1, 'Pharmaceuticals', 800, ''),
|
||||
(58, 1, 'Physical Initiative', 800, 'Physical Init'),
|
||||
(59, 1, 'Piercing', 640, ''),
|
||||
(60, 1, 'Pistol', 800, ''),
|
||||
(61, 2, 'Psychic', 900, ''),
|
||||
(62, 16, 'Psychological Modifications', 960, ''),
|
||||
(63, 1, 'Psychology', 800, ''),
|
||||
(64, 1, 'Quantum Physics', 1000, ''),
|
||||
(65, 3, 'Radiation AC', 800, ''),
|
||||
(66, 1, 'Ranged Energy', 800, ''),
|
||||
(67, 1, 'Ranged Initiative', 800, 'Ranged Init'),
|
||||
(68, 1, 'Rifle', 900, ''),
|
||||
(69, 1, 'Riposte', 1000, ''),
|
||||
(70, 1, 'Run Speed', 1000, ''),
|
||||
(71, 2, 'Sense', 900, ''),
|
||||
(72, 16, 'Sensory Improvement', 880, ''),
|
||||
(73, 1, 'Sharp Objects', 500, ''),
|
||||
(74, 1, 'Shotgun', 680, ''),
|
||||
(75, 1, 'Sneak Attack', 1000, ''),
|
||||
(76, 2, 'Stamina', 900, ''),
|
||||
(77, 2, 'Strength', 900, ''),
|
||||
(78, 1, 'Swimming', 500, ''),
|
||||
(79, 16, 'Time and Space', 960, ''),
|
||||
(80, 1, 'Trap Disarming', 720, ''),
|
||||
(81, 1, 'Treatment', 860, ''),
|
||||
(82, 1, 'Tutoring', 520, ''),
|
||||
(83, 1, 'Vehicle Air', 400, ''),
|
||||
(84, 1, 'Vehicle Ground', 600, ''),
|
||||
(85, 1, 'Vehicle Water', 480, ''),
|
||||
(86, 1, 'Weapon Smithing', 800, ''),
|
||||
(87, 15, 'Nano Delta*', 1, 'Nano Delta'),
|
||||
(88, 15, 'Heal Delta*', 1, 'Heal Delta'),
|
||||
(89, 8, 'Add All Defense*', 1, 'Defense modifier'),
|
||||
(90, 9, 'Add All Offense*', 1, 'Offense modifier'),
|
||||
(91, 10, 'Add Max NCU*', 1, 'NCU Memory'),
|
||||
(92, 5, 'Add XP (%)*', 1, 'Experience Modifier'),
|
||||
(93, 12, 'Nano Interrupt (%)*', 1, 'Nano interrupt chance'),
|
||||
(94, 6, 'Add Chemical Damage*', 1, 'Chemical damage modifier'),
|
||||
(95, 6, 'Add Energy Damage*', 1, 'Energy damage modifier'),
|
||||
(96, 6, 'Add Fire Damage*', 1, 'Fire damage modifier'),
|
||||
(97, 6, 'Add Melee Damage*', 1, 'Melee damage modifier'),
|
||||
(98, 6, 'Add Poison Damage*', 1, 'Poison damage modifier'),
|
||||
(99, 6, 'Add Projectile Damage*', 1, 'Projectile damage modifier'),
|
||||
(100, 6, 'Add Radiation Damage*', 1, 'Radiation damage modifier'),
|
||||
(101, 7, 'Chemical Damage Shield*', 1, 'Shield Chemical Damage'),
|
||||
(102, 7, 'Cold Damage Shield*', 1, 'Shield Cold Damage'),
|
||||
(103, 7, 'Energy Damage Shield*', 1, 'Shield Energy Damage'),
|
||||
(104, 7, 'Fire Damage Shield*', 1, 'Shield Fire Damage'),
|
||||
(105, 7, 'Melee Damage Shield*', 1, 'Shield Melee Damage'),
|
||||
(106, 7, 'Poison Damage Shield*', 1, 'Shield Poison Damage'),
|
||||
(107, 7, 'Projectile Damage Shield*', 1, 'Shield Projectile Damage'),
|
||||
(108, 7, 'Radiation Damage Shield*', 1, 'Shield Radiation Damage'),
|
||||
(109, 11, 'Skill Lock (%)*', 1, 'Skill Lock Modifier'),
|
||||
(110, 13, 'Nano Cost (%)*', 1, 'Nano cost modifier'),
|
||||
(111, 14, 'Add Nano Range (%)*', 1, 'Nano Range'),
|
||||
(112, 3, 'Poison AC', 800, ''),
|
||||
(130, 14, 'Add Weapon Range (%)*', 1, '');
|
||||
@@ -0,0 +1,343 @@
|
||||
# noinspection LongLineForFile
|
||||
|
||||
DROP TABLE IF EXISTS ClusterImplantMap;
|
||||
CREATE TABLE IF NOT EXISTS ClusterImplantMap
|
||||
(
|
||||
ImplantTypeID INT NOT NULL,
|
||||
ClusterID INT NOT NULL,
|
||||
ClusterTypeID INT NOT NULL
|
||||
);
|
||||
INSERT INTO ClusterImplantMap (ImplantTypeID, ClusterID, ClusterTypeID)
|
||||
VALUES (1, 8, 3),
|
||||
(1, 9, 1),
|
||||
(1, 12, 1),
|
||||
(1, 18, 2),
|
||||
(1, 20, 2),
|
||||
(1, 21, 1),
|
||||
(1, 26, 3),
|
||||
(1, 34, 2),
|
||||
(1, 35, 2),
|
||||
(1, 37, 2),
|
||||
(1, 38, 3),
|
||||
(1, 40, 1),
|
||||
(1, 44, 2),
|
||||
(1, 49, 2),
|
||||
(1, 50, 1),
|
||||
(1, 51, 2),
|
||||
(1, 53, 2),
|
||||
(1, 56, 2),
|
||||
(1, 57, 2),
|
||||
(1, 60, 1),
|
||||
(1, 62, 2),
|
||||
(1, 63, 1),
|
||||
(1, 64, 2),
|
||||
(1, 66, 2),
|
||||
(1, 68, 3),
|
||||
(1, 72, 2),
|
||||
(1, 73, 1),
|
||||
(1, 75, 1),
|
||||
(1, 79, 1),
|
||||
(1, 81, 2),
|
||||
(1, 82, 3),
|
||||
(1, 83, 3),
|
||||
(1, 84, 2),
|
||||
(1, 85, 2),
|
||||
(1, 86, 1),
|
||||
(2, 10, 3),
|
||||
(2, 13, 3),
|
||||
(2, 18, 3),
|
||||
(2, 20, 3),
|
||||
(2, 22, 2),
|
||||
(2, 26, 2),
|
||||
(2, 31, 3),
|
||||
(2, 37, 3),
|
||||
(2, 38, 2),
|
||||
(2, 40, 3),
|
||||
(2, 41, 3),
|
||||
(2, 43, 3),
|
||||
(2, 44, 3),
|
||||
(2, 45, 3),
|
||||
(2, 51, 3),
|
||||
(2, 52, 2),
|
||||
(2, 53, 3),
|
||||
(2, 54, 3),
|
||||
(2, 56, 1),
|
||||
(2, 57, 3),
|
||||
(2, 61, 3),
|
||||
(2, 62, 3),
|
||||
(2, 63, 3),
|
||||
(2, 64, 3),
|
||||
(2, 66, 3),
|
||||
(2, 67, 2),
|
||||
(2, 71, 1),
|
||||
(2, 72, 3),
|
||||
(2, 79, 3),
|
||||
(2, 80, 1),
|
||||
(2, 81, 3),
|
||||
(2, 82, 1),
|
||||
(2, 83, 1),
|
||||
(2, 84, 3),
|
||||
(2, 85, 3),
|
||||
(2, 86, 2),
|
||||
(2, 112, 3),
|
||||
(3, 21, 2),
|
||||
(3, 37, 1),
|
||||
(3, 38, 1),
|
||||
(3, 56, 3),
|
||||
(3, 61, 1),
|
||||
(3, 62, 1),
|
||||
(3, 63, 2),
|
||||
(3, 82, 2),
|
||||
(3, 83, 2),
|
||||
(3, 84, 1),
|
||||
(3, 85, 1),
|
||||
(3, 91, 3),
|
||||
(3, 92, 3),
|
||||
(3, 110, 2),
|
||||
(4, 4, 1),
|
||||
(4, 6, 1),
|
||||
(4, 10, 2),
|
||||
(4, 11, 3),
|
||||
(4, 15, 1),
|
||||
(4, 22, 3),
|
||||
(4, 27, 3),
|
||||
(4, 36, 2),
|
||||
(4, 41, 2),
|
||||
(4, 42, 3),
|
||||
(4, 43, 1),
|
||||
(4, 47, 3),
|
||||
(4, 48, 1),
|
||||
(4, 51, 1),
|
||||
(4, 52, 3),
|
||||
(4, 61, 2),
|
||||
(4, 71, 3),
|
||||
(4, 72, 1),
|
||||
(4, 76, 3),
|
||||
(4, 77, 1),
|
||||
(4, 93, 1),
|
||||
(4, 109, 1),
|
||||
(4, 112, 1),
|
||||
(5, 5, 1),
|
||||
(5, 6, 2),
|
||||
(5, 7, 1),
|
||||
(5, 10, 1),
|
||||
(5, 11, 2),
|
||||
(5, 14, 1),
|
||||
(5, 17, 3),
|
||||
(5, 19, 3),
|
||||
(5, 22, 1),
|
||||
(5, 24, 1),
|
||||
(5, 25, 2),
|
||||
(5, 27, 1),
|
||||
(5, 28, 1),
|
||||
(5, 30, 3),
|
||||
(5, 33, 1),
|
||||
(5, 36, 1),
|
||||
(5, 42, 2),
|
||||
(5, 43, 2),
|
||||
(5, 46, 1),
|
||||
(5, 47, 2),
|
||||
(5, 52, 1),
|
||||
(5, 59, 1),
|
||||
(5, 65, 3),
|
||||
(5, 71, 2),
|
||||
(5, 74, 1),
|
||||
(5, 76, 1),
|
||||
(5, 110, 3),
|
||||
(6, 6, 3),
|
||||
(6, 7, 3),
|
||||
(6, 11, 1),
|
||||
(6, 24, 3),
|
||||
(6, 25, 3),
|
||||
(6, 27, 2),
|
||||
(6, 28, 2),
|
||||
(6, 36, 3),
|
||||
(6, 42, 1),
|
||||
(6, 46, 2),
|
||||
(6, 47, 1),
|
||||
(6, 70, 1),
|
||||
(6, 76, 2),
|
||||
(6, 78, 3),
|
||||
(6, 88, 1),
|
||||
(6, 91, 1),
|
||||
(6, 92, 1),
|
||||
(6, 93, 3),
|
||||
(6, 103, 1),
|
||||
(6, 104, 1),
|
||||
(6, 107, 1),
|
||||
(6, 108, 1),
|
||||
(6, 109, 3),
|
||||
(6, 112, 2),
|
||||
(7, 7, 2),
|
||||
(7, 21, 3),
|
||||
(7, 24, 2),
|
||||
(7, 25, 1),
|
||||
(7, 28, 3),
|
||||
(7, 39, 2),
|
||||
(7, 46, 3),
|
||||
(7, 58, 3),
|
||||
(7, 75, 3),
|
||||
(7, 87, 1),
|
||||
(7, 88, 2),
|
||||
(7, 89, 1),
|
||||
(7, 90, 1),
|
||||
(7, 92, 2),
|
||||
(7, 101, 2),
|
||||
(7, 102, 2),
|
||||
(7, 105, 2),
|
||||
(7, 106, 2),
|
||||
(8, 4, 2),
|
||||
(8, 5, 2),
|
||||
(8, 12, 2),
|
||||
(8, 14, 3),
|
||||
(8, 15, 2),
|
||||
(8, 17, 1),
|
||||
(8, 41, 1),
|
||||
(8, 58, 1),
|
||||
(8, 59, 2),
|
||||
(8, 65, 2),
|
||||
(8, 77, 2),
|
||||
(8, 78, 1),
|
||||
(8, 88, 3),
|
||||
(8, 89, 3),
|
||||
(8, 90, 3),
|
||||
(8, 110, 1),
|
||||
(8, 111, 3),
|
||||
(9, 45, 2),
|
||||
(9, 49, 3),
|
||||
(9, 50, 3),
|
||||
(9, 54, 1),
|
||||
(9, 55, 2),
|
||||
(9, 68, 1),
|
||||
(9, 69, 2),
|
||||
(9, 70, 2),
|
||||
(9, 94, 2),
|
||||
(9, 95, 2),
|
||||
(9, 96, 2),
|
||||
(9, 97, 2),
|
||||
(9, 98, 2),
|
||||
(9, 99, 2),
|
||||
(9, 100, 2),
|
||||
(9, 101, 1),
|
||||
(9, 102, 1),
|
||||
(9, 103, 3),
|
||||
(9, 104, 3),
|
||||
(9, 105, 1),
|
||||
(9, 106, 1),
|
||||
(9, 107, 3),
|
||||
(9, 108, 3),
|
||||
(10, 19, 1),
|
||||
(10, 29, 3),
|
||||
(10, 30, 2),
|
||||
(10, 31, 1),
|
||||
(10, 39, 1),
|
||||
(10, 66, 1),
|
||||
(10, 80, 2),
|
||||
(10, 93, 2),
|
||||
(10, 101, 3),
|
||||
(10, 102, 3),
|
||||
(10, 103, 2),
|
||||
(10, 104, 2),
|
||||
(10, 105, 3),
|
||||
(10, 106, 3),
|
||||
(10, 107, 2),
|
||||
(10, 108, 2),
|
||||
(10, 109, 2),
|
||||
(10, 111, 2),
|
||||
(11, 2, 3),
|
||||
(11, 3, 3),
|
||||
(11, 4, 3),
|
||||
(11, 5, 3),
|
||||
(11, 9, 3),
|
||||
(11, 12, 3),
|
||||
(11, 14, 2),
|
||||
(11, 15, 3),
|
||||
(11, 16, 3),
|
||||
(11, 17, 2),
|
||||
(11, 29, 1),
|
||||
(11, 32, 3),
|
||||
(11, 33, 3),
|
||||
(11, 34, 3),
|
||||
(11, 35, 3),
|
||||
(11, 44, 1),
|
||||
(11, 48, 3),
|
||||
(11, 55, 1),
|
||||
(11, 58, 2),
|
||||
(11, 59, 3),
|
||||
(11, 65, 1),
|
||||
(11, 69, 1),
|
||||
(11, 74, 3),
|
||||
(11, 77, 3),
|
||||
(11, 78, 2),
|
||||
(11, 87, 2),
|
||||
(11, 89, 2),
|
||||
(11, 90, 2),
|
||||
(11, 111, 1),
|
||||
(12, 2, 2),
|
||||
(12, 3, 2),
|
||||
(12, 8, 2),
|
||||
(12, 13, 1),
|
||||
(12, 16, 2),
|
||||
(12, 32, 1),
|
||||
(12, 33, 2),
|
||||
(12, 45, 1),
|
||||
(12, 49, 1),
|
||||
(12, 50, 2),
|
||||
(12, 54, 2),
|
||||
(12, 55, 3),
|
||||
(12, 60, 3),
|
||||
(12, 67, 3),
|
||||
(12, 68, 2),
|
||||
(12, 69, 3),
|
||||
(12, 70, 3),
|
||||
(12, 73, 3),
|
||||
(12, 75, 2),
|
||||
(12, 87, 3),
|
||||
(12, 91, 2),
|
||||
(12, 94, 1),
|
||||
(12, 95, 1),
|
||||
(12, 96, 1),
|
||||
(12, 97, 1),
|
||||
(12, 98, 1),
|
||||
(12, 99, 1),
|
||||
(12, 100, 1),
|
||||
(13, 2, 1),
|
||||
(13, 3, 1),
|
||||
(13, 8, 1),
|
||||
(13, 9, 2),
|
||||
(13, 13, 2),
|
||||
(13, 16, 1),
|
||||
(13, 18, 1),
|
||||
(13, 19, 2),
|
||||
(13, 20, 1),
|
||||
(13, 26, 1),
|
||||
(13, 29, 2),
|
||||
(13, 30, 1),
|
||||
(13, 31, 2),
|
||||
(13, 32, 2),
|
||||
(13, 34, 1),
|
||||
(13, 35, 1),
|
||||
(13, 39, 3),
|
||||
(13, 40, 2),
|
||||
(13, 48, 2),
|
||||
(13, 53, 1),
|
||||
(13, 57, 1),
|
||||
(13, 60, 2),
|
||||
(13, 64, 1),
|
||||
(13, 67, 1),
|
||||
(13, 73, 2),
|
||||
(13, 74, 2),
|
||||
(13, 79, 2),
|
||||
(13, 80, 3),
|
||||
(13, 81, 1),
|
||||
(13, 86, 3),
|
||||
(13, 94, 3),
|
||||
(13, 95, 3),
|
||||
(13, 96, 3),
|
||||
(13, 97, 3),
|
||||
(13, 98, 3),
|
||||
(13, 99, 3),
|
||||
(13, 100, 3),
|
||||
(1, 130, 3),
|
||||
(7, 130, 2),
|
||||
(11, 130, 1);
|
||||
@@ -0,0 +1,10 @@
|
||||
DROP TABLE IF EXISTS ClusterType;
|
||||
CREATE TABLE IF NOT EXISTS ClusterType
|
||||
(
|
||||
ClusterTypeID INT NOT NULL PRIMARY KEY,
|
||||
Name VARCHAR(10) NOT NULL
|
||||
);
|
||||
INSERT INTO ClusterType (ClusterTypeID, Name)
|
||||
VALUES (1, 'faded'),
|
||||
(2, 'bright'),
|
||||
(3, 'shiny');
|
||||
@@ -0,0 +1,29 @@
|
||||
# noinspection LongLineForFile
|
||||
|
||||
DROP TABLE IF EXISTS EffectTypeMatrix;
|
||||
CREATE TABLE IF NOT EXISTS EffectTypeMatrix
|
||||
(
|
||||
ID INT NOT NULL PRIMARY KEY,
|
||||
Name VARCHAR(20) NOT NULL,
|
||||
MinValLow INT NOT NULL,
|
||||
MaxValLow INT NOT NULL,
|
||||
MinValHigh INT NOT NULL,
|
||||
MaxValHigh INT NOT NULL
|
||||
);
|
||||
INSERT INTO EffectTypeMatrix (ID, Name, MinValLow, MaxValLow, MinValHigh, MaxValHigh)
|
||||
VALUES (1, 'Skill', 6, 105, 106, 141),
|
||||
(2, 'Ability', 5, 55, 55, 73),
|
||||
(3, 'AC', 8, 505, 508, 687),
|
||||
(4, 'Max H/N', 7, 405, 407, 550),
|
||||
(5, 'XP', 5, 7, 7, 8),
|
||||
(6, 'Add Dmg', 5, 18, 18, 22),
|
||||
(7, 'Reflect', 5, 20, 20, 25),
|
||||
(8, 'Add Def', 6, 130, 131, 175),
|
||||
(9, 'Add Off', 5, 30, 30, 39),
|
||||
(10, 'NCU', 5, 30, 30, 39),
|
||||
(11, 'Skill Lock', 5, -5, -5, -9),
|
||||
(12, 'Interrupt', 5, -5, -5, -9),
|
||||
(13, 'Nano Cost', 5, -2, -3, -5),
|
||||
(14, 'Range', 5, 15, 15, 19),
|
||||
(15, 'Delta', 5, 55, 55, 73),
|
||||
(16, 'NanoSkill', 6, 105, 106, 141);
|
||||
@@ -0,0 +1,82 @@
|
||||
# noinspection LongLineForFile
|
||||
|
||||
DROP TABLE IF EXISTS EffectValue;
|
||||
CREATE TABLE IF NOT EXISTS EffectValue
|
||||
(
|
||||
EffectID INT NOT NULL PRIMARY KEY,
|
||||
Name VARCHAR(50) NOT NULL,
|
||||
Q200Value INT NOT NULL
|
||||
);
|
||||
INSERT INTO EffectValue (EffectID, Name, Q200Value)
|
||||
VALUES (1, 'AC Faded', 162),
|
||||
(2, 'AC Bright', 243),
|
||||
(3, 'AC Shining', 405),
|
||||
(4, 'AC Faded QL300', 275),
|
||||
(5, 'AC Bright QL300', 412),
|
||||
(6, 'AC Shining QL300', 687),
|
||||
(7, 'Life/Nano Faded', 162),
|
||||
(8, 'Life/Nano Bright', 243),
|
||||
(9, 'Life/Nano Shining', 405),
|
||||
(10, 'Life/Nano Faded QL300', 220),
|
||||
(11, 'Life/Nano Bright QL300', 330),
|
||||
(12, 'Life/Nano Shining QL300', 550),
|
||||
(13, 'AddAll Faded', 52),
|
||||
(14, 'AddAll Bright', 78),
|
||||
(15, 'AddAll Shining', 130),
|
||||
(16, 'AddAll Faded QL300', 70),
|
||||
(17, 'AddAll Bright QL300', 105),
|
||||
(18, 'AddAll Shining QL300', 175),
|
||||
(19, 'MaxNCU Faded', 12),
|
||||
(20, 'MaxNCU Bright', 18),
|
||||
(21, 'MaxNCU Shining', 30),
|
||||
(22, 'MaxNCU Faded QL300', 16),
|
||||
(23, 'MaxNCU Bright QL300', 23),
|
||||
(24, 'MaxNCU Shining QL300', 39),
|
||||
(25, 'XPMod Faded', 3),
|
||||
(26, 'XPMod Bright', 4),
|
||||
(27, 'XPMod Shining', 7),
|
||||
(28, 'XPMod Faded QL300', 3),
|
||||
(29, 'XPMod Bright QL300', 5),
|
||||
(30, 'XPMod Shining QL300', 8),
|
||||
(31, 'Nano Interrupt Faded', -2),
|
||||
(32, 'Nano Interrupt Bright', -3),
|
||||
(33, 'Nano Interrupt Shining', -5),
|
||||
(34, 'Nano Interrupt Faded QL300', -3),
|
||||
(35, 'Nano Interrupt Bright QL300', -5),
|
||||
(36, 'Nano Interrupt Shining QL300', -9),
|
||||
(37, 'Shield Faded', 8),
|
||||
(38, 'Shield Bright', 12),
|
||||
(39, 'Shield Shining', 20),
|
||||
(40, 'Shield Faded QL300', 10),
|
||||
(41, 'Shield Bright QL300', 15),
|
||||
(42, 'Shield Shining QL300', 25),
|
||||
(43, 'Damage Faded', 7),
|
||||
(44, 'Damage Bright', 10),
|
||||
(45, 'Damage Shining', 18),
|
||||
(46, 'Damage Faded QL300', 9),
|
||||
(47, 'Damage Bright QL300', 13),
|
||||
(48, 'Damage Shining QL300', 22),
|
||||
(49, 'Range Faded', 6),
|
||||
(50, 'Range Bright', 9),
|
||||
(51, 'Range Shining', 15),
|
||||
(52, 'Range Faded QL300', 7),
|
||||
(53, 'Range Bright QL300', 11),
|
||||
(54, 'Range Shining QL300', 19),
|
||||
(55, 'Nano Cost Faded', -1),
|
||||
(56, 'Nano Cost Bright', -2),
|
||||
(57, 'Nano Cost Shining', -2),
|
||||
(58, 'Nano Cost Faded QL300', -2),
|
||||
(59, 'Nano Cost Bright QL300', -3),
|
||||
(60, 'Nano Cost Shining QL300', -5),
|
||||
(61, 'Skill Faded ', 42),
|
||||
(62, 'Skill Bright', 63),
|
||||
(63, 'Skill Shining', 105),
|
||||
(64, 'Ability Faded', 22),
|
||||
(65, 'Ability Bright', 33),
|
||||
(66, 'Ability Shining', 55),
|
||||
(67, 'Skill Faded QL300', 57),
|
||||
(68, 'Skill Bright QL300', 85),
|
||||
(69, 'Skill Shining QL300', 141),
|
||||
(70, 'Ability Faded QL300', 29),
|
||||
(71, 'Ability Bright QL300', 44),
|
||||
(72, 'Ability Shining QL300', 73);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,23 @@
|
||||
# noinspection LongLineForFile
|
||||
|
||||
DROP TABLE IF EXISTS ImplantType;
|
||||
CREATE TABLE IF NOT EXISTS ImplantType
|
||||
(
|
||||
ImplantTypeID INT NOT NULL PRIMARY KEY,
|
||||
Name VARCHAR(20) NOT NULL,
|
||||
ShortName VARCHAR(10) NOT NULL
|
||||
);
|
||||
INSERT INTO ImplantType (ImplantTypeID, Name, ShortName)
|
||||
VALUES (1, 'Eye', 'eye'),
|
||||
(2, 'Head', 'head'),
|
||||
(3, 'Ear', 'ear'),
|
||||
(4, 'Chest', 'chest'),
|
||||
(5, 'Waist', 'waist'),
|
||||
(6, 'Leg', 'legs'),
|
||||
(7, 'Feet', 'feet'),
|
||||
(8, 'Left Arm', 'larm'),
|
||||
(9, 'Left Wrist', 'lwrist'),
|
||||
(10, 'Left Hand', 'lhand'),
|
||||
(11, 'Right Arm', 'rarm'),
|
||||
(12, 'Right Wrist', 'rwrist'),
|
||||
(13, 'Right Hand', 'rhand');
|
||||
@@ -0,0 +1,23 @@
|
||||
# noinspection LongLineForFile
|
||||
|
||||
DROP TABLE IF EXISTS Profession;
|
||||
CREATE TABLE IF NOT EXISTS Profession
|
||||
(
|
||||
ID INT NOT NULL PRIMARY KEY,
|
||||
Name VARCHAR(20) NOT NULL
|
||||
);
|
||||
INSERT INTO Profession (ID, Name)
|
||||
VALUES (1, 'Adventurer'),
|
||||
(2, 'Agent'),
|
||||
(3, 'Bureaucrat'),
|
||||
(4, 'Doctor'),
|
||||
(5, 'Enforcer'),
|
||||
(6, 'Engineer'),
|
||||
(7, 'Fixer'),
|
||||
(8, 'Keeper'),
|
||||
(9, 'Martial Artist'),
|
||||
(10, 'Meta-Physicist'),
|
||||
(11, 'Nano-Technician'),
|
||||
(12, 'Shade'),
|
||||
(13, 'Soldier'),
|
||||
(14, 'Trader');
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,317 @@
|
||||
# noinspection LongLineForFile
|
||||
|
||||
DROP TABLE IF EXISTS implant_requirement;
|
||||
CREATE TABLE IF NOT EXISTS implant_requirement
|
||||
(
|
||||
ql INTEGER NOT NULL PRIMARY KEY,
|
||||
treatment INTEGER NOT NULL,
|
||||
ability INTEGER NOT NULL,
|
||||
ability_shiny INTEGER NOT NULL,
|
||||
ability_bright INTEGER NOT NULL,
|
||||
ability_faded INTEGER NOT NULL,
|
||||
skill_shiny INTEGER NOT NULL,
|
||||
skill_bright INTEGER NOT NULL,
|
||||
skill_faded INTEGER NOT NULL
|
||||
);
|
||||
INSERT INTO implant_requirement (ql, treatment, ability, ability_shiny, ability_bright, ability_faded, skill_shiny,
|
||||
skill_bright, skill_faded)
|
||||
VALUES (1, 11, 6, 5, 3, 2, 6, 3, 2),
|
||||
(2, 16, 8, 5, 3, 2, 6, 3, 2),
|
||||
(3, 20, 10, 6, 3, 2, 7, 4, 2),
|
||||
(4, 25, 12, 6, 3, 2, 7, 4, 3),
|
||||
(5, 30, 14, 6, 4, 2, 8, 4, 3),
|
||||
(6, 35, 16, 6, 4, 3, 8, 5, 3),
|
||||
(7, 39, 18, 7, 4, 3, 9, 5, 3),
|
||||
(8, 44, 20, 7, 4, 3, 9, 5, 3),
|
||||
(9, 49, 22, 7, 4, 3, 10, 5, 4),
|
||||
(10, 54, 24, 7, 4, 3, 10, 6, 4),
|
||||
(11, 58, 26, 8, 5, 3, 11, 6, 4),
|
||||
(12, 63, 28, 8, 5, 3, 11, 6, 4),
|
||||
(13, 68, 30, 8, 5, 3, 12, 7, 4),
|
||||
(14, 72, 32, 8, 5, 3, 12, 7, 5),
|
||||
(15, 77, 34, 9, 5, 3, 13, 7, 5),
|
||||
(16, 82, 36, 9, 5, 4, 13, 8, 5),
|
||||
(17, 87, 38, 9, 5, 4, 14, 8, 5),
|
||||
(18, 91, 40, 9, 6, 4, 14, 8, 5),
|
||||
(19, 96, 42, 10, 6, 4, 15, 8, 6),
|
||||
(20, 101, 44, 10, 6, 4, 15, 9, 6),
|
||||
(21, 105, 46, 10, 6, 4, 16, 9, 6),
|
||||
(22, 110, 48, 10, 6, 4, 16, 9, 6),
|
||||
(23, 115, 50, 11, 6, 4, 17, 10, 6),
|
||||
(24, 120, 52, 11, 6, 4, 17, 10, 7),
|
||||
(25, 124, 54, 11, 7, 4, 18, 10, 7),
|
||||
(26, 129, 56, 11, 7, 5, 18, 11, 7),
|
||||
(27, 134, 58, 12, 7, 5, 19, 11, 7),
|
||||
(28, 139, 60, 12, 7, 5, 19, 11, 7),
|
||||
(29, 143, 62, 12, 7, 5, 20, 11, 8),
|
||||
(30, 148, 64, 12, 7, 5, 20, 12, 8),
|
||||
(31, 153, 66, 13, 8, 5, 21, 12, 8),
|
||||
(32, 157, 68, 13, 8, 5, 21, 12, 8),
|
||||
(33, 162, 70, 13, 8, 5, 22, 13, 8),
|
||||
(34, 167, 72, 13, 8, 5, 22, 13, 9),
|
||||
(35, 172, 74, 14, 8, 5, 23, 13, 9),
|
||||
(36, 176, 76, 14, 8, 6, 23, 14, 9),
|
||||
(37, 181, 78, 14, 8, 6, 24, 14, 9),
|
||||
(38, 186, 80, 14, 9, 6, 24, 14, 9),
|
||||
(39, 190, 82, 15, 9, 6, 25, 14, 10),
|
||||
(40, 195, 84, 15, 9, 6, 25, 15, 10),
|
||||
(41, 200, 86, 15, 9, 6, 26, 15, 10),
|
||||
(42, 205, 88, 15, 9, 6, 26, 15, 10),
|
||||
(43, 209, 90, 16, 9, 6, 27, 16, 10),
|
||||
(44, 214, 92, 16, 9, 6, 27, 16, 11),
|
||||
(45, 219, 94, 16, 10, 6, 28, 16, 11),
|
||||
(46, 224, 96, 16, 10, 7, 28, 17, 11),
|
||||
(47, 228, 98, 17, 10, 7, 29, 17, 11),
|
||||
(48, 233, 100, 17, 10, 7, 29, 17, 11),
|
||||
(49, 238, 102, 17, 10, 7, 30, 17, 12),
|
||||
(50, 242, 104, 17, 10, 7, 30, 18, 12),
|
||||
(51, 247, 106, 18, 11, 7, 31, 18, 12),
|
||||
(52, 252, 108, 18, 11, 7, 31, 18, 12),
|
||||
(53, 257, 110, 18, 11, 7, 32, 19, 12),
|
||||
(54, 261, 112, 18, 11, 7, 32, 19, 13),
|
||||
(55, 266, 114, 19, 11, 7, 33, 19, 13),
|
||||
(56, 271, 116, 19, 11, 8, 33, 20, 13),
|
||||
(57, 276, 118, 19, 11, 8, 34, 20, 13),
|
||||
(58, 280, 120, 19, 12, 8, 34, 20, 13),
|
||||
(59, 285, 122, 20, 12, 8, 35, 20, 14),
|
||||
(60, 290, 124, 20, 12, 8, 35, 21, 14),
|
||||
(61, 294, 126, 20, 12, 8, 36, 21, 14),
|
||||
(62, 299, 128, 20, 12, 8, 36, 21, 14),
|
||||
(63, 304, 130, 21, 12, 8, 37, 22, 14),
|
||||
(64, 309, 132, 21, 12, 8, 37, 22, 15),
|
||||
(65, 313, 134, 21, 13, 8, 38, 22, 15),
|
||||
(66, 318, 136, 21, 13, 9, 38, 23, 15),
|
||||
(67, 323, 138, 22, 13, 9, 39, 23, 15),
|
||||
(68, 327, 140, 22, 13, 9, 39, 23, 15),
|
||||
(69, 332, 142, 22, 13, 9, 40, 24, 16),
|
||||
(70, 337, 144, 22, 13, 9, 40, 24, 16),
|
||||
(71, 342, 146, 23, 14, 9, 41, 24, 16),
|
||||
(72, 346, 148, 23, 14, 9, 41, 24, 16),
|
||||
(73, 351, 150, 23, 14, 9, 42, 25, 16),
|
||||
(74, 356, 152, 23, 14, 9, 42, 25, 17),
|
||||
(75, 361, 154, 24, 14, 9, 43, 25, 17),
|
||||
(76, 365, 156, 24, 14, 10, 43, 26, 17),
|
||||
(77, 370, 158, 24, 14, 10, 44, 26, 17),
|
||||
(78, 375, 160, 24, 15, 10, 44, 26, 17),
|
||||
(79, 379, 162, 25, 15, 10, 45, 27, 18),
|
||||
(80, 384, 164, 25, 15, 10, 45, 27, 18),
|
||||
(81, 389, 166, 25, 15, 10, 46, 27, 18),
|
||||
(82, 394, 168, 25, 15, 10, 46, 27, 18),
|
||||
(83, 398, 170, 26, 15, 10, 47, 28, 18),
|
||||
(84, 403, 172, 26, 16, 10, 47, 28, 19),
|
||||
(85, 408, 174, 26, 16, 10, 48, 28, 19),
|
||||
(86, 413, 176, 26, 16, 11, 48, 29, 19),
|
||||
(87, 417, 178, 27, 16, 11, 49, 29, 19),
|
||||
(88, 422, 180, 27, 16, 11, 49, 29, 19),
|
||||
(89, 427, 182, 27, 16, 11, 50, 30, 20),
|
||||
(90, 431, 184, 27, 16, 11, 50, 30, 20),
|
||||
(91, 436, 186, 28, 17, 11, 51, 30, 20),
|
||||
(92, 441, 188, 28, 17, 11, 51, 30, 20),
|
||||
(93, 446, 190, 28, 17, 11, 52, 31, 20),
|
||||
(94, 450, 192, 28, 17, 11, 52, 31, 21),
|
||||
(95, 455, 194, 29, 17, 11, 53, 31, 21),
|
||||
(96, 460, 196, 29, 17, 12, 53, 32, 21),
|
||||
(97, 464, 198, 29, 17, 12, 54, 32, 21),
|
||||
(98, 469, 200, 29, 18, 12, 54, 32, 21),
|
||||
(99, 474, 202, 30, 18, 12, 55, 33, 22),
|
||||
(100, 479, 204, 30, 18, 12, 55, 33, 22),
|
||||
(101, 483, 206, 30, 18, 12, 56, 33, 22),
|
||||
(102, 488, 208, 30, 18, 12, 56, 33, 22),
|
||||
(103, 493, 210, 31, 18, 12, 57, 34, 23),
|
||||
(104, 498, 212, 31, 19, 12, 57, 34, 23),
|
||||
(105, 502, 214, 31, 19, 12, 58, 34, 23),
|
||||
(106, 507, 216, 31, 19, 13, 58, 35, 23),
|
||||
(107, 512, 218, 32, 19, 13, 59, 35, 23),
|
||||
(108, 516, 220, 32, 19, 13, 59, 35, 24),
|
||||
(109, 521, 222, 32, 19, 13, 60, 36, 24),
|
||||
(110, 526, 224, 32, 19, 13, 60, 36, 24),
|
||||
(111, 531, 226, 33, 20, 13, 61, 36, 24),
|
||||
(112, 535, 228, 33, 20, 13, 61, 36, 24),
|
||||
(113, 540, 230, 33, 20, 13, 62, 37, 25),
|
||||
(114, 545, 232, 33, 20, 13, 62, 37, 25),
|
||||
(115, 549, 234, 34, 20, 13, 63, 37, 25),
|
||||
(116, 554, 236, 34, 20, 14, 63, 38, 25),
|
||||
(117, 559, 238, 34, 20, 14, 64, 38, 25),
|
||||
(118, 564, 240, 34, 21, 14, 64, 38, 26),
|
||||
(119, 568, 242, 35, 21, 14, 65, 39, 26),
|
||||
(120, 573, 244, 35, 21, 14, 65, 39, 26),
|
||||
(121, 578, 246, 35, 21, 14, 66, 39, 26),
|
||||
(122, 583, 248, 35, 21, 14, 66, 39, 26),
|
||||
(123, 587, 250, 36, 21, 14, 67, 40, 27),
|
||||
(124, 592, 252, 36, 22, 14, 67, 40, 27),
|
||||
(125, 597, 254, 36, 22, 14, 68, 40, 27),
|
||||
(126, 601, 256, 36, 22, 15, 68, 41, 27),
|
||||
(127, 606, 258, 37, 22, 15, 69, 41, 27),
|
||||
(128, 611, 260, 37, 22, 15, 69, 41, 28),
|
||||
(129, 616, 262, 37, 22, 15, 70, 42, 28),
|
||||
(130, 620, 264, 37, 22, 15, 70, 42, 28),
|
||||
(131, 625, 266, 38, 23, 15, 71, 42, 28),
|
||||
(132, 630, 268, 38, 23, 15, 71, 42, 28),
|
||||
(133, 635, 270, 38, 23, 15, 72, 43, 29),
|
||||
(134, 639, 272, 38, 23, 15, 72, 43, 29),
|
||||
(135, 644, 274, 39, 23, 15, 73, 43, 29),
|
||||
(136, 649, 276, 39, 23, 16, 73, 44, 29),
|
||||
(137, 653, 278, 39, 24, 16, 74, 44, 29),
|
||||
(138, 658, 280, 39, 24, 16, 74, 44, 30),
|
||||
(139, 663, 282, 40, 24, 16, 75, 45, 30),
|
||||
(140, 668, 284, 40, 24, 16, 75, 45, 30),
|
||||
(141, 672, 286, 40, 24, 16, 76, 45, 30),
|
||||
(142, 677, 288, 40, 24, 16, 76, 46, 30),
|
||||
(143, 682, 290, 41, 24, 16, 77, 46, 31),
|
||||
(144, 686, 292, 41, 25, 16, 77, 46, 31),
|
||||
(145, 691, 294, 41, 25, 16, 78, 46, 31),
|
||||
(146, 696, 296, 41, 25, 17, 78, 47, 31),
|
||||
(147, 701, 298, 42, 25, 17, 79, 47, 31),
|
||||
(148, 705, 300, 42, 25, 17, 79, 47, 32),
|
||||
(149, 710, 302, 42, 25, 17, 80, 48, 32),
|
||||
(150, 715, 304, 42, 25, 17, 80, 48, 32),
|
||||
(151, 720, 306, 43, 26, 17, 81, 48, 32),
|
||||
(152, 724, 308, 43, 26, 17, 81, 49, 32),
|
||||
(153, 729, 310, 43, 26, 17, 82, 49, 33),
|
||||
(154, 734, 312, 43, 26, 17, 82, 49, 33),
|
||||
(155, 738, 314, 44, 26, 17, 83, 49, 33),
|
||||
(156, 743, 316, 44, 26, 18, 83, 50, 33),
|
||||
(157, 748, 318, 44, 27, 18, 84, 50, 33),
|
||||
(158, 753, 320, 44, 27, 18, 84, 50, 34),
|
||||
(159, 757, 322, 45, 27, 18, 85, 51, 34),
|
||||
(160, 762, 324, 45, 27, 18, 85, 51, 34),
|
||||
(161, 767, 326, 45, 27, 18, 86, 51, 34),
|
||||
(162, 772, 328, 45, 27, 18, 86, 52, 34),
|
||||
(163, 776, 330, 46, 27, 18, 87, 52, 35),
|
||||
(164, 781, 332, 46, 28, 18, 87, 52, 35),
|
||||
(165, 786, 334, 46, 28, 18, 88, 52, 35),
|
||||
(166, 790, 336, 46, 28, 19, 88, 53, 35),
|
||||
(167, 795, 338, 47, 28, 19, 89, 53, 35),
|
||||
(168, 800, 340, 47, 28, 19, 89, 53, 36),
|
||||
(169, 805, 342, 47, 28, 19, 90, 54, 36),
|
||||
(170, 809, 344, 47, 28, 19, 90, 54, 36),
|
||||
(171, 814, 346, 48, 29, 19, 91, 54, 36),
|
||||
(172, 819, 348, 48, 29, 19, 91, 55, 36),
|
||||
(173, 823, 350, 48, 29, 19, 92, 55, 37),
|
||||
(174, 828, 352, 48, 29, 19, 92, 55, 37),
|
||||
(175, 833, 354, 49, 29, 19, 93, 55, 37),
|
||||
(176, 838, 356, 49, 29, 20, 93, 56, 37),
|
||||
(177, 842, 358, 49, 30, 20, 94, 56, 37),
|
||||
(178, 847, 360, 49, 30, 20, 94, 56, 38),
|
||||
(179, 852, 362, 50, 30, 20, 95, 57, 38),
|
||||
(180, 857, 364, 50, 30, 20, 95, 57, 38),
|
||||
(181, 861, 366, 50, 30, 20, 96, 57, 38),
|
||||
(182, 866, 368, 50, 30, 20, 96, 58, 38),
|
||||
(183, 871, 370, 51, 30, 20, 97, 58, 39),
|
||||
(184, 875, 372, 51, 31, 20, 97, 58, 39),
|
||||
(185, 880, 374, 51, 31, 20, 98, 58, 39),
|
||||
(186, 885, 376, 51, 31, 21, 98, 59, 39),
|
||||
(187, 890, 378, 52, 31, 21, 99, 59, 39),
|
||||
(188, 894, 380, 52, 31, 21, 99, 59, 40),
|
||||
(189, 899, 382, 52, 31, 21, 100, 60, 40),
|
||||
(190, 904, 384, 52, 31, 21, 100, 60, 40),
|
||||
(191, 908, 386, 53, 32, 21, 101, 60, 40),
|
||||
(192, 913, 388, 53, 32, 21, 101, 61, 40),
|
||||
(193, 918, 390, 53, 32, 21, 102, 61, 41),
|
||||
(194, 923, 392, 53, 32, 21, 102, 61, 41),
|
||||
(195, 927, 394, 54, 32, 21, 103, 61, 41),
|
||||
(196, 932, 396, 54, 32, 22, 103, 62, 41),
|
||||
(197, 937, 398, 54, 33, 22, 104, 62, 41),
|
||||
(198, 942, 400, 54, 33, 22, 104, 62, 42),
|
||||
(199, 946, 402, 55, 33, 22, 105, 63, 42),
|
||||
(200, 951, 404, 55, 33, 22, 105, 63, 42),
|
||||
(201, 1001, 426, 55, 33, 22, 106, 63, 42),
|
||||
(202, 1012, 433, 55, 33, 22, 106, 63, 42),
|
||||
(203, 1022, 440, 55, 33, 22, 107, 63, 42),
|
||||
(204, 1033, 446, 56, 33, 22, 107, 64, 42),
|
||||
(205, 1043, 453, 56, 33, 22, 107, 64, 43),
|
||||
(206, 1054, 460, 56, 34, 22, 108, 64, 43),
|
||||
(207, 1065, 467, 56, 34, 22, 108, 64, 43),
|
||||
(208, 1075, 473, 56, 34, 22, 108, 65, 43),
|
||||
(209, 1086, 480, 56, 34, 23, 109, 65, 43),
|
||||
(210, 1096, 487, 57, 34, 23, 109, 65, 43),
|
||||
(211, 1107, 494, 57, 34, 23, 110, 65, 44),
|
||||
(212, 1118, 500, 57, 34, 23, 110, 65, 44),
|
||||
(213, 1128, 507, 57, 34, 23, 110, 66, 44),
|
||||
(214, 1139, 514, 57, 34, 23, 111, 66, 44),
|
||||
(215, 1149, 521, 58, 35, 23, 111, 66, 44),
|
||||
(216, 1160, 527, 58, 35, 23, 111, 66, 44),
|
||||
(217, 1171, 534, 58, 35, 23, 112, 67, 44),
|
||||
(218, 1181, 541, 58, 35, 23, 112, 67, 45),
|
||||
(219, 1192, 548, 58, 35, 23, 112, 67, 45),
|
||||
(220, 1203, 554, 58, 35, 23, 113, 67, 45),
|
||||
(221, 1213, 561, 59, 35, 23, 113, 67, 45),
|
||||
(222, 1224, 568, 59, 35, 23, 113, 68, 45),
|
||||
(223, 1234, 575, 59, 35, 24, 114, 68, 45),
|
||||
(224, 1245, 581, 59, 36, 24, 114, 68, 45),
|
||||
(225, 1256, 588, 59, 36, 24, 114, 68, 46),
|
||||
(226, 1266, 595, 60, 36, 24, 115, 69, 46),
|
||||
(227, 1277, 602, 60, 36, 24, 115, 69, 46),
|
||||
(228, 1287, 608, 60, 36, 24, 116, 69, 46),
|
||||
(229, 1298, 615, 60, 36, 24, 116, 69, 46),
|
||||
(230, 1309, 622, 60, 36, 24, 116, 69, 46),
|
||||
(231, 1319, 629, 60, 36, 24, 117, 70, 47),
|
||||
(232, 1330, 635, 61, 36, 24, 117, 70, 47),
|
||||
(233, 1340, 642, 61, 37, 24, 117, 70, 47),
|
||||
(234, 1351, 649, 61, 37, 24, 118, 70, 47),
|
||||
(235, 1362, 656, 61, 37, 24, 118, 71, 47),
|
||||
(236, 1372, 663, 61, 37, 24, 118, 71, 47),
|
||||
(237, 1383, 669, 62, 37, 25, 119, 71, 47),
|
||||
(238, 1393, 676, 62, 37, 25, 119, 71, 48),
|
||||
(239, 1404, 683, 62, 37, 25, 119, 71, 48),
|
||||
(240, 1415, 690, 62, 37, 25, 120, 72, 48),
|
||||
(241, 1425, 696, 62, 37, 25, 120, 72, 48),
|
||||
(242, 1436, 703, 62, 38, 25, 120, 72, 48),
|
||||
(243, 1446, 710, 63, 38, 25, 121, 72, 48),
|
||||
(244, 1457, 717, 63, 38, 25, 121, 73, 49),
|
||||
(245, 1468, 723, 63, 38, 25, 122, 73, 49),
|
||||
(246, 1478, 730, 63, 38, 25, 122, 73, 49),
|
||||
(247, 1489, 737, 63, 38, 25, 122, 73, 49),
|
||||
(248, 1499, 744, 64, 38, 25, 123, 73, 49),
|
||||
(249, 1510, 750, 64, 38, 25, 123, 74, 49),
|
||||
(250, 1521, 757, 64, 38, 25, 123, 74, 49),
|
||||
(251, 1531, 764, 64, 39, 26, 124, 74, 50),
|
||||
(252, 1542, 771, 64, 39, 26, 124, 74, 50),
|
||||
(253, 1553, 777, 64, 39, 26, 124, 75, 50),
|
||||
(254, 1563, 784, 65, 39, 26, 125, 75, 50),
|
||||
(255, 1574, 791, 65, 39, 26, 125, 75, 50),
|
||||
(256, 1584, 798, 65, 39, 26, 125, 75, 50),
|
||||
(257, 1595, 804, 65, 39, 26, 126, 75, 50),
|
||||
(258, 1606, 811, 65, 39, 26, 126, 76, 51),
|
||||
(259, 1616, 818, 66, 39, 26, 127, 76, 51),
|
||||
(260, 1627, 825, 66, 40, 26, 127, 76, 51),
|
||||
(261, 1637, 831, 66, 40, 26, 127, 76, 51),
|
||||
(262, 1648, 838, 66, 40, 26, 128, 77, 51),
|
||||
(263, 1659, 845, 66, 40, 26, 128, 77, 51),
|
||||
(264, 1669, 852, 66, 40, 26, 128, 77, 52),
|
||||
(265, 1680, 858, 67, 40, 27, 129, 77, 52),
|
||||
(266, 1690, 865, 67, 40, 27, 129, 77, 52),
|
||||
(267, 1701, 872, 67, 40, 27, 129, 78, 52),
|
||||
(268, 1712, 879, 67, 40, 27, 130, 78, 52),
|
||||
(269, 1722, 886, 67, 41, 27, 130, 78, 52),
|
||||
(270, 1733, 892, 68, 41, 27, 130, 78, 52),
|
||||
(271, 1743, 899, 68, 41, 27, 131, 79, 53),
|
||||
(272, 1754, 906, 68, 41, 27, 131, 79, 53),
|
||||
(273, 1765, 913, 68, 41, 27, 131, 79, 53),
|
||||
(274, 1775, 919, 68, 41, 27, 132, 79, 53),
|
||||
(275, 1786, 926, 68, 41, 27, 132, 79, 53),
|
||||
(276, 1796, 933, 69, 41, 27, 133, 80, 53),
|
||||
(277, 1807, 940, 69, 41, 27, 133, 80, 54),
|
||||
(278, 1818, 946, 69, 42, 27, 133, 80, 54),
|
||||
(279, 1828, 953, 69, 42, 28, 134, 80, 54),
|
||||
(280, 1839, 960, 69, 42, 28, 134, 81, 54),
|
||||
(281, 1849, 967, 70, 42, 28, 134, 81, 54),
|
||||
(282, 1860, 973, 70, 42, 28, 135, 81, 54),
|
||||
(283, 1871, 980, 70, 42, 28, 135, 81, 54),
|
||||
(284, 1881, 987, 70, 42, 28, 135, 81, 55),
|
||||
(285, 1892, 994, 70, 42, 28, 136, 82, 55),
|
||||
(286, 1903, 1000, 70, 42, 28, 136, 82, 55),
|
||||
(287, 1913, 1007, 71, 43, 28, 136, 82, 55),
|
||||
(288, 1924, 1014, 71, 43, 28, 137, 82, 55),
|
||||
(289, 1934, 1021, 71, 43, 28, 137, 83, 55),
|
||||
(290, 1945, 1027, 71, 43, 28, 137, 83, 55),
|
||||
(291, 1956, 1034, 71, 43, 28, 138, 83, 56),
|
||||
(292, 1966, 1041, 72, 43, 28, 138, 83, 56),
|
||||
(293, 1977, 1048, 72, 43, 29, 139, 83, 56),
|
||||
(294, 1987, 1054, 72, 43, 29, 139, 84, 56),
|
||||
(295, 1998, 1061, 72, 43, 29, 139, 84, 56),
|
||||
(296, 2009, 1068, 72, 44, 29, 140, 84, 56),
|
||||
(297, 2019, 1075, 72, 44, 29, 140, 84, 57),
|
||||
(298, 2030, 1081, 73, 44, 29, 140, 85, 57),
|
||||
(299, 2040, 1088, 73, 44, 29, 141, 85, 57),
|
||||
(300, 2051, 1095, 73, 44, 29, 141, 85, 57);
|
||||
@@ -0,0 +1,185 @@
|
||||
# noinspection LongLineForFile
|
||||
|
||||
DROP TABLE IF EXISTS premade_implant;
|
||||
CREATE TABLE IF NOT EXISTS premade_implant
|
||||
(
|
||||
ImplantTypeID INT NOT NULL,
|
||||
ProfessionID INT NOT NULL,
|
||||
AbilityID INT NOT NULL,
|
||||
ShinyClusterID INT NOT NULL,
|
||||
BrightClusterID INT NOT NULL,
|
||||
FadedClusterID INT NOT NULL
|
||||
);
|
||||
INSERT INTO premade_implant (ImplantTypeID, ProfessionID, AbilityID, ShinyClusterID, BrightClusterID, FadedClusterID)
|
||||
VALUES (4, 1, 5, 42, 41, 72),
|
||||
(4, 2, 3, 52, 10, 72),
|
||||
(4, 3, 3, 52, 10, 72),
|
||||
(4, 4, 5, 42, 41, 43),
|
||||
(4, 5, 5, 42, 41, 4),
|
||||
(4, 6, 3, 52, 10, 51),
|
||||
(4, 7, 5, 42, 41, 72),
|
||||
(4, 8, 5, 42, 10, 77),
|
||||
(4, 9, 3, 22, 10, 72),
|
||||
(4, 10, 3, 52, 41, 72),
|
||||
(4, 11, 3, 52, 41, 72),
|
||||
(4, 13, 5, 42, 36, 43),
|
||||
(4, 14, 5, 76, 41, 77),
|
||||
(3, 1, 4, 56, 82, 37),
|
||||
(3, 2, 4, 56, 21, 62),
|
||||
(3, 3, 2, 0, 63, 62),
|
||||
(3, 4, 2, 0, 82, 37),
|
||||
(3, 5, 1, 0, 21, 62),
|
||||
(3, 6, 2, 0, 82, 37),
|
||||
(3, 7, 2, 0, 82, 61),
|
||||
(3, 8, 2, 0, 63, 62),
|
||||
(3, 9, 2, 0, 82, 62),
|
||||
(3, 10, 2, 0, 82, 37),
|
||||
(3, 11, 4, 56, 82, 37),
|
||||
(3, 13, 1, 0, 21, 62),
|
||||
(3, 14, 4, 56, 82, 37),
|
||||
(1, 1, 1, 0, 35, 40),
|
||||
(1, 2, 1, 68, 62, 79),
|
||||
(1, 3, 2, 26, 62, 79),
|
||||
(1, 4, 2, 0, 81, 40),
|
||||
(1, 5, 3, 0, 72, 40),
|
||||
(1, 6, 2, 82, 37, 79),
|
||||
(1, 7, 2, 82, 72, 79),
|
||||
(1, 8, 2, 0, 62, 79),
|
||||
(1, 9, 2, 82, 62, 79),
|
||||
(1, 10, 2, 82, 62, 79),
|
||||
(1, 11, 2, 82, 20, 40),
|
||||
(1, 13, 1, 8, 66, 9),
|
||||
(1, 14, 4, 38, 62, 79),
|
||||
(7, 1, 1, 46, 7, 25),
|
||||
(7, 2, 1, 21, 7, 25),
|
||||
(7, 3, 1, 28, 24, 25),
|
||||
(7, 4, 1, 28, 24, 25),
|
||||
(7, 5, 1, 28, 7, 25),
|
||||
(7, 6, 1, 28, 7, 25),
|
||||
(7, 7, 1, 28, 7, 25),
|
||||
(7, 8, 1, 46, 24, 0),
|
||||
(7, 9, 1, 58, 39, 25),
|
||||
(7, 10, 1, 28, 7, 25),
|
||||
(7, 11, 1, 28, 24, 25),
|
||||
(7, 13, 1, 28, 7, 25),
|
||||
(7, 14, 1, 28, 7, 25),
|
||||
(2, 1, 2, 10, 38, 71),
|
||||
(2, 2, 3, 72, 67, 71),
|
||||
(2, 3, 2, 40, 52, 82),
|
||||
(2, 4, 2, 10, 52, 71),
|
||||
(2, 5, 1, 10, 0, 71),
|
||||
(2, 6, 2, 40, 52, 82),
|
||||
(2, 7, 2, 61, 52, 82),
|
||||
(2, 8, 3, 72, 22, 71),
|
||||
(2, 9, 4, 31, 22, 71),
|
||||
(2, 10, 2, 40, 52, 71),
|
||||
(2, 11, 3, 40, 52, 0),
|
||||
(2, 13, 1, 66, 67, 0),
|
||||
(2, 14, 2, 62, 67, 71),
|
||||
(8, 1, 6, 14, 77, 41),
|
||||
(8, 2, 1, 0, 15, 41),
|
||||
(8, 3, 1, 0, 15, 41),
|
||||
(8, 4, 5, 0, 77, 41),
|
||||
(8, 5, 6, 14, 4, 41),
|
||||
(8, 6, 2, 0, 0, 41),
|
||||
(8, 7, 1, 0, 15, 41),
|
||||
(8, 8, 1, 14, 5, 0),
|
||||
(8, 9, 6, 14, 77, 58),
|
||||
(8, 10, 1, 0, 15, 41),
|
||||
(8, 11, 2, 0, 0, 41),
|
||||
(8, 13, 5, 0, 77, 41),
|
||||
(8, 14, 5, 0, 77, 41),
|
||||
(6, 1, 5, 7, 46, 42),
|
||||
(6, 2, 1, 7, 28, 0),
|
||||
(6, 3, 5, 7, 28, 11),
|
||||
(6, 4, 1, 24, 28, 42),
|
||||
(6, 5, 1, 24, 28, 42),
|
||||
(6, 6, 1, 7, 28, 0),
|
||||
(6, 8, 1, 24, 28, 42),
|
||||
(6, 9, 5, 7, 28, 42),
|
||||
(6, 10, 5, 7, 76, 70),
|
||||
(6, 11, 1, 24, 28, 11),
|
||||
(6, 13, 5, 7, 76, 42),
|
||||
(6, 14, 5, 7, 28, 42),
|
||||
(10, 1, 1, 29, 80, 31),
|
||||
(10, 2, 1, 0, 80, 31),
|
||||
(10, 3, 5, 0, 30, 31),
|
||||
(10, 4, 5, 0, 30, 31),
|
||||
(10, 5, 1, 29, 30, 19),
|
||||
(10, 6, 4, 0, 0, 31),
|
||||
(10, 7, 1, 0, 80, 31),
|
||||
(10, 8, 5, 29, 0, 31),
|
||||
(10, 9, 5, 0, 30, 39),
|
||||
(10, 10, 5, 0, 30, 31),
|
||||
(10, 11, 1, 0, 80, 31),
|
||||
(10, 13, 5, 0, 30, 66),
|
||||
(10, 14, 5, 0, 30, 31),
|
||||
(9, 1, 1, 49, 70, 54),
|
||||
(9, 2, 1, 0, 70, 68),
|
||||
(9, 3, 1, 50, 70, 54),
|
||||
(9, 4, 1, 0, 70, 54),
|
||||
(9, 5, 1, 49, 70, 54),
|
||||
(9, 6, 3, 0, 0, 54),
|
||||
(9, 7, 1, 0, 70, 54),
|
||||
(9, 8, 3, 0, 70, 0),
|
||||
(9, 9, 1, 0, 70, 54),
|
||||
(9, 10, 1, 49, 70, 54),
|
||||
(9, 11, 1, 0, 70, 54),
|
||||
(9, 13, 1, 0, 70, 54),
|
||||
(9, 14, 1, 50, 70, 54),
|
||||
(11, 1, 1, 3, 14, 29),
|
||||
(11, 2, 1, 32, 78, 44),
|
||||
(11, 3, 1, 74, 17, 44),
|
||||
(11, 4, 1, 15, 17, 65),
|
||||
(11, 5, 6, 2, 14, 29),
|
||||
(11, 5, 6, 4, 14, 29),
|
||||
(11, 7, 1, 48, 17, 65),
|
||||
(11, 8, 1, 5, 14, 29),
|
||||
(11, 9, 5, 6, 58, 65),
|
||||
(11, 10, 6, 2, 17, 65),
|
||||
(11, 13, 1, 9, 78, 65),
|
||||
(11, 14, 1, 74, 17, 65),
|
||||
(13, 1, 1, 0, 29, 3),
|
||||
(13, 1, 1, 80, 60, 16),
|
||||
(13, 2, 2, 0, 79, 20),
|
||||
(13, 3, 2, 0, 79, 81),
|
||||
(13, 4, 2, 0, 40, 81),
|
||||
(13, 5, 2, 0, 40, 2),
|
||||
(13, 5, 2, 0, 40, 81),
|
||||
(13, 6, 2, 0, 79, 81),
|
||||
(13, 7, 2, 0, 79, 16),
|
||||
(13, 8, 2, 0, 79, 81),
|
||||
(13, 9, 1, 39, 31, 81),
|
||||
(13, 10, 2, 0, 79, 2),
|
||||
(13, 11, 2, 0, 40, 20),
|
||||
(13, 13, 1, 0, 9, 16),
|
||||
(13, 14, 1, 80, 79, 20),
|
||||
(12, 1, 1, 55, 3, 49),
|
||||
(12, 1, 1, 60, 50, 32),
|
||||
(12, 2, 1, 67, 68, 32),
|
||||
(12, 3, 1, 67, 54, 32),
|
||||
(12, 4, 1, 60, 54, 32),
|
||||
(12, 5, 1, 70, 2, 49),
|
||||
(12, 5, 1, 70, 54, 49),
|
||||
(12, 6, 1, 60, 54, 32),
|
||||
(12, 7, 5, 70, 16, 0),
|
||||
(12, 8, 1, 55, 0, 0),
|
||||
(12, 9, 3, 69, 54, 0),
|
||||
(12, 10, 1, 70, 2, 49),
|
||||
(12, 11, 1, 60, 54, 32),
|
||||
(12, 13, 1, 70, 16, 32),
|
||||
(12, 14, 1, 67, 16, 32),
|
||||
(5, 1, 4, 17, 71, 7),
|
||||
(5, 1, 6, 0, 0, 14),
|
||||
(5, 2, 1, 0, 25, 10),
|
||||
(5, 3, 4, 65, 43, 74),
|
||||
(5, 4, 4, 17, 43, 76),
|
||||
(5, 5, 5, 19, 42, 14),
|
||||
(5, 6, 3, 0, 43, 10),
|
||||
(5, 7, 5, 30, 42, 76),
|
||||
(5, 8, 5, 0, 42, 10),
|
||||
(5, 9, 4, 65, 42, 28),
|
||||
(5, 10, 4, 17, 43, 10),
|
||||
(5, 11, 3, 0, 43, 10),
|
||||
(5, 13, 5, 19, 42, 76),
|
||||
(5, 14, 4, 17, 43, 74);
|
||||
Reference in New Issue
Block a user