class MasterMailDo(new_master_do_class(MasterMailRow, 'MST_Mail')): def get_reward_type(self, key): reward = self.doc.items[key].reward_all return reward def get_mail_category_code(self, key): return self.doc.items[key].category_code
class MasterHeroEquipmentBoxStatDo( new_master_do_class(MasterHeroEquipmentBoxStatRow, 'MST_HeroEquipmentBoxStat')): def __init__(self, data_context): super(MasterHeroEquipmentBoxStatDo, self).__init__(data_context) self.hero_costume_condition_by_group_id = {} for row in self.doc.items.values(): if row.costume is not None: self.hero_costume_condition_by_group_id[row.group_id] = row.key def get_costume_key_by_equipment_stat(self, group_id): return self.hero_costume_condition_by_group_id[group_id] def get_equipment_stat_list(self, group_id, count, strength): return self.get_stat_list_by_type(group_id, 'collect', count) + \ self.get_stat_list_by_type(group_id, 'enchant', strength) def get_stat_list_by_type(self, group_id, check_type, target_value): master_collect_list = self.get_by_index('get_type', group_id, check_type) return [ o.key for o in master_collect_list if o.step_value <= target_value ]
class MasterUserLevelDo( new_master_do_class(MasterUserLevelRow, 'MST_MasterLevel')): def __init__(self, data_context): super(MasterUserLevelDo, self).__init__(data_context) # 경험치를 이용해 row 를 찾기 위한 index self.sorted_by_exp = sorted( [row for row in self.doc.items.itervalues()], key=lambda x: x.exp) self._sorted_index_by_exp = [row.exp for row in self.sorted_by_exp] def get_by_exp(self, exp): """ 주어진 누적 경험치 값에 해당하는 row 를 반환한다. :param exp: 찾을 누적 경험치 :return: MasterUserLevelRow :rtype: MasterUserLevelRow """ try: return self.sorted_by_exp[bisect.bisect(self._sorted_index_by_exp, exp)] except IndexError as e: raise excp.ExceptionExceedMaxExp(exp) def get_max_exp_of_level(self, level): return self.doc.items[str(level)].exp - 1 def get_max_exp(self): return self.sorted_by_exp[-1].exp - 1
class MasterTeamBossStageDo( new_master_do_class(MasterTeamBossStageRow, 'MST_TeamBossStage')): def get_stages_by_boss_key(self, boss_key): try: return self.get_by_index('boss_key', boss_key) except ExceptionIndexNotExist: return []
class MasterEquipmentDo(new_master_do_class(MasterEquipment, "MST_Equipment")): def get_by_item_key(self, item_key): """ :rtype: MasterEquipment """ return self.doc.items[item_key] def get_strengthen_rate(self, class_key): return self.doc.items[class_key].strengthen_rate def get_strengthen_stat(self, class_key): return self.doc.items[class_key].strengthen_stat def get_compose_result_item_key(self, rarity, equip_type): try: items = self.get_by_index('get_compose_result_items', rarity, True, equip_type) except Exception as e: # 검색해도 결과가 없을 경우 items = [] # 혹시 데이터가 없을 경우, 등급에 따른 기본 제공 아이템을 반환한다 if len(items) == 0: from script.dbproxy.do.masters_global import master_constants_inst return master_constants_inst.get_string('ComposeResultRarity_{0}'.format(rarity)) dice = random.randint(0, len(items) - 1) return items[dice].key
class MasterBattleFieldBattleRewardDo(new_master_do_class(MasterBattleFieldBattleRewardRow, "MST_BattleFieldBattleReward")): def get_reward_dict(self, field_id, reward_type): reward_dict = {} for item in self.get_by_index('field_id', field_id, reward_type): if item.item not in reward_dict: reward_dict[item.item] = 0 reward_dict[item.item] += item.count return reward_dict
class MasterTeamBossDo(new_master_do_class(MasterTeamBossRow, 'MST_TeamBoss')): def get_key_list(self): return self.doc.items.keys() def get_func_type_key_list(self, func_type): try: data_list = self.get_by_index('func_type', func_type) return [x.key for x in data_list] except ExceptionIndexNotExist as e: print 'func type %s is not in config' % func_type return []
class MasterAlphaFortWarBattleRewardDo( new_master_do_class(MasterAlphaFortWarBattleRewardRow, "MST_AlphaFortWarBattleReward")): def get_reward_dict(self, group_no, reward_type, is_weekend=False): reward_dict = {} for item in self.get_by_index('group_type', group_no, reward_type): if item.item not in reward_dict: reward_dict[item.item] = 0 if is_weekend: reward_dict[item.item] += item.count * 2 else: reward_dict[item.item] += item.count return reward_dict
class MasterBehaviorDo(new_master_do_class(MasterBehaviorRow, 'MST_Behavior')): pet_skill_slot_count = 1 def get_type(self, skill_key): try: return self.doc.items[skill_key].type except KeyError as e: return None def get_behaviors(self, pet_base_key): return (self.get_by_index('owner', pet_base_key, slot) for slot in range(1, self.__class__.pet_skill_slot_count + 1))
class MasterMasteryStatDo( new_master_do_class(MasterMasteryStatRow, 'MST_MasteryStat')): def __init__(self, data_context): super(MasterMasteryStatDo, self).__init__(data_context) self.max_count_by_group = {} for k, v in self.doc.items.iteritems(): count = self.max_count_by_group.get(v.group, 0) count += v.req_point self.max_count_by_group[v.group] = count self.max_count_by_star_group = {} for k, v in self.doc.items.iteritems(): count = self.max_count_by_star_group.get((v.group, v.star_group), 0) count += v.req_point self.max_count_by_star_group[(v.group, v.star_group)] = count self.max_level_by_star_group = {} for k, v in self.doc.items.iteritems(): level = self.max_level_by_star_group.get((v.group, v.star_group), 0) if level < v.level: self.max_level_by_star_group[(v.group, v.star_group)] = v.level def get_group_max_point(self, group_id): return self.max_count_by_group.get(group_id, 0) def get_star_group_max_point(self, group_id, star_group_id): return self.max_count_by_star_group.get((group_id, star_group_id), 0) def get_used_point(self, group_id, star_group_id, current_level): temp = sorted(self.get_by_index('get_star_group', group_id, star_group_id), key=lambda x: int(x.level)) total_point = 0 for o in temp: if o.level > current_level: break total_point += o.req_point return total_point def get_star_group_max_level(self, group_id, star_group_id): return self.max_level_by_star_group.get((group_id, star_group_id), 0)
class MasterTeamBossTrainingDo( new_master_do_class(MasterTeamBossTraining, "MST_TeamBossTraining")): pass
# -*- coding:utf-8 -*- from __future__ import unicode_literals from script.common.db.class_obj import ClassObject, String, Float, Integer from script.dbproxy.do.master_util import new_master_do_class class MasterEquipmentSetOptionRow(ClassObject): key = String(desc='마스터 시트 Equipment Set Option 의 키') set_id = String(desc='세트 key') set_count = Integer(desc='세트 개수') set_option = String(desc='세트 옵션') option_value = Float(desc='옵션 값') skin_id = String( desc="皮肤key" ) #add by ZHM, JoyGames, ALPHA GROUP CO.,LTD, at 2017-07-11 for 英雄装备服装 def get_index_meta(self): return {'get_set_options': (self.set_id, )} MasterEquipmentSetOptionDo = new_master_do_class(MasterEquipmentSetOptionRow, 'MST_EquipmentSetOption')
key = String(desc='master TransformStrengthen key') base = String(desc='변신의 대상이 되는 소환수의 키 CombatantsBase 의 키') level = Integer(desc='변신의 강화 단계') scroll = String(desc='해당 변신 의 주문서') scroll_count = Integer(desc='주문서 필요 개수') ring = String(desc='해당 변신 의 주문 반지') ring_count = Integer(desc='반지 필요 개수') atk_speed = Integer(desc='攻速') p_atk = Integer(desc='物攻') m_atk = Integer(desc='法攻') hp = Integer(desc='血量') p_def = Integer(desc='物防') res = Integer(desc='法抗') pen = Integer(desc='物穿') cond_dec = Integer(desc='被控制衰减') attr_res = Dict(Integer(), desc='属性抗性') cond_res = Dict(Integer(), desc='控制抗性') cri = Integer(desc='暴击') eva = Integer(desc='闪避') def get_index_meta(self): """ 인덱싱에 사용할 메타 정보 반환 :return: dict: {인덱스 이름: 인덱스 컬럼 리스트, ...} """ return {'base': (self.base, self.level)} MasterTransformStrengthenDo = new_master_do_class(MasterTransformStrengthenRow, 'MST_TransformStrengthen')
class MasterRaidBossTrainingDo( new_master_do_class(MasterRaidBossTraining, "MST_RaidBossTraining")): pass
class MasterHeroTrainingDo(new_master_do_class(MasterHeroTrainingRow, 'MST_HeroTraining')): def __init__(self, data_context): super(MasterHeroTrainingDo, self).__init__(data_context)
class MasterItemDo(new_master_do_class(MasterItem, 'MST_Items')): def get_rarity(self, key): return self.doc.items[key].rarity def get_type(self, key): return self.doc.items[key].type
class MasterTeamBossRewardDo(new_master_do_class(MasterTeamBossRewardRow, 'MST_TeamBossReward')): def get_reward_dict(self, reward_key): reward_dict = {} for boss_reward in self.get_by_index('reward_key', reward_key): reward_dict[boss_reward.item] = boss_reward.count return reward_dict
# coding=utf8 from __future__ import unicode_literals from script.common.db.class_obj import ClassObject, String, Integer, Float from script.dbproxy.do.master_util import new_master_do_class class MasterEquipmentStrengthenSetRow(ClassObject): key = String(desc='key') type = String(desc="类型") strengthen = Integer(desc='强化等级') set_option = String(desc='属性类型') option_value = Float(desc='属性值') res_id = String(desc="特效id") owner_class = String(desc="所属英雄") def get_index_meta(self): return { 'get_by_type': ( self.type, self.owner_class, ) } MasterEquipmentStrengthenSetDo = new_master_do_class( MasterEquipmentStrengthenSetRow, 'MST_EquipmentStrengthenSet')