Exemplo n.º 1
0
    def action(data):
        msg_words = jieba.lcut_for_search(data['text'])

        name = ''
        rate = 0
        for item in msg_words:
            n, r = find_similar_string(item,
                                       material.material_list,
                                       return_rate=True)
            if rate < r:
                name = n
                rate = r

        if name:
            result = material.check_material(name)
            return Reply(result)
Exemplo n.º 2
0
    def action(self, data):

        message = data['text_digits']
        message_ori = data['text']

        words = jieba.lcut_for_search(message + message_ori)

        name = ''
        level = 0
        surplus = ''
        voice_key = ''
        skill_index = 0
        stories_key = ''

        for item in words:
            # 获取档案关键词
            if item in self.stories_title:
                stories_key = item
                continue
            # 获取语音关键词
            if item in voices:
                voice_key = item
                continue
            # 获取干员名
            if item in material.operator_list:
                name = item
                continue
            # 获取专精或精英等级
            if item in material.level_list:
                level = material.level_list[item]
                continue
            # 获取技能序号
            if item in material.skill_index_list:
                skill_index = material.skill_index_list[item]
                continue
            surplus += item

        # 从剩余的文字里找技能名
        skill = find_similar_string(surplus, material.skill_list)

        if name == '' and skill == '':
            return Reply('博士,想查询哪位干员的资料呢?')

        if level != 0:
            if level < 0:
                # todo 精英化资料
                level = abs(level)
                result = material.check_evolve_costs(name, level)
            else:
                if level >= 8 and '材料' in message:
                    # todo 专精资料
                    level -= 7
                    result = material.check_mastery_costs(
                        name, skill, level, skill_index=skill_index)
                else:
                    # todo 技能数据
                    result = operator.get_skill_data(name,
                                                     skill,
                                                     level,
                                                     skill_index=skill_index)
            return Reply(result)

        if name:
            # todo 档案资料
            if stories_key:
                story = database.operator.find_operator_stories(
                    name, stories_key)
                if story:
                    text = '博士,这是干员%s的《%s》档案\n\n' % (name, stories_key)
                    return Reply(text + story['story_text'])
                else:
                    return Reply('博士,没有找到干员%s的《%s》档案' % (name, stories_key))

            # todo 语音资料
            if voice_key:
                return self.find_voice(name, voice_key)

            if word_in_sentence(message, ['精英', '专精']):
                return Reply('博士,要告诉阿米娅精英或专精等级哦')

            if word_in_sentence(message, ['语音']):
                return Reply('博士,要告诉阿米娅语音的详细标题哦')

            if skill or skill_index:
                return Reply('博士,要查询干员技能资料的话,请加上【技能等级】或者加上【技能等级和“材料”关键字】哦')

            return Reply(operator.get_detail_info(name))
Exemplo n.º 3
0
    def find_enemy(self, enemy):
        name = find_similar_string(enemy, list(enemies.keys()))
        if name:
            try:
                data = enemies[name]
                detail = game_data.get_json_data('enemy', data['enemyId'])

                game_data.get_pic('enemy/pic/' + data['enemyId'], 'enemy',
                                  '?x-oss-process=style/jpg-test')

                text = '博士,这是找到的敌方档案\n\n\n\n\n\n\n'
                text += '【%s】\n\n' % name
                text += '%s\n\n' % data['description']
                text += '[能力]\n%s\n\n' % data['ability']
                text += '[属性]\n耐久 %s | 攻击力 %s | 防御力 %s | 法术抗性 %s\n' % \
                        (data['endure'],
                         data['attack'],
                         data['defence'],
                         data['resistance'])

                key_map = {
                    'attributes.maxHp': {
                        'title': '生命值',
                        'value': ''
                    },
                    'attributes.atk': {
                        'title': '攻击力',
                        'value': ''
                    },
                    'attributes.def': {
                        'title': '物理防御',
                        'value': ''
                    },
                    'attributes.magicResistance': {
                        'title': '魔法抗性',
                        'value': ''
                    },
                    'attributes.moveSpeed': {
                        'title': '移动速度',
                        'value': ''
                    },
                    'attributes.baseAttackTime': {
                        'title': '攻击间隔',
                        'value': ''
                    },
                    'attributes.hpRecoveryPerSec': {
                        'title': '生命回复/秒',
                        'value': ''
                    },
                    'attributes.massLevel': {
                        'title': '重量',
                        'value': ''
                    },
                    'rangeRadius': {
                        'title': '攻击距离/格',
                        'value': ''
                    },
                    'lifePointReduce': {
                        'title': '进点损失',
                        'value': ''
                    }
                }

                for item in detail:
                    text += '\n[等级 %s 数值]\n' % item['level']
                    detail_data = item['enemyData']
                    key_index = 0
                    for key in key_map:
                        defined, value = self.get_value(key, detail_data)
                        if defined:
                            key_map[key]['value'] = value
                        else:
                            value = key_map[key]['value']

                        text += '%s:%s%s' % (key_map[key]['title'], value,
                                             '    ' if key_index %
                                             2 == 0 else '\n')
                        key_index += 1

                text += '\n[技能]\n施工中...敬请期待...'

                icons = [{
                    'path':
                    'resource/images/enemy/%s.png' % data['enemyId'],
                    'size': (80, 80),
                    'pos': (10, 30)
                }]

                return TextImage(text, icons)
            except Exception as e:
                print('Enemy', e)
                return '博士,【%s】档案好像损坏了... >.<' % name
        else:
            return False
