コード例 #1
0
ファイル: pyhelp_src2utf8.py プロジェクト: xulei1202/Pandas
def main():
    os.chdir(os.path.split(os.path.realpath(__file__))[0])

    welecome()
    print('')

    confirm = InputController().requireBool({
        'tips': '是否立刻进行文件编码转换?',
        'default': False
    })

    if not confirm:
        Message.ShowInfo('您取消了操作, 程序终止...\n')
        Common.exitWithPause()

    count = CharsetConverter({
        'ignore_files': ['Makefile', 'Makefile.in', 'CMakeLists.txt'],
        'process_exts': ['.hpp', '.cpp']
    }).convertDirectory('../../src', 'UTF-8-SIG')

    if count <= 0:
        Message.ShowInfo('很好! 源代码文件都已转换为 UTF-8-SIG 编码.')

    print('')

    Common.exitWithPause()
コード例 #2
0
    def __searchMark(self, filename):
        line_num = 0
        charset = self.__detectCharset(filename)
        regex = r'\s*?' + self.__options__['mark_format'] + r'\s*?'

        if self.__detectCharset(filename).upper() != 'UTF-8-SIG':
            print('No UTF-8-SIG: %s' % (filename))
            return

        try:
            textfile = open(filename, encoding=charset)
            for line in textfile:
                line_num = line_num + 1
                if '//' not in line:
                    continue

                re_match = re.match(regex, line)
                if not re_match:
                    continue

                if str(re_match.group(1)) in self.mark_dict:
                    print('发现重复的代码注入标记: ' + re_match.group(0))
                    Common.exitWithPause(-1)

                self.mark_dict[re_match.group(1)] = {
                    'index': int(re_match.group(1)),
                    'filepath': filename,
                    'line': line_num
                }
            textfile.close()
        except Exception as err:
            print('Error filename : %s | Message : %s' % (filename, err))
コード例 #3
0
    def requireSelect(self, options):
        print('-' * 70)
        select_name = options['name']
        select_data = options['data']
        Message.ShowSelect('请选择%s, 可选值为 [0~%d], 分别代表:' %
                           (select_name, len(select_data) - 1))
        print('')
        for select in select_data:
            Message.ShowMenu('%s' % select['desc'])
        print('')
        Message.ShowSelect('请选择%s [0~%d]:' %
                           (select_name, len(select_data) - 1),
                           end="")
        user_select = input()

        if not user_select or not user_select.isnumeric():
            Message.ShowError('您输入了无效的地图标记类型, 程序终止')
            print('-' * 70)
            Common.exitWithPause(-1)

        user_select = int(user_select)

        if user_select < 0 or user_select >= len(select_data):
            Message.ShowError('您输入了无效的地图标记类型, 程序终止')
            print('-' * 70)
            Common.exitWithPause(-1)

        print('')
        Message.ShowInfo('您选择的是: %s' % select_data[user_select]['name'])
        print('-' * 70)
        print('\n')
        return user_select
コード例 #4
0
    def __init__(self, options):
        self.__options__ = options
        self.mark_dict = {}

        if not self.detect(self.__options__['source_dirs']):
            print('[状态] 无法成功定位所有需要的代码注入点, 程序终止!')
            Common.exitWithPause(-1)
        else:
            print('[状态] 已成功定位所有代码注入点.\n')
コード例 #5
0
def main():
    os.chdir(os.path.split(os.path.realpath(__file__))[0])

    welecome()

    options = {
        'source_dirs' : '../../src',
        'process_exts' : ['.hpp', '.cpp'],
        'mark_format' : r'// PYHELP - MAPFLAG - INSERT POINT - <Section (\d{1,2})>',
        'mark_counts' : 11
    }

    guide(InjectController(options))
    Common.exitWithPause()
コード例 #6
0
 def requireText(self, options):
     print('-' * 70)
     Message.ShowSelect(options['tips'] + ':')
     result = input(options['prefix'])
     if not result:
         Message.ShowError('请至少输入一个字符. 程序终止')
         print('-' * 70)
         Common.exitWithPause(-1)
     result = options['prefix'] + result
     if options['upper']:
         result = result.upper()
     Message.ShowInfo('您输入的是: ' + result)
     print('-' * 70)
     print('\n')
     return result
