html自动生成工具_GameToolDev小工具开发自动生成Go代码执行游戏策划配置lua文件...

微信公众号:GameToolDev
关注可了解更多的游戏工具开发教程。问题或建议,请公众号留言;

go.mod

module src

go 1.14

require (
    github.com/aarzilli/golua v0.0.0-20200826074358-7f78a3b61a8b
    github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da
)

main.go

package main

import (
    "fmt"
    "github.com/yuin/gopher-lua"
    "io/ioutil"
    "net/http"
    "os"
    "os/exec"
    "strings"
)

func hello(L *lua.LState) int {
    inputparam := L.ToInt(1)
    _ = inputparam
    // fmt.Println("func hello get:", inputparam)
    //将返回参数压入栈中
    L.Push(lua.LString("hello"))
    //返回参数为1个
    return 1
}

func main() {
    fmt.Println()
    fmt.Println("-----------------------------------")
    fmt.Println("T.W Enjoy 服务器lua文件自动化生成工具")
    fmt.Println("作者:彬哥")
    fmt.Println("www.GameToolDev.Com")
    fmt.Println("-----------------------------------")
    fmt.Println()

    L := lua.NewState()
    defer L.Close()
    err := L.DoFile("./itemtype.lua")
    if err != nil {
        fmt.Println("err", err.Error())
        panic(err)
    }

    if true {

        // 读取常量
        //fmt.Println(L.GetGlobal("title"))
        //title := L.GetGlobal("title")
        //fmt.Println(reflect.TypeOf(title))
        //fmt.Println(title)
        // 读取表
        Binge := L.GetGlobal("Binge")
        if tbl, ok := Binge.(*lua.LTable); ok {
            // lv is LTable
            //fmt.Println(L.ObjLen(tbl))
            //fmt.Println("--------------------------------------")
            tbl.ForEach(func(value lua.LValue, value2 lua.LValue) {
                //  fmt.Println(value)
                //  fmt.Println("==========================================")
                if tbl2, ok2 := value2.(*lua.LTable); ok2 {
                    tbl2.ForEach(func(value2 lua.LValue, value lua.LValue) {
                        //  fmt.Println(value2)
                        //  fmt.Println("============----",value)
                    })
                }
                //fmt.Println("==========================================")
            })
            //fmt.Println("--------------------------------------")
        }
        //fmt.Println(reflect.TypeOf(Binge))
    }

    // 结构体
    type Now struct {
        Id   int
        Name string
    }

    /*
           data:=Now{
                1,
                "hao",
            }
            sss,_:=json.Marshal(data)
    */

    //生成一个带名字的table
    var t = L.NewTable()
    t.RawSetString("ID", lua.LNumber(110))
    t.RawSetString("Name", lua.LString("LULU"))
    L.SetGlobal("stu_table", t)

    tbltmp := L.NewTable()
    tbltmp.Append(lua.LString("999"))
    tbl := L.NewTable()
    tbl.Append(tbltmp)
    tbl.Append(t)
    tbl.Append(lua.LNumber(3))

    // 函数
    if err := L.CallByParam(lua.P{
        Fn:      L.GetGlobal("GetStr"),
        NRet:    1,
        Protect: true,
    }, lua.LString("nihao"), lua.LString("binge"), tbl); err != nil {
        panic(err)
    }
    ret := L.Get(-1) // returned value
    L.Pop(1)         // remove received value
    //fmt.Println("--------------------------------------",ret)

    if tbl33, ok := ret.(*lua.LTable); ok {
        tbl33.ForEach(func(value lua.LValue, value2 lua.LValue) {
            //fmt.Println("--------------------------------------",value)
            //fmt.Println("--------------------------------------",value2)
        })
    }
    title := L.GetGlobal("title")
    //fmt.Println(reflect.TypeOf(title))
    fmt.Println(title)

    //互相调用函数
    //注册go函数
    L.Register("hello", hello)
    fn := L.GetGlobal("info")
    if err := L.CallByParam(lua.P{
        Fn:      fn,
        NRet:    1,
        Protect: true,
    }, lua.LNumber(1000)); err != nil {
        panic(err)
    }
    // 格式化
    fmt.Println("生成:" + title.String() + "完成!")
    formatDir("./")
    fmt.Println("格式化:" + title.String() + "完成!")
    http.HandleFunc("/"+"/client/login", Login)
    err = http.ListenAndServe(":8092", nil)
    if err != nil {
        return
    }
}

func Login(w http.ResponseWriter, req *http.Request) {

}

func formatDir(path string) {
    fileInfo, err := ioutil.ReadDir(path)
    if err != nil {
        fmt.Println("open directory error,", err.Error())
        return
    }
    for _, file := range fileInfo {
        fileName := path + "/" + file.Name()
        if file.IsDir() {
            // fmt.Println("dir :", fileName)
            if file.Name() != "vendor" {
                formatDir(fileName)
            }
        } else {
            if strings.HasSuffix(file.Name(), "go") {
                //fmt.Println("format go file :", fileName)
                goFormatFile(fileName)
            }
        }

    }
}
func goFormatFile(fileName string) {
    cmd := exec.Command("go", "fmt", fileName)
    cmd.Stdout = os.Stdout
    cmd.Run()
}

itemtype.lua  模板函数

---------------------------------------------------------------------
-- 修改
luaname = "Map_proto"