Exemplo n.º 4
0
    def action(self, data):

        message = data['text_digits']
        message_ori = data['text']

        words = posseg.lcut(message) + posseg.lcut(message_ori)

        name = ''
        level = 0
        surplus = ''
        voice_key = ''
        skill_index = 0

        for item in words:
            # 获取语音关键词
            if voice_key == '' and item.word in voices:
                voice_key = item.word
                break

        for item in words:
            # 获取干员名
            if name == '' and item.word in material.operator_list:
                name = item.word
                continue
            # 获取专精或精英等级
            if level == 0 and item.word in material.level_list:
                level = material.level_list[item.word]
                continue
            # 获取技能序号
            if skill_index == 0 and item.word in material.skill_index_list:
                skill_index = material.skill_index_list[item.word]
                continue
            surplus += item.word

        skill = find_similar_string(surplus, material.skill_list)

        if name == '' and skill == '':
            return Reply('博士,想查询哪位干员或技能的资料呢?请再说一次吧')

        if level != 0:
            if level <= 2:
                # todo 精英化资料
                result = material.check_evolve_costs(name, level)
            else:
                # todo 专精资料
                level -= 2
                result = material.check_mastery_costs(name, skill, level, skill_index=skill_index)

            return Reply(result)

        if name:
            # todo 语音资料
            if voice_key:
                return self.find_voice(name, voice_key)

            if word_in_sentence(message, ['精英', '专精']):
                return Reply('博士,要告诉阿米娅精英或专精等级哦')

            if word_in_sentence(message, ['语音']):
                return Reply('博士,要告诉阿米娅语音的详细标题哦')

            return Reply('博士,想查询干员%s的什么资料呢' % name)
Exemplo n.º 5
0
    def find_enemy(self, enemy):
        name = find_similar_string(enemy, list(self.enemies.keys()))
        if name:
            try:
                data = self.enemies[name]['info']
                detail = self.enemies[name]['data']

                text = '博士,这是找到的敌方档案\n\n\n\n\n\n\n'
                text += '【%s】\n\n' % name
                text += '%s\n\n' % data['description']
                text += '[能力]\n%s\n\n' % remove_xml_tag(data['ability'] or '无')
                text += '[属性]\n耐久 %s | 攻击力 %s | 防御力 %s | 法术抗性 %s\n' % \
                        (data['endure'],
                         data['attack'],
                         data['defence'],
                         data['resistance'])

                key_map = {
                    'attributes.maxHp': {'title': '生命值', 'value': ''},
                    'attributes.atk': {'title': '攻击力', 'value': ''},
                    'attributes.def': {'title': '物理防御', 'value': ''},
                    'attributes.magicResistance': {'title': '魔法抗性', 'value': ''},
                    'attributes.moveSpeed': {'title': '移动速度', 'value': ''},
                    'attributes.baseAttackTime': {'title': '攻击间隔', 'value': ''},
                    'attributes.hpRecoveryPerSec': {'title': '生命回复/秒', 'value': ''},
                    'attributes.massLevel': {'title': '重量', 'value': ''},
                    'rangeRadius': {'title': '攻击距离/格', 'value': ''},
                    'lifePointReduce': {'title': '进点损失', 'value': ''}
                }

                for item in detail:
                    text += '\n[等级 %s 数值]\n' % (item['level'] + 1)
                    detail_data = item['enemyData']
                    key_index = 0
                    for key in key_map:
                        defined, value = self.get_value(key, detail_data)
                        if defined:
                            key_map[key]['value'] = value
                        else:
                            value = key_map[key]['value']

                        text += '%s:%s%s' % (key_map[key]['title'], value, '    ' if key_index % 2 == 0 else '\n')
                        key_index += 1
                    if detail_data['skills']:
                        text += '技能冷却时间:\n'
                        for sk in detail_data['skills']:
                            sk_info = (sk['prefabKey'], sk['initCooldown'], sk['cooldown'])
                            text += '    - [%s]\n    -- 初始冷却 %ss,后续冷却 %ss\n' % sk_info

                icons = [
                    {
                        'path': 'resource/images/enemy/%s.png' % data['enemyId'],
                        'size': (80, 80),
                        'pos': (10, 30)
                    }
                ]

                return TextImage(text, icons)
            except Exception as e:
                raise e
                print('Enemy', e)
                return '博士,【%s】档案好像损坏了... >.<' % name
        else:
            return False