File size: 8,800 Bytes
c2dd0f7 77749d1 c2dd0f7 aaddd09 c2dd0f7 f583104 c2dd0f7 f583104 c2dd0f7 5723520 c2dd0f7 d62bdaf c2dd0f7 d62bdaf c2dd0f7 3333068 c2dd0f7 f629cc0 c2dd0f7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
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
# num = 1 if num==0 else num
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
|