satan53x / SExtractor

从GalGame脚本提取和导入文本(大部分需要明文)
GNU General Public License v3.0
203 stars 14 forks source link

Renpy提取报错。 #87

Open daiaji opened 3 months ago

daiaji commented 3 months ago

nathan2.rpy.zip 引擎选的RenPy

 python run.py
---------------------------------
{'file': 'txt', 'workpath': '/home/daiaji/renpy/test', 'engineName': 'RenPy', 'outputFormat': 3, 'outputPartMode': 0, 'nameList': '', 'regDic': None, 'outputFormatExtra': -1, 'encode': 'UTF-8-SIG', 'print': [False, True, True, True, True], 'splitParaSep': '\\r\\n', 'maxCountPerLine': 512, 'cutoff': False, 'cutoffCopy': True, 'noInput': False, 'splitAuto': False, 'ignoreSameLineCount': False, 'ignoreNotMaxCount': False, 'fixedMaxPerLine': False, 'binEncodeValid': False, 'pureText': False, 'tunnelJis': False, 'subsJis': False, 'transReplace': True, 'preReplace': False, 'skipIgnoreCtrl': False, 'skipIgnoreUnfinish': False, 'ignoreEmptyFile': True}
>>> Line 1 :  '\n'
>>> Line 2 :  '# game/fullstartASE/Chaddley McDiggle/nathan2.rpy:6\n'
>>> Line 3 :  'translate chinese nathan_bumpinto_5c11f213:\n'
>>> Line 4 :  '\n'
>>> Line 5 :  '    # "You\'re in the middle of class when a loud, blaring alarm pierces your ears."\n'
捕获的文本: "You're in the middle of class when a loud, blaring alarm pierces your ears."
start: 7
end: 82
---------------------------提取或导入时发生错误---------------------------
Traceback (most recent call last):
  File "/home/daiaji/repo/SExtractor/main/thread.py", line 18, in run
    self.window.extractFileThread()
  File "/home/daiaji/repo/SExtractor/main/mainWindow.py", line 199, in extractFileThread
    mainExtractTxt(args)
  File "/home/daiaji/repo/SExtractor/src/main_extract_txt.py", line 70, in mainExtractTxt
    mainExtract(args, parse)
  File "/home/daiaji/repo/SExtractor/src/main_extract.py", line 717, in mainExtract
    parseImp()
  File "/home/daiaji/repo/SExtractor/src/main_extract_txt.py", line 56, in parse
    var.parseImp(var.content, var.listCtrl, dealOnce)
  File "/home/daiaji/repo/SExtractor/extract_RenPy.py", line 77, in parseImp
    if 'unfinish' in listCtrl[-1]:
                     ~~~~~~~~^^^^
IndexError: list index out of range
--------------------------------------------------------------------------
异常中断文件名: nathan2
运行时间:0.004 秒

我减少了样本。

# TODO: Translation updated at 2024-06-04 18:44

# game/fullstartASE/Chaddley McDiggle/nathan2.rpy:6
translate chinese nathan_bumpinto_5c11f213:

    # "You're in the middle of class when a loud, blaring alarm pierces your ears."
    ""

# game/fullstartASE/Chaddley McDiggle/nathan2.rpy:7
translate chinese nathan_bumpinto_07d44a03:

    # "There had been an announcement earlier today that the school would be holding a fire alarm test, but they had failed to mention {i}when{/i} it would occur."
    ""

# game/fullstartASE/Chaddley McDiggle/nathan2.rpy:10
translate chinese nathan_bumpinto_29df4d07:

    # "Mr. Harley sighs from the front of the room and holds up his hands in order to settle your unruly class."
    ""

# game/fullstartASE/Chaddley McDiggle/nathan2.rpy:11
translate chinese nathan_bumpinto_49ff7602:

    # "Mr. Harley" "Alright, alright. Calm down. Form a neat, orderly line and we'll be in and out in no time."
    "Mr. Harley" ""

# game/fullstartASE/Chaddley McDiggle/nathan2.rpy:14
translate chinese nathan_bumpinto_725b9509:

    # m "That's what she said."
    m ""

# game/fullstartASE/Chaddley McDiggle/nathan2.rpy:15
translate chinese nathan_bumpinto_4f17f86e:

    # "You hear Matt snickering to himself behind you as you all line up to walk into the hall."
    ""

