示例#1
0
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
示例#2
0
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
        ]
示例#3
0
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
示例#4
0
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 []
示例#5
0
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
示例#6
0
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
示例#7
0
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 []
示例#8
0
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
示例#9
0
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))
示例#10
0
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)
示例#11
0
class MasterTeamBossTrainingDo(
        new_master_do_class(MasterTeamBossTraining, "MST_TeamBossTraining")):
    pass
示例#12
0
# -*- 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')
示例#13
0
    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')
示例#14
0
class MasterRaidBossTrainingDo(
        new_master_do_class(MasterRaidBossTraining, "MST_RaidBossTraining")):
    pass
示例#15
0
class MasterHeroTrainingDo(new_master_do_class(MasterHeroTrainingRow, 'MST_HeroTraining')):
    def __init__(self, data_context):
        super(MasterHeroTrainingDo, self).__init__(data_context)
示例#16
0
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
示例#17
0
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
示例#18
0
# 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')