import db_supports
from amuletskillsholder import AmuletSkillsHolder
+from amuletidskillidholder import AmuletIdSkillIdHolder
from seedsholder import SeedsHolder
from sufficientsholder import SufficientsHolder
id2minmax_table, id2skill2_table, id2sufficient_table,
id2skill1_ids, id2skill2_ids)
- def select_seeds(self, amu_id2skill_id_list_dict):
- u""" from dict of amulet_id to skill_id_list,
+ def select_seed2s(self, amu_id2skill_id_list_dict):
+ u""" select seed2 from dict of amulet_id to skill2_id_list,
skill_id_list: list of skill_id, if skill_id is unknown, skill_id must be None
"""
seed_set = None
else:
return seed_set
- def select_seeds_from_sufficient_val(self, amu_id, sufficient_val, slot_num, skill2_id):
+ def select_seed1s_tenun(self, amu_id_skill1_id_list, key_tenun):
+ u""" select seed1 from list of amulet_id and skill1_id,
+ key_tenun must be KEY_TENUN555 or KEY_TENUN888
+ result_num: result number of amulet
+ when either amu_id or skill1_id is None, this means that no. has no result
+ """
+ result_num = len(amu_id_skill1_id_list)
+ for amu_id, skill1_id in reversed(amu_id_skill1_id_list):
+ if amu_id is not None and skill1_id is not None:
+ break
+ else:
+ result_num -= 1
+ amulet_ids = [x[0] for x in amu_id_skill1_id_list[:result_num]]
+ skill1_ids = [x[1] for x in amu_id_skill1_id_list[:result_num]]
+ holder = AmuletIdSkillIdHolder(amulet_ids, skill1_ids)
+
+ if key_tenun == db_supports.KEY_TENUN555:
+ sql = db_supports.SEED1_TENUN555_TABLE_SELECT_SQL + holder.get_where_and_sql()
+ elif key_tenun == db_supports.KEY_TENUN888:
+ sql = db_supports.SEED1_TENUN888_TABLE_SELECT_SQL + holder.get_where_and_sql()
+ else:
+ raise NotImplementedError(u"Tenun must be 555 or 888")
+ self._cursor.execute(sql)
+ seed_set = set([x[0] for x in self._cursor.fetchall()])
+ return seed_set
+
+ def select_seed2s_from_sufficient_val(self, amu_id, sufficient_val, slot_num, skill2_id):
u""" get seeds set from slot number, skill2_id, amulet id, sufficient value
- is skill2_id is None, search all skills
+ if skill2_id is None, search all skills
+ return (threshold, threshold1_seed2_set, threshold2_seed2_set, inishie_seed2_set)
"""
+ th1_seeds_set = set()
+ th2_seeds_set = set()
+ ini_seeds_set = set()
if amu_id in self._amulet_id2name_dict.keys():
table = self._amulet_id2sufficient_table_dict[amu_id]
- sql = db_supports.SUFFICIENT_TABLE_SELECT_THRESHOLD1_SQL.format(
+ # threshold
+ sql = db_supports.SUFFICIENT_TABLE_SELECT_THRESHOLD_SQL.format(
table_name=table, sufficient_val=sufficient_val)
self._cursor.execute(sql)
try:
- threshold1 = self._cursor.fetchone()[slot_num-1]
+ threshold = self._cursor.fetchone()[slot_num-1]
except TypeError, e:
- threshold1 = None
+ threshold = None
- if threshold1 is not None:
+ if threshold is not None:
table = self._amulet_id2skill2_table_dict[amu_id]
if skill2_id is not None:
- sql = db_supports.SEED2_THRESHOLD1_TABLE_SELECT_SEEDS_FROM_THRESHOLD1_AND_SKILL2_SQL.format(
- threshold1=threshold1,
+ sql1 = db_supports.SEED2_THRESHOLD1_TABLE_SELECT_SEEDS_FROM_THRESHOLD1_AND_SKILL2_SQL.format(
+ threshold1=threshold,
skill_table=table,
skill_id=skill2_id)
+ sql2 = db_supports.SEED2_THRESHOLD2_TABLE_SELECT_SEEDS_FROM_THRESHOLD2_AND_SKILL2_SQL.format(
+ threshold2=threshold,
+ skill_table=table,
+ skill_id=skill2_id)
+ sql3 = db_supports.SEED2_INISHIE_TABLE_SELECT_SEED2_FROM_SKILL2_THRESHOLD_SQL.format(
+ threshold=threshold,
+ skill2_id=skill2_id)
else:
- sql = db_supports.SEED2_THRESHOLD1_TABLE_SELECT_SEEDS_FROM_THRESHOLD1_SQL.format(
- threshold1=threshold1)
- self._cursor.execute(sql)
- return set([x[0] for x in self._cursor.fetchall()])
- else:
- return set()
- else:
- return set()
+ sql1 = db_supports.SEED2_THRESHOLD1_TABLE_SELECT_SEEDS_FROM_THRESHOLD1_SQL.format(
+ threshold1=threshold)
+ sql2 = db_supports.SEED2_THRESHOLD2_TABLE_SELECT_SEEDS_FROM_THRESHOLD2_SQL.format(
+ threshold2=threshold)
+ sql3 = db_supports.SEED2_INISHIE_TABLE_SELECT_SEED2_FROM_THRESHOLD_SQL.format(
+ threshold=threshold)
+ self._cursor.execute(sql1)
+ th1_seeds_set = set([x[0] for x in self._cursor.fetchall()])
+ self._cursor.execute(sql2)
+ th2_seeds_set = set([x[0] for x in self._cursor.fetchall()])
+
+ if amu_id == self._amulet_name2id_dict[db_supports.INISHIE_AMULET]:
+ self._cursor.execute(sql3)
+ ini_seeds_set = set([x[0] for x in self._cursor.fetchall()])
+
+ return (threshold, th1_seeds_set, th2_seeds_set, ini_seeds_set)
def select_minmax_from_skill_ids(self, amulet_id, skill_ids):
u""" お守りのidとスキルidのリストから、スキルIDと取りうるスキルの最大最小値の辞書を得る
result_dict[row[0]] = tuple(row[1:])
return result_dict
- def select_threshold1_from_sufficient(self, amulet_id, sufficient_vals):
- u""" お守りのidと充足値のリストから、充足値とスロットごとの判定値1の辞書を得る
- return dict({sufficient_val:(slot1_th1, slot2_th1, slot3_th1)})
+ def select_threshold_from_sufficient(self, amulet_id, sufficient_vals):
+ u""" お守りのidと充足値のリストから、充足値とスロットごとの判定値の辞書を得る
+ return dict({sufficient_val:(slot1_th, slot2_th, slot3_th)})
"""
suff_table = self._amulet_idsufficient_table_dict[amulet_id]
amulet_skill = SufficientsHolder(sufficient_vals)
result_dict[row[0]] = tuple(row[1])
return result_dict
- def select_skills_from_seeds(self, seed_set):
+ def select_skill2s_from_seed2s(self, seed_set):
u""" get amulet id to (random_seed2 to skill ids dict) dict,
and random_seed2 to threshold1 dict
- return: skill_dict, threshold1_dict
+ and random_seed2 to threshold2 dict
+ return: skill_dict, threshold1_dict, threshold2_dict
"""
- skill_dict, threshold1_dict = {}, {}
+ skill_dict, threshold1_dict, threshold2_dict = {}, {}, {}
# skill dict
seeds = SeedsHolder(seed_set)
for row in self._cursor.fetchall():
threshold1_dict[row[0]] = [x for x in row[1:]]
- return skill_dict, threshold1_dict
+ # threshold2 dict
+ sql = db_supports.SEED2_THRESHOLD2_TABLE_SELECT_ALL_SQL + seeds.get_where_in_sql()
+ self._cursor.execute(sql)
+ for row in self._cursor.fetchall():
+ threshold2_dict[row[0]] = [x for x in row[1:]]
+
+ return skill_dict, threshold1_dict, threshold2_dict
+
+ def select_inishie_skill2_from_seed2(self, seed2_set):
+ u""" get inishie's dict of (skill2_id, threshold1, threshold2) from seed2 value """
+ result_dict = {}
+ for seed2 in seed2_set:
+ sql = db_supports.SEED2_INISHIE_TABLE_SELECT_FROM_SEED2_SQL.format(seed2=seed2)
+ self._cursor.execute(sql)
+ row = self._cursor.fetchone()
+ result_dict[seed2] = (row[0], row[1], row[2])
+ return result_dict
+
+ def select_table_nos_from_seed2(self, seed2_set):
+ u""" get dict of (table_no, no) from seed2 value """
+ result_dict = {}
+ for seed2 in seed2_set:
+ sql = db_supports.SEED2_TABLE_NO_TABLE_SELECT_FROM_SEED2_SQL.format(seed2=seed2)
+ self._cursor.execute(sql)
+ row = self._cursor.fetchone()
+ result_dict[seed2] = (row[0], row[1])
+ return result_dict
+
+ def select_table_nos_from_seed1(self, seed1_set, key_tenun):
+ u""" get dict of (table_no, no) from seed1 value based on key_tenun"""
+ result_dict = {}
+ if key_tenun == db_supports.KEY_TENUN555:
+ sql_format = db_supports.SEED1_TENUN555_TABLE_SELECT_TABLE_NOS_FROM_SEED1_SQL
+ elif key_tenun == db_supports.KEY_TENUN888:
+ sql_format = db_supports.SEED1_TENUN888_TABLE_SELECT_TABLE_NOS_FROM_SEED1_SQL
+ else:
+ raise NotImplementedError(u"Tenun must be 555 or 888")
+
+ for seed1 in seed1_set:
+ sql = sql_format.format(seed1=seed1)
+ self._cursor.execute(sql)
+ row = self._cursor.fetchone()
+ result_dict[seed1] = (row[0], row[1])
+ return result_dict
+
+ def select_near_seed1s_from_seed1(self, seed1, smaller_num, larger_num, key_tenun):
+ u""" get list of (no, seed1) near arg's seed1
+ smaller_num means numbers to get smaller than arg's seed1
+ larger_num means numbers to get larger than arg's seed1"""
+ result_list = []
+ if key_tenun == db_supports.KEY_TENUN555:
+ sql_format = db_supports.SEED1_TENUN555_TABLE_SELECT_NEAR_SEED1S_FROM_NO_SQL
+ elif key_tenun == db_supports.KEY_TENUN888:
+ sql_format = db_supports.SEED1_TENUN888_TABLE_SELECT_NEAR_SEED1S_FROM_NO_SQL
+ else:
+ raise NotImplementedError(u"Tenun must be 555 or 888")
+ table_no, no = self.select_table_nos_from_seed1([seed1], key_tenun)[seed1]
+ sql = sql_format.format(table_no=table_no,min_no=(no-smaller_num),max_no=(no+larger_num))
+ self._cursor.execute(sql)
+ for row in self._cursor.fetchall():
+ result_list.append((row[0], row[1]))
+ return result_list
+
+ def select_all_from_seed1s(self, seed1_set, key_tenun):
+ u""" seed1に対応する(no, table_no, result_num,
+ (amulet_id1, ..., amulet_id7), (skill1_id1, ..., skill1_id7))
+ の辞書を得る。存在しない場所はNoneで置き換えてある。
+ """
+ result_dict = {}
+ if key_tenun == db_supports.KEY_TENUN555:
+ sql_format = db_supports.SEED1_TENUN555_TABLE_SELECT_ALL_FROM_SEED1_SQL
+ elif key_tenun == db_supports.KEY_TENUN888:
+ sql_format = db_supports.SEED1_TENUN888_TABLE_SELECT_ALL_FROM_SEED1_SQL
+ else:
+ raise NotImplementedError(u"Tenun must be 555 or 888")
+
+ for seed1 in seed1_set:
+ sql = sql_format.format(seed1=seed1)
+ self._cursor.execute(sql)
+ row = self._cursor.fetchone()
+ if key_tenun == db_supports.KEY_TENUN555:
+ amu_ids = [None if x == db_supports.NO_DATA else x for x in row[3:9]]
+ skill_ids = [None if x == db_supports.NO_DATA else x for x in row[9:15]]
+ elif key_tenun == db_supports.KEY_TENUN888:
+ amu_ids = [None if x == db_supports.NO_DATA else x for x in row[3:10]]
+ skill_ids = [None if x == db_supports.NO_DATA else x for x in row[10:17]]
+ else:
+ raise NotImplementedError(u"Tenun must be 555 or 888")
+ result_dict[seed1] = (row[0], row[1], row[2], amu_ids, skill_ids)
+ return result_dict
def get_sufficient_value(self, amu_id, skill1_id, skill2_id, skill1_val, skill2_val):
u""" 充足値を計算する。
skill2_idがNoneのときはskill1のみから計算する
return (sufficient_val, max1, max2)
"""
-
if amu_id in self._amulet_id2minmax_table_dict:
table = self._amulet_id2minmax_table_dict[amu_id]
sql = db_supports.MIN_MAX_TABLE_SELECT_MAX1_OF_SKILL_SQL.format(