-- 修改
Binge = {
     [2] = { price = { {1, 202, 1}, {1, 202, 10}, }, number = { 1, 10, }, free_number = 0, reset = {“”, point = { 0, }, pool_id = { 4, 5, 6, 7, }, },
}
---------------------------------------------------------------------
function GetStr(data,data2,data3)
        gFile = io.open(string.format("%s.go",luaname) ,"a");
        -- 包名及导入库
        gFile:write(string.format("package _go\nimport(\n \"fmt\"\n lua \"github.com/yuin/gopher-lua\" \n)"))
        -- 全局定义 var Gitemtype_proto map[string]*STitemtype_proto
        gFile:write(string.format("\nvar G%s map[string]*ST%s",luaname,luaname))
        -- 结构体定义
        gFile:write(string.format("\ntype ST%s struct {\n",luaname))
        -- 结构体数据 Sid
        gFile:write(string.format("Sid string\n"))
         for key, value in pairs(Binge) do
             for key, value in pairs(value) do
                  local Key = firstToUpper(key)
                  gFile:write(string.format("%s string\n",Key))
             end
             gFile:write(string.format("}\n"))
             break
         end
         -- 写入初始化
        gFile:write(string.format("\nfunc init(){\n"))
        gFile:write(string.format("G%s = make(map[string]*ST%s)\n}\n",luaname,luaname))
        -- 逻辑处理函数
        gFile:write(string.format("\nfunc Init%s() {\n",luaname))
        gFile:write(string.format("L := lua.NewState()\n"))
        gFile:write(string.format("%stmp := make(map[string]*ST%s)\n",luaname,luaname))
        gFile:write(string.format("defer L.Close()\n"))
        gFile:write(string.format("err := L.DoFile(\"./lua/%s.lua\")\n",luaname))
        gFile:write(string.format("if err != nil {\n"))
        gFile:write(string.format("fmt.Println(\"err\", err.Error())\n"))
        gFile:write(string.format("panic(err)\n}\n"))
        gFile:write(string.format("%s := L.GetGlobal(\"%s\")\n",luaname,luaname))
        gFile:write(string.format("if tbl, ok := %s.(*lua.LTable); ok {\n",luaname))
        gFile:write(string.format("fmt.Println(L.ObjLen(tbl))\n"))
        gFile:write(string.format("tbl.ForEach(func(value lua.LValue, value2 lua.LValue) {\n"))
        gFile:write(string.format("data := new(ST%s)\n",luaname))
        gFile:write(string.format("data.Sid = value.String()\n"))
        gFile:write(string.format("if tbl2, ok2 := value2.(*lua.LTable); ok2 {\n"))
        gFile:write(string.format("fmt.Println(L.ObjLen(tbl2))\n"))
        gFile:write(string.format("tbl2.ForEach(func(value3 lua.LValue, value4 lua.LValue) {\n"))
        -- key  循环
        for key, value in pairs(Binge) do
               for key, value in pairs(value) do
                     gFile:write(string.format("if \"%s\" == value3.String() {\n",key))
                     local Key = firstToUpper(key)
                     gFile:write(string.format("data.%s = value4.String()\n}\n",Key))
               end
               break
        end
        gFile:write(string.format("})\n}\n"))
        -- key  结束
        gFile:write(string.format("%stmp[data.Sid] = data\n",luaname))
        gFile:write(string.format("})\n}\n"))
        gFile:write(string.format("G%s = %stmp\n",luaname,luaname))
        gFile:write(string.format("}\n"))
         -- 结束
        gFile:close()
        return data3
end

--首字母大写(符合Go语言规则)
function firstToUpper(str)
    return (str:gsub("^%l", string.upper))
end

---------------------------------------------------------------------------
title = string.format("%s.go",luaname)

function info(n)
        ret = hello(n)
        return ret
end

return Binge

生成go文件 如下:

package _go

import (
    "fmt"
    lua "github.com/yuin/gopher-lua"
)

var GMap_proto map[string]*STMap_proto

type STMap_proto struct {
    Sid         string
    Price       string
    Number      string
    Free_number string
    Reset       string
    Point       string
    Pool_id     string
}

func init() {
    GMap_proto = make(map[string]*STMap_proto)
}

func InitMap_proto() {
    L := lua.NewState()
    Map_prototmp := make(map[string]*STMap_proto)
    defer L.Close()
    err := L.DoFile("./lua/Map_proto.lua")
    if err != nil {
        fmt.Println("err", err.Error())
        panic(err)
    }
    Map_proto := L.GetGlobal("Map_proto")
    if tbl, ok := Map_proto.(*lua.LTable); ok {
        fmt.Println(L.ObjLen(tbl))
        tbl.ForEach(func(value lua.LValue, value2 lua.LValue) {
            data := new(STMap_proto)
            data.Sid = value.String()
            if tbl2, ok2 := value2.(*lua.LTable); ok2 {
                fmt.Println(L.ObjLen(tbl2))
                tbl2.ForEach(func(value3 lua.LValue, value4 lua.LValue) {
                    if "price" == value3.String() {
                        data.Price = value4.String()
                    }
                    if "number" == value3.String() {
                        data.Number = value4.String()
                    }
                    if "free_number" == value3.String() {
                        data.Free_number = value4.String()
                    }
                    if "reset" == value3.String() {
                        data.Reset = value4.String()
                    }
                    if "point" == value3.String() {
                        data.Point = value4.String()
                    }
                    if "pool_id" == value3.String() {
                        data.Pool_id = value4.String()
                    }
                })
            }
            Map_prototmp[data.Sid] = data
        })
    }
    GMap_proto = Map_prototmp
}

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

GameToolDev

ID:GameToolDev

www.GameToolDev.Com

游戏工具开发丨Unity开发技术丨AI技能编辑器丨地图编辑器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值