# game/fullstartASE/Chaddley McDiggle/nathan2.rpy:19
translate chinese nathan_bumpinto_b2c95802:

    # V "If there was a {i}real{/i} fire, you can be certain I wouldn't be waiting in some line. Literally, the window is {i}right there.{/i}"
    V ""

名字提取似乎有问题。

排除非数据行用r'^ '比较好吧。 名字用r'^ ".+?"'会较好吧。

satan53x commented 3 months ago

恩,引擎选RenPy的话是以前没有正则的时候写的。 现在一般是引擎选TXT,然后预设正则里选RenPy。 不过这个是针对第二行有原始文本的,你这个生成的文件里没有是生成设置不对吗?

daiaji commented 3 months ago

恩,引擎选RenPy的话是以前没有正则的时候写的。 现在一般是引擎选TXT,然后预设正则里选RenPy。 不过这个是针对第二行有原始文本的,你这个生成的文件里没有是生成设置不对吗?

SDK是这样“生成翻译“的。 似乎没有其他的选项。 会是版本的问题吗? 还是说用“提取对话“? https://f95zone.to/threads/uni-v0-51-114-hizor-games.15645/ 游戏的话在这里下载。

RMVX也是引擎选择JSON然后选择匹配规则"RMMV_RMVX_System"?

satan53x commented 3 months ago

RMVX也是引擎选择JSON然后选择匹配规则"RMMV_RMVX_System"?

不是,RMMV_RMVX_System一般是用于System.json这个单独文件,目的是全部提取。 正常提取Map可以用引擎默认正则,可以排除一些不需要提取的文本。

daiaji commented 3 months ago

RenPy这边是单纯的暂时还没支持这种格式的翻译文件?

satan53x commented 3 months ago

会是版本的问题吗?

有可能是SDK版本不一样,那之后我重新改下RenPy这个引擎吧,反正之前写的没有正则比较难用。 你的文本都是这种格式对吧,就是句子放在#注释里的。

nathan2.rpy.zip

daiaji commented 3 months ago

会是版本的问题吗?

有可能是SDK版本不一样,那之后我重新改下RenPy这个引擎吧,反正之前写的没有正则比较难用。 你的文本都是这种格式对吧,就是句子放在#注释里的。

nathan2.rpy.zip

和压缩包里差不多,文件后部还有些。


    # game/fullstartASE/Chaddley McDiggle/nathan2.rpy:5389
    old "Quit the bar."
    new ""

    # game/fullstartASE/Chaddley McDiggle/nathan2.rpy:5389
    old "Stay at the bar."
    new ""

    # game/fullstartASE/Chaddley McDiggle/nathan2.rpy:5663
    old "That sounds fun!"
    new ""

    # game/fullstartASE/Chaddley McDiggle/nathan2.rpy:5663
    old "I think I'll pass."
    new ""

    # game/fullstartASE/Chaddley McDiggle/nathan2.rpy:5950
    old "Ask him out."
    new ""

    # game/fullstartASE/Chaddley McDiggle/nathan2.rpy:5950
    old "Keep your thoughts to yourself."
    new ""

我在用Ren'Py SDK 8.2.1 https://drive.google.com/file/d/17TzSbSY-OicwHwU__jqy5vNeOeQvwh_C/view?usp=drive_link 全部翻译文件。

satan53x commented 3 months ago

更新了RenPy引擎,现在内部直接调用TXT,可以自行修改正则。 只是加了个设置:

extraData=^    ""$|^    .+ ""$|^    new ""$