コード例 #7
0
def guide(inject):
    eventlist = [{
        'name': 'Event 类型的标准事件',
        'desc': '0 - Event  类型的标准事件, 不能被 processhalt 指令打断'
    }, {
        'name': 'Filter 类型的过滤事件',
        'desc': '1 - Filter 类型的过滤事件, 可以被 processhalt 指令打断'
    }]

    # 0 为 Event 类型的事件 | 1 为 Filter 类型的事件
    eventtype = InputController().requireSelect({
        'name': '想创建的 NPC 事件类型',
        'data': eventlist
    })

    # --------

    constant_prefix = 'NPCE_' if eventtype == 0 else 'NPCF_'
    constant = InputController().requireText({
        'tips':
        '请输入该 NPC 事件的 {prefix} 常量名称 (自动大写, {prefix}的末尾部分)'.format(
            prefix=constant_prefix),
        'prefix':
        constant_prefix,
        'upper':
        True
    })

    if eventtype == 0:
        define = 'rAthenaCN_NpcEvent_' + constant.replace(constant_prefix, '')
        eventvar = constant.replace(constant_prefix,
                                    '').lower() + '_event_name'
    elif eventtype == 1:
        define = 'rAthenaCN_NpcFilter_' + constant.replace(constant_prefix, '')
        eventvar = constant.replace(constant_prefix,
                                    '').lower() + '_filter_name'
    else:
        Message.ShowError('发现无效的事件类型, 请确认..')
        Common.exitWithPause(-1)

    # --------

    eventname = InputController().requireText({
        'tips': '请输入该 NPC 事件的名称 (以 On 开头, 末尾应为 Event 或 Filter)',
        'prefix': ''
    })

    if not eventname.startswith('On'):
        Message.ShowError('无论是什么类型的事件, 事件名称必须以 On 开头 (严格区分大小写)')
        Common.exitWithPause(-1)

    if eventtype == 0:
        if not eventname.endswith('Event'):
            Message.ShowError('Event 类型的事件, 事件名称必须以 Event 结尾 (严格区分大小写)')
            Common.exitWithPause(-1)

    if eventtype == 1:
        if not eventname.endswith('Filter'):
            Message.ShowError('Filter 类型的事件, 事件名称必须以 Filter 结尾 (严格区分大小写)')
            Common.exitWithPause(-1)

    # --------

    eventdesc = InputController().requireText({
        'tips': '请输入该 NPC 事件的简短说明 (如: 当玩家杀死 MVP 魔物时触发事件)',
        'prefix': ''
    })

    # --------

    print('-' * 70)
    Message.ShowInfo('请确认建立的信息, 确认后将开始修改代码.')
    print('-' * 70)
    Message.ShowInfo('事件类型 : %s' % eventlist[eventtype]['name'])
    Message.ShowInfo('常量名称 : %s' % constant)
    Message.ShowInfo('事件名称 : %s' % eventname)
    Message.ShowInfo('事件说明 : %s' % eventdesc)
    print('')
    Message.ShowInfo('开关名称 : %s' % define)
    Message.ShowInfo('变量名称 : %s' % eventvar)
    print('-' * 70)
    print('\n')

    nextstep = InputController().requireBool({
        'tips': '请仔细阅读上述信息, 确认要开始写入操作么?',
        'default': False
    })

    if not nextstep:
        Message.ShowStatus('终止写入操作, 程序终止')
        Common.exitWithPause(-1)

    # --------

    Message.ShowStatus('开始将 NPC 事件写入到源代码...')

    options = {
        'define': define,
        'constant': constant,
        'eventname': eventname,
        'eventvar': eventvar,
        'eventdesc': eventdesc
    }

    if eventtype == 0:
        insert_for_normal_npcevent(inject, options)
    elif eventtype == 1:
        insert_for_filter_npcevent(inject, options)

    Message.ShowStatus('已经成功写入到源代码, 请检查并完善必要的注释.')
    print('')
    print('=' * 70)
    print('')
    print('感谢您的使用, NPC 事件添加助手已经执行完毕'.center(48))
    print('')
    print('=' * 70)
