OSDN Git Service

add amulet search with fixed seed2
[amulettoolsmh4/main.git] / model / seed2skill2table.py
index cf64685..4e01686 100644 (file)
@@ -96,6 +96,25 @@ SELECT_ALL_FROM_SEED2_SQL = u"""select {skill_id1}, {skill_id2},
         skill_id5=COL_SKILL2_ID5,
         skill_id6=COL_SKILL2_ID6,
         skill_id7=COL_SKILL2_ID7)
+COUNT_SKILL2_POS_SQL = u"""select count({seed2}) from {{table_name}} 
+where {seed2}={{seed2}} and {{skill_pos}}={{skill2_id}}""".format(
+        seed2=COL_SEED2)
+SELECT_SEED2_FROM_SKILL2_SQL = u"""select {seed2} from {{table_name}} where
+    {skill_id1} = {{skill2_id}} or
+    {skill_id2} = {{skill2_id}} or
+    {skill_id3} = {{skill2_id}} or
+    {skill_id4} = {{skill2_id}} or
+    {skill_id5} = {{skill2_id}} or
+    {skill_id6} = {{skill2_id}} or
+    {skill_id7} = {{skill2_id}} """.format(
+        seed2=COL_SEED2,
+        skill_id1=COL_SKILL2_ID1,
+        skill_id2=COL_SKILL2_ID2,
+        skill_id3=COL_SKILL2_ID3,
+        skill_id4=COL_SKILL2_ID4,
+        skill_id5=COL_SKILL2_ID5,
+        skill_id6=COL_SKILL2_ID6,
+        skill_id7=COL_SKILL2_ID7)
 
 class Seed2Skill2TableGenerator(object):
     u""" Seed2とスキル名の組み合わせテーブルを作成するクラス """
@@ -237,3 +256,40 @@ class Seed2Skill2TableAccessor(object):
             names = [self._skill_id2name[x] for x in self._cursor.fetchone()]
             result_dict[self._amu_id2name[amu_id]] = tuple(names)
         return result_dict
+
+    def select_skill_position_from_seed2_ids(self, amulet_id, seed2, skill2_id):
+        u""" 与えられたお守りIdおよびSeed2において、
+        指定されたスキルIdが何枠目で発生するのかを返す
+        return tuple of index"""
+        result_list = []
+        table_name = self._amu_id2table_name[amulet_id]
+        for i, col in enumerate(COL_SKILL2_LIST):
+            sql = COUNT_SKILL2_POS_SQL.format(
+                    seed2=seed2,
+                    table_name=table_name,
+                    skill2_id=skill2_id,
+                    skill_pos=col)
+            self._cursor.execute(sql)
+            count = self._cursor.fetchone()[0]
+            if count > 0:
+                result_list.append(i)
+        return tuple(result_list)
+
+    def select_skill_position_from_seed2_names(self, amulet_name, seed2, skill2_name):
+        u""" 与えられたお守り名およびSeed2において、
+        指定されたスキル名が何枠目で発生するのかを返す
+        return tuple of index"""
+        if amulet_name in self._amu_name2id and skill2_name in self._skill_name2id:
+            amulet_id = self._amu_name2id[amulet_name]
+            skill2_id = self._skill_name2id[skill2_name]
+            return self.select_skill_position_from_seed2_ids(amulet_id, seed2, skill2_name)
+        else:
+            return tuple()
+
+    def select_seed2s_from_skill2_id(self, amulet_id, skill2_id):
+        u""" 指定されたお守りIdで指定されたスキルIdを持つSeed2を返す """
+        table_name = self._amu_id2table_name[amulet_id]
+        sql = SELECT_SEED2_FROM_SKILL2_SQL.format(table_name=table_name,
+                skill2_id=skill2_id)
+        self._cursor.execute(sql)
+        return set([x[0] for x in self._cursor.fetchall()])