就是匹配到这些的时候,会先复制上一句文本到这一句(处理#和old之后),再进行提取。

daiaji commented 3 months ago

Ok! 提取没报错,我翻译一下,看能不能写入翻译。

maigeng commented 3 months ago

大佬我想问下renpy是要拿什么文件作为se提取器的对象,是rpyc的类型文件吗

daiaji commented 3 months ago

大佬我想问下renpy是要拿什么文件作为se提取器的对象,是rpyc的类型文件吗

只有rpyc吗?那要解包为rpy,不然就直接用rpy.

daiaji commented 3 months ago
# game/fullstartASE/ASEscript.rpy:8
translate chinese start_c3ccac3e:

    # centered "This game is a work in progress, because of this you'll encounter a few scenes that are black because they do not yet have CG Scenes made for them. They will be added as development on the game progresses."
    居中 "这款游戏还在开发中,因此您会遇到一些黑色场景,因为它们还没有制作 CG 场景。随着游戏开发的进行,它们将被添加。"

# game/fullstartASE/ASEscript.rpy:14
translate chinese start_f09c8f28:

    # centered "{b}A year ago, you and your parents were in a terrible car accident while on vacation. Miraculously, you survived - but your parents were not so lucky.{/b}" with dissolve
    centered "" with dissolve

这个捕获可能是错的。 把centered也捕获了。 这是居中命令。

satan53x commented 3 months ago

这个捕获可能是错的。 把centered也捕获了。 这是居中命令。

现在有正则了可以自行修改,比如加上一行

postSkip=^centered$
satan53x commented 3 months ago
    # centered "{b}A year ago, you and your parents were in a terrible car accident while on vacation. Miraculously, you survived - but your parents were not so lucky.{/b}" with dissolve
    centered "" with dissolve

另一个问题是with dissolve没有被复制,改了一下默认正则:

00_skip=^\s*[#]
01_skip=^\s*(?:translate |old |voice )
10_search=^    (?:new|centered) "(.+)"
11_search=^    "?(?P<name>[^"]+?)"? "(.+)"
20_search=^    "(.+)"
extraData= ""$| "" 

取消了所有search的行尾$限定

maigeng commented 3 months ago

大佬我想问下renpy是要拿什么文件作为se提取器的对象,是rpyc的类型文件吗

只有rpyc吗?那要解包为rpy,不然就直接用rpy. 我还有个rpy文件,是要先解包里面的东西,再用SE提取器弄解包出来的东西吗

maigeng commented 3 months ago

大佬我想问下renpy是要拿什么文件作为se提取器的对象,是rpyc的类型文件吗

只有rpyc吗?那要解包为rpy,不然就直接用rpy.

大佬,我提取成功了,不过文本量好多,这是全部的剧情文字数量吗

daiaji commented 3 months ago

这个捕获可能是错的。 把centered也捕获了。 这是居中命令。

现在有正则了可以自行修改,比如加上一行

postSkip=^centered$

人名可能也只会被双引号包裹,这个没有双引号的,多半都是指令。

daiaji commented 3 months ago

大佬我想问下renpy是要拿什么文件作为se提取器的对象,是rpyc的类型文件吗

只有rpyc吗?那要解包为rpy,不然就直接用rpy.

大佬,我提取成功了,不过文本量好多,这是全部的剧情文字数量吗

有些提取不出来,你先看看文本对不对吧。

maigeng commented 3 months ago

大佬我想问下renpy是要拿什么文件作为se提取器的对象,是rpyc的类型文件吗

只有rpyc吗?那要解包为rpy,不然就直接用rpy.

大佬,我提取成功了,不过文本量好多,这是全部的剧情文字数量吗

有些提取不出来,你先看看文本对不对吧。

我大致把json里面提取的文字在rpy文件匹配查看了下,好像是把对应的日文都拿出来了,我那个renpy游戏剧情回想里面好像本来没有人名显示吧

satan53x commented 3 months ago

人名可能也只会被双引号包裹,这个没有双引号的,多半都是指令。

不是,有的游戏人名是变量,虽然不会被修改,但是需要提取出来用于辅助翻译。 比如你这游戏pcname应该就是主角名字吧,不要翻译成中文,但是需要写到name栏。

maigeng commented 3 months ago