コード例 #8
0
ファイル: pyhelp_mapflag.py プロジェクト: xulei1202/Pandas
def guide(inject):

    define = InputController().requireText({
        'tips': '请输入该地图标记的宏定义开关名称 (Pandas_MapFlag_的末尾部分)',
        'prefix': 'Pandas_MapFlag_'
    })

    # --------

    constant = InputController().requireText({
        'tips': '请输入该地图标记的 MF 常量名称 (自动大写, MF_的末尾部分)',
        'prefix': 'MF_',
        'upper': True
    })

    # --------

    flaglist = [{
        'name': '普通开关式的地图标记',
        'desc': '0 - 普通的地图标记开关, 只有两个状态(开/关)'
    }, {
        'name': '携带单个数值参数的地图标记',
        'desc': '1 - 携带单个数值参数的地图标记, 可以记录数值变量 (例如 bexp 标记)'
    }, {
        'name': '复杂赋值标记',
        'desc': '2 - 复杂的赋值标记, 只单纯添加宏定义和 MF 常量, 其他的手动添加'
    }]

    # flagtype = 0  # 0 为普通开关 | 1 为数值开关
    flagtype = InputController().requireSelect({
        'name': '想创建的地图标记类型',
        'data': flaglist
    })

    # --------

    var_name_1 = None
    if flagtype == 1:
        var_name_1 = InputController().requireText({
            'tips': '请输入用于记录"第一个数值参数"的 map_data 结构成员变量名',
            'prefix': ''
        })

    # --------

    zero_disable = False
    if flagtype == 1:
        zero_disable = InputController().requireBool({
            'tips': '当"第一个数值参数"的值为 0 时, 是否表示移除此地图标记?',
            'default': False
        })

    # --------

    print('-' * 70)
    Message.ShowInfo('请确认建立的信息, 确认后将开始修改代码.')
    print('-' * 70)
    Message.ShowInfo('开关名称 : %s' % define)
    Message.ShowInfo('常量名称 : %s' % constant)
    Message.ShowInfo('标记类型 : %s' % flaglist[flagtype]['name'])
    print('')
    Message.ShowInfo('第一个数值参数名称 : %s' % var_name_1)
    Message.ShowInfo('第一个数值参数的值为 0 时, 是否禁用此标记 : %s' % zero_disable)
    print('-' * 70)
    print('\n')

    nextstep = InputController().requireBool({
        'tips': '请仔细阅读上述信息, 确认要开始写入操作么?',
        'default': False
    })

    if not nextstep:
        Message.ShowStatus('终止写入操作, 程序终止')
        Common.exitWithPause(-1)

    # --------

    Message.ShowStatus('开始将地图标记信息写入到源代码...')

    options = {
        'define': define,
        'constant': constant,
        'var_name_1': var_name_1,
        'zero_disable': zero_disable
    }

    if flagtype == 0:
        insert_for_normal_mapflag(inject, options)
    elif flagtype == 1:
        insert_for_one_param_mapflag(inject, options)

    Message.ShowStatus('已经成功写入到源代码, 请检查并完善必要的注释.')
    print('')
    print('=' * 70)
    print('')
    print('感谢您的使用, 地图标记添加助手已经执行完毕'.center(48))
    print('')
    print('=' * 70)
コード例 #9
0
def guide(inject):

    define = InputController().requireText({
        'tips': '请输入该脚本指令的宏定义开关名称 (Pandas_ScriptCommand_的末尾部分)',
        'prefix': 'Pandas_ScriptCommand_'
    })

    # --------

    funcname = InputController().requireText({
        'tips': '请输入该脚本指令的处理函数名称 (BUILDIN_FUNC 部分的函数名)',
        'prefix': '',
        'lower': True
    })

    # --------

    samefunc = InputController().requireBool({
        'tips': '脚本指令是否与处理函数名称一致 (%s)?' % funcname,
        'default': True
    })

    # --------

    cmdname = funcname
    if not samefunc:
        cmdname = InputController().requireText({
            'tips': '请输入该脚本指令的名称 (BUILDIN_DEF2 使用)',
            'prefix': '',
            'lower': True
        })

    # --------

    argsmode = InputController().requireText({
        'tips': '请输入该脚本指令的参数模式 (如一个或多个的: i\s\? 为空则直接回车)',
        'prefix': '',
        'lower': True,
        'allow_empty': True
    })

    # --------

    print('-' * 70)
    Message.ShowInfo('请确认建立的信息, 确认后将开始修改代码.')
    print('-' * 70)
    Message.ShowInfo('开关名称 : %s' % define)
    Message.ShowInfo('脚本处理函数名称 : %s' % funcname)
    Message.ShowInfo('脚本指令名称 : %s' % cmdname)
    Message.ShowInfo('脚本指令的参数模式 : %s' % argsmode)
    print('-' * 70)
    print('\n')

    nextstep = InputController().requireBool({
        'tips': '请仔细阅读上述信息, 确认要开始写入操作么?',
        'default': False
    })

    if not nextstep:
        Message.ShowStatus('终止写入操作, 程序终止')
        Common.exitWithPause(-1)

    # --------

    Message.ShowStatus('开始将地图标记信息写入到源代码...')

    options = {
        'define': define,
        'funcname': funcname,
        'cmdname': cmdname,
        'argsmode': argsmode
    }

    insert_scriptcmd(inject, options)

    Message.ShowStatus('已经成功写入到源代码, 请检查并完善必要的注释.')
    print('')
    print('=' * 70)
    print('')
    print('感谢您的使用, 脚本指令添加助手已经执行完毕'.center(48))
    print('')
    print('=' * 70)