转换海盗王lua脚本ICU多语言的golang代码

这是一个很好用的golang代码文件,可以帮助将ICU这种多语言的替代符号,直接转换成中文原版的文字。前提是已经从语言res文件中将中文预先提取出来。

在这里插入图片描述
这是替换后的样子,简洁明了,修改也非常容易。

注意:因为golang默认是uft8的,需要将文件另存为utf8编码,替换后的文件,还需要手动转存为gb2312编码才能正确使用。

下面是实现这个功能的golang代码文件:

package main

import (
	"fmt"
	"io"
	"os"
	"strings"
)

func main() {

	spath := "E:/HDW2/hdw21-4/Tools/hdwgo/luaicu/files/NpcScript05.lua"
	spath2 := "E:/HDW2/hdw21-4/Tools/hdwgo/luaicu/files/new/NpcScript05.lua"

	file, err := os.Open(spath)
	if err != nil {
		fmt.Println("无法打开文件:", err)
		return
	}
	defer file.Close()

	filedata, err := io.ReadAll(file)
	if err != nil {
		fmt.Println("file error")
		return
	}

	filestr := string(filedata)
	strlt := strings.Split(filestr, "
")
	strlen := len(strlt)

	lualt := make([]string, 0)

	for i := 0; i < strlen; i++ {
		linestr := strlt[i]
		linestr2 := strings.TrimSpace(linestr)
		linestr2 = strings.ReplaceAll(linestr2, " ", "")
		linestr2 = strings.ReplaceAll(linestr2, "	", "")
		if (strings.HasPrefix(linestr2, "--MISSCRIPT_") || strings.HasPrefix(linestr2, "MISSCRIPT_") || strings.HasPrefix(linestr2, "BIRTH_BIRTH") || strings.HasPrefix(linestr2, "CALCULATE_") || strings.HasPrefix(linestr2, "HELP_MONSTERHELP")) && strings.Contains(linestr2, "_LUA_") && strings.Contains(linestr2, "=") {
			lualt = append(lualt, linestr)
		}
	}

	xinlt := make(map[string]string, 0)

	lualen := len(lualt)
	for i := 0; i < lualen; i++ {
		luastr := lualt[i]
		luastr2 := strings.TrimSpace(luastr)
		lt2 := strings.Split(luastr2, "=")
		keystr := strings.TrimSpace(lt2[0])
		valstr := strings.TrimSpace(lt2[1])

		if strings.HasPrefix(keystr, "--") {
			keystr = strings.Replace(keystr, "--", "", 1)
			keystr = strings.TrimSpace(keystr)
		}

		xinlt[keystr] = valstr

		rtstr := luastr + "
"
		filestr = strings.Replace(filestr, rtstr, "", -1)
	}

	for k, v := range xinlt {
		filestr = strings.Replace(filestr, k, v, -1)
	}

	fileName := spath2
	dstFile, err := os.Create(fileName)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer dstFile.Close()

	dstFile.WriteString(filestr)

	fmt.Println("run ok")
}