emm,刚才打开游戏验证了下,发现SE提取器把人名和台词分成两个message提取了,果然要自己写正则吗,早知道就不应该逃课 U76_1S~PJ3ZGRB NRNIVJGM UB~7@RQ@P)4OE9TVFAK(R3B

daiaji commented 3 months ago

emm,刚才打开游戏验证了下,发现SE提取器把人名和台词分成两个message提取了,果然要自己写正则吗,早知道就不应该逃课 U76_1S~PJ3ZGRB NRNIVJGM UB~7@RQ@P)4OE9TVFAK(R3B

倒是无所谓,这只是做词典,到时候直接用替换的,根本没区别。

maigeng commented 3 months ago

emm,刚才打开游戏验证了下,发现SE提取器把人名和台词分成两个message提取了,果然要自己写正则吗,早知道就不应该逃课 U76_1S~PJ3ZGRB NRNIVJGM UB~7@RQ@P)4OE9TVFAK(R3B

倒是无所谓,这只是做词典,到时候直接用替换的,根本没区别。

替换什么,我在想正则要怎么写

daiaji commented 3 months ago

emm,刚才打开游戏验证了下,发现SE提取器把人名和台词分成两个message提取了,果然要自己写正则吗,早知道就不应该逃课 U76_1S~PJ3ZGRB NRNIVJGM UB~7@RQ@P)4OE9TVFAK(R3B

倒是无所谓,这只是做词典,到时候直接用替换的,根本没区别。

替换什么,我在想正则要怎么写

最终字典会把所有的东西都翻译,然后Renpy版本不一样吗?

{
    "Uni": "Uni",
    "about_title": "",
    "save_title": "",
    "load_title": "",
    "Page {}": "第 {} 页",
    "Automatic saves": "自动存档",
    "Quick saves": "快速存档",
    "{color=#A6956A}{b}[slotNumber]{/b} {#file_time}%B %d %Y, %I:%M %p{/color}": "",
    "{color=#A6956A}Empty Slot{/color}": "",
    "{color=#93775F}{b}[slotNumber]{/b} {#file_time}%B %d %Y, %I:%M %p{/color}": "",
    "The dialogue history is empty.": "对话历史为空。",
    "Calibrate": "校准",
    "Yes": "是",
    "No": "否",
    "Skipping": "跳过",
    "Self-voicing disabled.": "自动配音已禁用。",
    "Clipboard voicing enabled. ": "剪贴板配音已启用。 ",
    "Self-voicing enabled. ": "自动配音已启用。 "
}

我这边的字典是这样的…… 所以就没所谓。

maigeng commented 3 months ago

emm,刚才打开游戏验证了下,发现SE提取器把人名和台词分成两个message提取了,果然要自己写正则吗,早知道就不应该逃课 U76_1S~PJ3ZGRB NRNIVJGM UB~7@RQ@P)4OE9TVFAK(R3B

倒是无所谓,这只是做词典,到时候直接用替换的,根本没区别。

替换什么,我在想正则要怎么写

最终字典会把所有的东西都翻译,然后Renpy版本不一样吗?

{
    "Uni": "Uni",
    "about_title": "",
    "save_title": "",
    "load_title": "",
    "Page {}": "第 {} 页",
    "Automatic saves": "自动存档",
    "Quick saves": "快速存档",
    "{color=#A6956A}{b}[slotNumber]{/b} {#file_time}%B %d %Y, %I:%M %p{/color}": "",
    "{color=#A6956A}Empty Slot{/color}": "",
    "{color=#93775F}{b}[slotNumber]{/b} {#file_time}%B %d %Y, %I:%M %p{/color}": "",
    "The dialogue history is empty.": "对话历史为空。",
    "Calibrate": "校准",
    "Yes": "是",
    "No": "否",
    "Skipping": "跳过",
    "Self-voicing disabled.": "自动配音已禁用。",
    "Clipboard voicing enabled. ": "剪贴板配音已启用。 ",
    "Self-voicing enabled. ": "自动配音已启用。 "
}

我这边的字典是这样的…… 所以就没所谓。

抱歉我是没学过renpy就直接打算拿来提取文本翻译,你说的字典是怎么用上去的,我在安装renpy-sdk,这玩意貌似可以直接拿到里面的文字?

daiaji commented 3 months ago

https://www.renpy.org/latest.html 下载SDK,然后新开一个工程,再找到那个工程,把你解包好的游戏替换掉那个空的新工程,这样就在SDK生成翻译文件了。 https://www.bilibili.com/read/cv27077168 阿B有教程的。

maigeng commented 3 months ago

https://www.renpy.org/latest.html 下载SDK,然后新开一个工程,再找到那个工程,把你解包好的游戏替换掉那个空的新工程,这样就在SDK生成翻译文件了。 https://www.bilibili.com/read/cv27077168 阿B有教程的。

image 好像没成功,而且我看b站帖子里面的机翻好像是GPT,那我还是自己提取文本用樱花模型翻译吧

daiaji commented 3 months ago

生成翻译报错的话,可能SDK版本不对,你试着写正则吧。 毕竟也只是点击生成翻译的事,这都报错就很麻烦了。

satan53x commented 3 months ago

@daiaji image 好像是这个设置,如果生成不是空字符串应该就不需要用extraData=

maigeng commented 3 months ago

@daiaji image 好像是这个设置,如果生成不是空字符串应该就不需要用extraData=

无论这个有没有勾选我都试过了,还是失败,老实自己写正则python吧

daiaji commented 3 months ago

老游戏可能真的就是兼容性问题,也许只有老版本的SDK能生成翻译。

satan53x commented 3 months ago

无论这个有没有勾选我都试过了,还是失败,老实自己写正则python吧

不是,我是说 @daiaji 之前没有文本的问题,他是空字符串""

daiaji commented 3 months ago

无论这个有没有勾选我都试过了,还是失败,老实自己写正则python吧

不是,我是说 @daiaji 之前没有文本的问题,他是空字符串""

最开始的那个? 填充文本和填充空字符串也差不多吧……

satan53x commented 3 months ago
    # "You're in the middle of class when a loud, blaring alarm pierces your ears."
    ""

你生成的不是为空嘛?应该改下那个设置就行?就不需要extraData了。 image

daiaji commented 3 months ago
    # "You're in the middle of class when a loud, blaring alarm pierces your ears."
    ""

你生成的不是为空嘛?应该改下那个设置就行?就不需要extraData了。 image

Ok

daiaji commented 3 months ago
    # "You're in the middle of class when a loud, blaring alarm pierces your ears."
    ""

你生成的不是为空嘛?应该改下那个设置就行?就不需要extraData了。 image

对了 main/mainWindow.py的ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")能不能换成QT实现?我在Linux下跑,必须删掉这个。

satan53x commented 3 months ago

main/mainWindow.py的ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")能不能换成QT实现?我在Linux下跑,必须删掉这个。

之前就是QT设置Windows任务栏图标失效才加的这个。刚刚加了一个平台判断,应该没问题了。

daiaji commented 3 months ago

main/mainWindow.py的ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")能不能换成QT实现?我在Linux下跑,必须删掉这个。

之前就是QT设置Windows任务栏图标失效才加的这个。刚刚加了一个平台判断,应该没问题了。

在linux下表现为,QT软件共用一个任务栏TAB. QT的BUG吗? 截图里就是和AiNiee共用一个TAB 屏幕截图_20240606_145231

satan53x commented 3 months ago

因为pyqt5本身就是用setWindowIcon设置任务栏图标的,有的linux不行可能是发行版GUI不兼容,这个我就不清楚该调用哪个本地代码了。(好像是说的是打包成可执行程序能解决)

daiaji commented 3 months ago
[
    {
        "id": 6,
        "atypeId": 2,
        "description": "A common armor of chainmail.",
        "etypeId": 4,
        "traits": [
            {
                "code": 22,
                "dataId": 1,
                "value": 0
            }
        ],
        "iconIndex": 137,
        "name": "Mail",
        "note": "",
        "params": [
            0,
            0,
            0,
            5,
            0,
            0,
            0,
            0
        ],
        "price": 0
    }
]

这样的结构的话,extractKey=description就行了吗? 还是说有别的说法? https://github.com/davide97l/rpgmaker-mv-translator 这边的研究很有用。 基本上阐述了哪些文件的哪些字段是能翻译的。

satan53x commented 3 months ago

这样的结构的话,extractKey=description就行了吗?

对,这样就行。不过不要用预设的那些正则,因为默认排除掉了英文:[^ -~]

daiaji commented 3 months ago

这样的结构的话,extractKey=description就行了吗?

对,这样就行。不过不要用预设的那些正则,因为默认排除掉了英文:[^ -~]

正则规则只填extractKey=description的话好像提取不出东西。


10_search=^<root   >(?P<unfinish>[\S\s]+)$
extractKey=description

这样? P<unfinish>是内置的规则是是吧?msg和name都行? 有各自的特色?

10_search=^<root   >([\S\s]+)$
extractKey=description

确定父节点,最简单的规则就是这样吗? rootroot后为啥会有几个空格啊?啥特殊的语法吗?


实际上RM系的文件都很结构化,就像那个rpgmaker-mv-translator说的一样,如果能先过滤文件名,再过滤键值的话,就能搞定很多问题。 这样添加这些规则到引擎里的设置里会方便很多,也能够更自动化。 Translator++也是做了这些吧。

satan53x commented 3 months ago
是为了保持长度和一样,这个是文本所属的元素名。 root是指根节点。 默认还排除了bgm|bgs之类的,一般不用匹配root,只需要处理排除的,然后剩下用<.+?>匹配就行。
daiaji commented 3 months ago

是为了保持长度和一样,这个是文本所属的元素名。 root是指根节点。 默认还排除了bgm|bgs之类的,一般不用匹配root,只需要处理排除的,然后剩下用<.+?>匹配就行。

Game files overview 🎮

Game files containing the data we want to translate are usually contained in the folder data/. Among these json files, the ones we are going to translate are the following:

satan53x commented 3 months ago

说是这些个根节点的键都要翻译。

我不是说要排除root,是说排除bgm之类的,root就在<.+?>里边了,不需要单独写root

daiaji commented 3 months ago

说是这些个根节点的键都要翻译。

我不是说要排除root,是说排除bgm之类的,root就在<.+?>里边了,不需要单独写root

其他的规则在干扰提取吧,RPGMV引擎用_None过一遍还是漏了很多,不如基于文件名用简单规则过一遍,毕竟RM本身也比较结构化。

satan53x commented 3 months ago

_None默认规则skip掉了code之外的啊

daiaji commented 3 months ago

_None默认规则skip掉了code之外的啊

我直接description、name了,但看着提取的东西,感觉翻完游戏不一定能跑的样子🤦‍♂️。

daiaji commented 3 months ago

_None默认规则skip掉了code之外的啊

- Engine_RPGMV:
    type: json
    files:
      - name: ["Armors.json", "Weapons.json", "Items.json", "Skills.json"]
        sample:
          - 10_search: ^<root\s+>(.+?)$
          - extractKey: [description, name]
      - name: ["Enemies.json", "MapInfos.json", "Classes.json"]
        sample:
          - 10_search: ^<root\s+>(.+?)$
          - extractKey: [name]
      - name: ["*.json"]
        sample:
          - 00_skip: ^<.+?>$
          - 01_skip: ^<(?!code).+$
          - 10_search: ^<code102>([\S\s]+)$
          - 15_search: ^<code401>\s?(?P<name>[\S\s]+):$
          - 16_search: ^<code401>(?P<unfinish>[\S\s]+)$
          - 20_search: ^<.+?>([^ -\[\]-~][\S\s]+)$
          - extractKey: [name, description, nickname]
- Engine_RPGVX:
    type: json
    files:
      - name: ["*.json"]
        sample:
          - 00_skip: ^<.+?>$
          - 01_skip: ^<(?!code).+$
          - 10_search: ^<code102>([\S\s]+)$
          - 15_search: ^<code401>\\C\[\d\]\[(?P<name>.+?)\]\\C\[\d\]$
          - 16_search: ^<code401>(?P<unfinish>[\S\s]+)$
          - 20_search: ^<.+?>([^ -\[\]-~][\S\s]+)$
          - extractKey: [none]

我看能不能让LLM帮我改代码,把规则换成yaml格式,然后用这种写法编写规则,支持过滤文件名,一般来一个游戏说要翻译的文件不会有多个type吧。 文件名支持通配符(可能要支持正则)还是很重要的,不过"*.json"可能需要换成正则的排除,但似乎不是很优雅。 搞好后我再PR吧。

satan53x commented 3 months ago

我看能不能让LLM帮我改代码,把规则换成yaml格式,然后用这种写法编写规则,支持过滤文件名,一般来一个游戏说要翻译的文件不会有多个type吧。

其实和自己手动把不同的原始文件放不同的文件夹差不多,只不过你这样改每次只需要操作一次,对同一个游戏的话。(之前我一个游戏是对话和界面UI放到不同文件夹提取的) 主要是需要兼容之前的参数用=的写法,如果不能兼容的话你先拉取最新的preview分支进行操作吧。(刚刚同步了preview,代码和主分支是完全一样的)

daiaji commented 3 months ago

我看能不能让LLM帮我改代码,把规则换成yaml格式,然后用这种写法编写规则,支持过滤文件名,一般来一个游戏说要翻译的文件不会有多个type吧。

其实和自己手动把不同的原始文件放不同的文件夹差不多,只不过你这样改每次只需要操作一次,对同一个游戏的话。(之前我一个游戏是对话和界面UI放到不同文件夹提取的) 主要是需要兼容之前的参数用=的写法,如果不能兼容的话你先拉取最新的preview分支进行操作吧。(刚刚同步了preview,代码和主分支是完全一样的)

我让LLM把这个配置翻译成toml,结果都超级丑陋。 ini系不支持嵌套还是没法好起来。 yaml好得多。

逻辑上应该是要多次提取吧。 不过怎么搞,还是有点头疼。 在规则里显式排除["Armors.json", "Weapons.json", "Items.json", "Skills.json"]这个列表感觉有点逆天。 代码里整个变量存文件名吧,执行最后的*.json时默认排除这个列表里的文件。