|
from tinydb import TinyDB, Query |
|
|
|
db = TinyDB('./db.json') |
|
material_table = db.table('material') |
|
medicine_table = db.table('medicine') |
|
|
|
|
|
|
|
def get_medicines(type="ALL"): |
|
assert type in ["ALL", "回复状态", "突破概率", "加攻击力"], f"type:{type} 不是有效的类别" |
|
if type in ["ALL"]: |
|
a = medicine_table.all() |
|
else: |
|
medicine = Query() |
|
a = medicine_table.search(medicine.type == type) |
|
return list(map(lambda x: x["name"], a)) |
|
|
|
|
|
def _get_medicine_elixir_config(medicine_select: str): |
|
medicine = Query() |
|
return medicine_table.search(medicine.name == medicine_select)[0] |
|
|
|
def _get_material_elixir_config(material_select: str): |
|
medicine = Query() |
|
return material_table.search(medicine.name == material_select)[0] |
|
|
|
def get_first_material(medicine_select, medicine_level_select="ALL",material_max_num=16) ->list: |
|
material = Query() |
|
m = _get_medicine_elixir_config(medicine_select) |
|
func1_type = m["func1_type"] |
|
func1_power = m["func1_power"] |
|
func2_type = m["func2_type"] |
|
func2_power = m["func2_power"] |
|
if medicine_level_select == "ALL": |
|
a = material_table.search((material.main_func_t == func1_type) | (material.auxi_func_t == func1_type) | ( |
|
material.main_func_t == func2_type) | (material.auxi_func_t == func2_type)) |
|
else: |
|
a = material_table.search((material.level == medicine_level_select) & ( |
|
(material.main_func_t == func1_type) | (material.auxi_func_t == func1_type) | ( |
|
material.main_func_t == func2_type) | (material.auxi_func_t == func2_type))) |
|
|
|
def get_num(material0): |
|
global material_second_f |
|
name = material0["name"] |
|
if material0["main_func_t"] == func1_type: |
|
material_second_f = (func2_type,False) |
|
num = func1_power / material0["main_func_p"] |
|
elif material0["auxi_func_t"] == func1_type: |
|
material_second_f = (func2_type,True) |
|
num = func1_power / material0["auxi_func_p"] |
|
elif material0["main_func_t"] == func2_type: |
|
material_second_f = (func1_type,False) |
|
num = func2_power / material0["main_func_p"] |
|
elif material0["auxi_func_t"] == func2_type: |
|
material_second_f = (func1_type,True) |
|
num = func2_power / material0["auxi_func_p"] |
|
num = int(num) + 1 if num > int(num) else int(num) |
|
return (name,num,material_second_f) |
|
rtn = list(map(get_num, a)) |
|
rtn = list(filter(lambda x:x[1]<=material_max_num, rtn)) |
|
|
|
def check_material(material0): |
|
if material0[1] > material_max_num: |
|
return False |
|
material_t = material.main_func_t if material0[2][1] else material.auxi_func_t |
|
a = material_table.search(material_t == material0[2][0]) |
|
if a == []: |
|
return False |
|
return True |
|
|
|
rtn = list(filter(check_material, rtn)) |
|
rtn = list(map(lambda x: f"{x[0]}*{x[1]}", rtn)) |
|
return rtn |
|
|
|
def get_second_material(medicine_select, first_material:str, medicine_level_select="ALL",material_max_num=16) ->list: |
|
m = _get_medicine_elixir_config(medicine_select) |
|
first_material_name, _ = first_material.split("*") |
|
first_material = _get_material_elixir_config(first_material_name) |
|
func1_type = m["func1_type"] |
|
func1_power = m["func1_power"] |
|
func2_type = m["func2_type"] |
|
func2_power = m["func2_power"] |
|
|
|
if first_material["main_func_t"] == func1_type: |
|
second_material_func_need,second_material_main = (func2_type,func2_power),False |
|
elif first_material["auxi_func_t"] == func1_type: |
|
second_material_func_need, second_material_main = (func2_type,func2_power), True |
|
elif first_material["main_func_t"] == func2_type: |
|
second_material_func_need, second_material_main = (func1_type,func1_power), False |
|
elif first_material["auxi_func_t"] == func2_type: |
|
second_material_func_need, second_material_main = (func1_type,func1_power), True |
|
|
|
material = Query() |
|
material_t = material.main_func_t if second_material_main else material.auxi_func_t |
|
if medicine_level_select == "ALL": |
|
a = material_table.search((material_t == second_material_func_need[0])) |
|
else: |
|
a = material_table.search((material.level == medicine_level_select) & (material_t == second_material_func_need[0])) |
|
|
|
def get_num(material0): |
|
name = material0["name"] |
|
material0_p = material0["main_func_p"] if second_material_main else material0["auxi_func_p"] |
|
num = second_material_func_need[1]/material0_p |
|
num = int(num) + 1 if num > int(num) else int(num) |
|
return (name,num) |
|
|
|
rtn = list(map(get_num, a)) |
|
rtn = list(filter(lambda x:x[1]<=material_max_num, rtn)) |
|
rtn = list(map(lambda x: f"{x[0]}*{x[1]}", rtn)) |
|
return rtn |
|
|
|
def get_possible_material(medicine_select, first_material:str="无", second_material:str="无",material_max_num=100): |
|
possible_choice = set() |
|
if first_material == "无": |
|
for first_material in get_first_material(medicine_select): |
|
for second_material in get_second_material(medicine_select, first_material): |
|
possible_choice.add((first_material, second_material)) |
|
elif second_material == "无": |
|
for second_material in get_second_material(medicine_select,first_material): |
|
possible_choice.add((first_material, second_material)) |
|
else: |
|
possible_choice.add((first_material,second_material)) |
|
|
|
m = _get_medicine_elixir_config(medicine_select) |
|
func1_type = m["func1_type"] |
|
func2_type = m["func2_type"] |
|
|
|
rtn = [] |
|
for first_material,second_material in possible_choice: |
|
first_material_name,first_material_num = first_material.split("*") |
|
second_material_name,second_material_num = second_material.split("*") |
|
first_material = _get_material_elixir_config(first_material_name) |
|
second_material = _get_material_elixir_config(second_material_name) |
|
if first_material["main_func_t"] in [func1_type,func2_type]: |
|
main_temp = first_material["main_temp"] * int(first_material_num) |
|
main_material = f"{first_material_name}*{first_material_num}" |
|
auxi_material = f"{second_material_name}*{second_material_num}" |
|
else: |
|
main_temp = second_material["main_temp"] * int(second_material_num) |
|
auxi_material = f"{first_material_name}*{first_material_num}" |
|
main_material = f"{second_material_name}*{second_material_num}" |
|
|
|
if main_temp==0: |
|
material_third_list=['恒心草(一品)*1', '红绫草(一品)*1', '五柳根(二品)*1', '天元果(二品)*1', '紫猴花(三品)*1', '九叶芝(三品)*1', '血莲精(四品)*1', '鸡冠草(四品)*1', '地心火芝(五品)*1', '天蝉灵叶(五品)*1', '三叶青芝(六品)*1', '七彩月兰(六品)*1', '地心淬灵乳(七品)*1', '天麻翡石精(七品)*1', '木灵三针花(八品)*1', '鎏鑫天晶草(八品)*1', '离火梧桐芝(九品)*1', '尘磊岩麟果(九品)*1', '宁心草(一品)*1', '凝血草(一品)*1', '流莹草(二品)*1', '蛇涎果(二品)*1', '轻灵草(三品)*1', '龙葵(三品)*1', '菩提花(四品)*1', '乌稠木(四品)*1', '天灵果(五品)*1', '灯心草(五品)*1', '白沉脂(六品)*1', '苦曼藤(六品)*1', '天问花(七品)*1', '渊血冥花(七品)*1', '阴阳黄泉花(八品)*1', '厉魂血珀(八品)*1', '太乙碧莹花(九品)*1', '森檀木(九品)*1', '地黄参(一品)*1', '火精枣(一品)*1', '风灵花(二品)*1', '伏龙参(二品)*1', '枫香脂(三品)*1', '炼魂珠(三品)*1', '石龙芮(四品)*1', '锦地罗(四品)*1', '伴妖草(五品)*1', '剑心竹(五品)*1', '混元果(六品)*1', '皇龙花(六品)*1', '血玉竹(七品)*1', '肠蚀草(七品)*1', '狼桃(八品)*1', '霸王花(八品)*1', '地龙干(九品)*1', '龙须藤(九品)*1'] |
|
|
|
else: |
|
material0 = Query() |
|
material0 = material0.phar_temp > 0 if main_temp<0 else material0.phar_temp <0 |
|
a = material_table.search(material0) |
|
|
|
def get_num(x): |
|
name = x["name"] |
|
phar_temp = x["phar_temp"] |
|
num = -main_temp/phar_temp |
|
if not num.is_integer(): |
|
num = 9999999 |
|
|
|
return (name,int(num)) |
|
|
|
a = list(map(get_num,a)) |
|
a = list(filter(lambda x:x[1]<=material_max_num, a)) |
|
material_third_list = list(map(lambda x:f'{x[0]}*{x[1]}',a)) |
|
rtn.append((main_material,auxi_material,material_third_list)) |
|
return rtn |
|
|
|
def get_basename(text): |
|
name,num = text.split("*") |
|
return name[:-4]+num |
|
|
|
|
|
def init(): |
|
medicine_list = get_medicines() |
|
return medicine_list |
|
|