diff --git a/bin/json/game_opencond.json b/bin/json/game_opencond.json index ab000d284..9f0cf1750 100644 --- a/bin/json/game_opencond.json +++ b/bin/json/game_opencond.json @@ -5,7 +5,16 @@ "key": "opencond_name_10002", "text": "英雄" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -22,7 +31,16 @@ "key": "opencond_name_10006", "text": "背包" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 1, "kqbx": 0, @@ -39,7 +57,16 @@ "key": "opencond_name_10003", "text": "购物" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -56,7 +83,16 @@ "key": "opencond_name_10004", "text": "好友" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -73,7 +109,16 @@ "key": "opencond_name_10003", "text": "商城" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -90,7 +135,16 @@ "key": "opencond_name_10003", "text": "随机任务总览" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -107,7 +161,16 @@ "key": "opencond_name_10003", "text": "充值" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -124,7 +187,16 @@ "key": "opencond_name_10007", "text": "活动" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -141,7 +213,16 @@ "key": "opencond_name_10005", "text": "任务" }, - "main": 10, + "main": [ + { + "key": "platlv", + "param": 10 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 1, "kqbx": 0, @@ -158,7 +239,16 @@ "key": "num_1001", "text": "主线入口" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -175,7 +265,16 @@ "key": "num_1002", "text": "招募" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -192,7 +291,16 @@ "key": "num_1003", "text": "剧情副本" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -209,7 +317,16 @@ "key": "num_1004", "text": "武馆入口" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -226,7 +343,16 @@ "key": "num_1005", "text": "主题活动入口" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -243,7 +369,16 @@ "key": "num_1006", "text": "迷雾岛屿" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -260,7 +395,16 @@ "key": "num_1007", "text": "装备副本" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -277,7 +421,16 @@ "key": "num_1007", "text": "武器副本" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -294,7 +447,16 @@ "key": "num_1007", "text": "饰品副本" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -311,7 +473,16 @@ "key": "num_1008", "text": "心魔塔" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -328,7 +499,16 @@ "key": "num_1009", "text": "捕羊大赛" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -345,7 +525,16 @@ "key": "num_1010", "text": "黑暗料理大赛" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -362,7 +551,16 @@ "key": "num_1011", "text": "地下角斗场" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -379,7 +577,16 @@ "key": "num_1012", "text": "疯狂竞技赛" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -396,7 +603,16 @@ "key": "num_1013", "text": "五侠擂台" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -413,7 +629,16 @@ "key": "num_1014", "text": "藏书馆" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -430,7 +655,16 @@ "key": "num_1015", "text": "篝火舞会" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -447,7 +681,16 @@ "key": "num_1016", "text": "商队" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -464,7 +707,16 @@ "key": "num_1017", "text": "美食馆" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -481,7 +733,16 @@ "key": "num_1018", "text": "戈伯铁匠铺" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -498,7 +759,16 @@ "key": "num_1019", "text": "狩猎" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -515,7 +785,16 @@ "key": "num_2020", "text": "聊天" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -532,7 +811,16 @@ "key": "num_2021", "text": "世界" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -549,7 +837,16 @@ "key": "num_2022", "text": "公会" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -566,7 +863,16 @@ "key": "num_2023", "text": "私聊" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -583,7 +889,16 @@ "key": "num_2024", "text": "跨服" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -600,7 +915,16 @@ "key": "num_2025", "text": "系统" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -617,7 +941,16 @@ "key": "num_2026", "text": "公会" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -634,7 +967,16 @@ "key": "num_2027", "text": "竞技场" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -651,7 +993,16 @@ "key": "num_2028", "text": "签到" }, - "main": 999, + "main": [ + { + "key": "platlv", + "param": 999 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -668,7 +1019,16 @@ "key": "num_2029", "text": "红点集成" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 1, "kqbx": 0, @@ -685,7 +1045,16 @@ "key": "num_2030", "text": "月卡" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -702,7 +1071,16 @@ "key": "num_2031", "text": "日周月礼包" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -719,7 +1097,16 @@ "key": "num_2032", "text": "主角" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 1, "kqbx": 0, @@ -736,7 +1123,16 @@ "key": "num_2033", "text": "月之秘境" }, - "main": 2, + "main": [ + { + "key": "platlv", + "param": 2 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 2, "kqbx": 0, @@ -753,7 +1149,16 @@ "key": "num_2034", "text": "收益统计" }, - "main": 3, + "main": [ + { + "key": "platlv", + "param": 3 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 1, "kqbx": 0, @@ -770,7 +1175,16 @@ "key": "num_2035", "text": "卡牌融合" }, - "main": 13, + "main": [ + { + "key": "platlv", + "param": 13 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 1, "kqbx": 0, @@ -787,7 +1201,16 @@ "key": "num_2036", "text": "成长之路" }, - "main": 1, + "main": [ + { + "key": "platlv", + "param": 1 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 1, "kqbx": 0, @@ -804,7 +1227,16 @@ "key": "num_2030", "text": "战斗退出" }, - "main": 5, + "main": [ + { + "key": "platlv", + "param": 5 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -821,7 +1253,16 @@ "key": "num_2030", "text": "战斗倍速" }, - "main": 4, + "main": [ + { + "key": "platlv", + "param": 4 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -838,7 +1279,16 @@ "key": "num_2030", "text": "自动战斗" }, - "main": 5, + "main": [ + { + "key": "platlv", + "param": 5 + }, + { + "key": "maxmapid", + "param": 1 + } + ], "optional": "", "wkqbx": 0, "kqbx": 0, @@ -848,5 +1298,83 @@ "text": "功能暂未开启" }, "uiid": 0 + }, + { + "id": "equip_compose", + "name": { + "key": "num_2030", + "text": "装备铸造" + }, + "main": [ + { + "key": "platlv", + "param": 5 + }, + { + "key": "maxmapid", + "param": 1 + } + ], + "optional": "", + "wkqbx": 0, + "kqbx": 0, + "img": "zc_icon_01", + "prompt": { + "key": "opencond_prompt_equip_compose", + "text": "功能暂未开启" + }, + "uiid": 0 + }, + { + "id": "equip_compose_middle", + "name": { + "key": "num_2030", + "text": "装备铸造-中级" + }, + "main": [ + { + "key": "platlv", + "param": 4 + }, + { + "key": "maxmapid", + "param": 1 + } + ], + "optional": "", + "wkqbx": 0, + "kqbx": 0, + "img": "zc_icon_01", + "prompt": { + "key": "opencond_prompt_equip_compose_middle", + "text": "功能暂未开启" + }, + "uiid": 0 + }, + { + "id": "equip_compose_high", + "name": { + "key": "num_2030", + "text": "装备铸造-高级" + }, + "main": [ + { + "key": "platlv", + "param": 5 + }, + { + "key": "maxmapid", + "param": 1 + } + ], + "optional": "", + "wkqbx": 0, + "kqbx": 0, + "img": "zc_icon_01", + "prompt": { + "key": "opencond_prompt_equip_compose_high", + "text": "功能暂未开启" + }, + "uiid": 0 } ] \ No newline at end of file diff --git a/cmd/v2/ui/perf_choose.go b/cmd/v2/ui/perf_choose.go index 3cc27597f..2d4825ee9 100644 --- a/cmd/v2/ui/perf_choose.go +++ b/cmd/v2/ui/perf_choose.go @@ -8,8 +8,6 @@ import ( "go_dreamfactory/cmd/v2/service/observer" "go_dreamfactory/comm" "go_dreamfactory/pb" - cfg "go_dreamfactory/sys/configure/structs" - "strings" "time" "fyne.io/fyne/v2" @@ -133,49 +131,49 @@ func (app *perfChoose) LazyInit(ptService service.PttService, obs observer.Obser closeApp3(perfWin.tabs, common.TOOLBAR_PERF_CHOOSE) openApp3(perfWin.tabs, common.TOOLBAR_PERF_RES) - if tables, err := cfg.NewTables(common.Loader); err != nil { - println(err.Error()) - } else { - for _, v := range tables.TestFlow.GetDataList() { - p, ok := pbMap[v.Route] - if !ok { - logrus.WithField("route", v.Route).Debug("未注册") - continue - } - routeStr := strings.SplitN(v.Route, ".", 2) - for _, account := range app.binduids { - rq := ReqParams{ - Sid: app.conf.SId, - Account: account, - PbReq: p, - MainType: routeStr[0], - SubType: routeStr[1], - } - b, err := app.buildReq(rq) - if err != nil { - logrus.Error(err) - return - } - app.handler.SetReq(b, true) - } + // if tables, err := cfg.NewTables(common.Loader); err != nil { + // println(err.Error()) + // } else { + // for _, v := range tables.TestFlow.GetDataList() { + // p, ok := pbMap[v.Route] + // if !ok { + // logrus.WithField("route", v.Route).Debug("未注册") + // continue + // } + // routeStr := strings.SplitN(v.Route, ".", 2) + // for _, account := range app.binduids { + // rq := ReqParams{ + // Sid: app.conf.SId, + // Account: account, + // PbReq: p, + // MainType: routeStr[0], + // SubType: routeStr[1], + // } + // b, err := app.buildReq(rq) + // if err != nil { + // logrus.Error(err) + // return + // } + // app.handler.SetReq(b, true) + // } - param := lib.ParamMgr{ - Caller: app.handler, - Timeout: time.Duration(app.conf.Pressure.TimeoutMs) * time.Millisecond, - Lps: uint32(app.conf.Pressure.Concurrency), - Duration: time.Duration(app.conf.Pressure.DurationS) * time.Second, - ResultCh: make(chan *lib.CallResult, 50), - } - a, err := lib.NewAssistant(obs, param) - if err != nil { - logrus.Error(err) - } + // param := lib.ParamMgr{ + // Caller: app.handler, + // Timeout: time.Duration(app.conf.Pressure.TimeoutMs) * time.Millisecond, + // Lps: uint32(app.conf.Pressure.Concurrency), + // Duration: time.Duration(app.conf.Pressure.DurationS) * time.Second, + // ResultCh: make(chan *lib.CallResult, 50), + // } + // a, err := lib.NewAssistant(obs, param) + // if err != nil { + // logrus.Error(err) + // } - a.Start() + // a.Start() - a.ShowResult() - } - } + // a.ShowResult() + // } + // } } //上一步 diff --git a/cmd/v2/ui/perf_pb.go b/cmd/v2/ui/perf_pb.go index 1a317b902..49ea09ff2 100644 --- a/cmd/v2/ui/perf_pb.go +++ b/cmd/v2/ui/perf_pb.go @@ -1,7 +1,6 @@ package ui import ( - "fmt" "go_dreamfactory/cmd/v2/lib" "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/cmd/v2/lib/storage" @@ -20,7 +19,6 @@ import ( "fyne.io/fyne/v2/widget" "github.com/Pallinder/go-randomdata" "github.com/sirupsen/logrus" - "github.com/spf13/cast" "google.golang.org/protobuf/proto" ) @@ -47,18 +45,18 @@ func (app *perfPb) LazyInit(ptService service.PttService, obs observer.Observer) app.itemList.ItemList = app.itemList.CreateList() app.pbList = func() { - if tables, err := cfg.NewTables(common.Loader); err != nil { - println(err.Error()) - } else { - for _, v := range tables.TestFlow.GetDataList() { - item := common.Item{ - Id: cast.ToString(v.Id), - Text: fmt.Sprintf("%-6d %-20s %-20s %s", v.Id, v.Msg, v.Route, v.Params), - Data: v, - } - app.itemList.AddItem(item) - } - } + // if tables, err := cfg.NewTables(common.Loader); err != nil { + // println(err.Error()) + // } else { + // for _, v := range tables.TestFlow.GetDataList() { + // item := common.Item{ + // Id: cast.ToString(v.Id), + // Text: fmt.Sprintf("%-6d %-20s %-20s %s", v.Id, v.Msg, v.Route, v.Params), + // Data: v, + // } + // app.itemList.AddItem(item) + // } + // } } defer app.pbList() diff --git a/cmd/v2/ui/tool_ping.go b/cmd/v2/ui/tool_ping.go index d863e67f0..2f8c5b9a0 100644 --- a/cmd/v2/ui/tool_ping.go +++ b/cmd/v2/ui/tool_ping.go @@ -14,6 +14,7 @@ import ( "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" "github.com/spf13/cast" ) @@ -25,8 +26,6 @@ type appPing struct { func (this *appPing) LazyInit(ptService service.PttService, obs observer.Observer) error { this.tabItem = container.NewTabItemWithIcon(common.TOOLBAR_PING, theme.DownloadIcon(), nil) - this.resultCh = make(chan int) - content := container.NewMax() content.Objects = []fyne.CanvasObject{} @@ -36,18 +35,41 @@ func (this *appPing) LazyInit(ptService service.PttService, obs observer.Observe portEntry := widget.NewMultiLineEntry() portEntry.Text = "80,3306,6379" form := widget.NewForm( + widget.NewFormItem("主机", targetHost), widget.NewFormItem("端口", portEntry), ) + // result + result := widget.NewMultiLineEntry() form.OnSubmit = func() { + result.Text = "" + if portEntry.Text == "" { + return + } + this.resultCh = make(chan int) ports := strings.Split(portEntry.Text, ",") this.ping(targetHost.Text, ports) + + var msgs []string + for p := range this.resultCh { - fmt.Println(p, "ok") + for _, v := range ports { + if cast.ToInt(v) == p { + msgs = append(msgs, fmt.Sprintf("端口:%d OK", p)) + } else { + msgs = append(msgs, fmt.Sprintf("端口:%s ERR", v)) + } + result.Text = strings.Join(msgs, "\n") + result.Refresh() + } } } form.Items[1].HintText = "多个端口使用英文,号分隔" - content.Objects = append(content.Objects, form) + + result.OnChanged = func(s string) { + result.Refresh() + } + content.Objects = append(content.Objects, container.NewBorder(form, nil, nil, nil, result)) this.tabItem.Content = content return nil } @@ -61,6 +83,8 @@ func (this *appPing) ping(targetHost string, ports []string) { _, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", targetHost, p), time.Millisecond*500) if err == nil { this.resultCh <- p + } else { + logrus.Error(err) } }(cast.ToInt(port)) } diff --git a/cmd/v2/ui/toolwindow.go b/cmd/v2/ui/toolwindow.go index 043e7b783..9abc7ab3e 100644 --- a/cmd/v2/ui/toolwindow.go +++ b/cmd/v2/ui/toolwindow.go @@ -53,7 +53,7 @@ func NewToolWindow(ui *UIImpl, parent fyne.Window) ToolWindow { openApp2(mw.at, common.TOOLBAR_TERM) }), - widget.NewToolbarAction(theme.MailSendIcon(), func() { + widget.NewToolbarAction(theme.ComputerIcon(), func() { openApp2(mw.at, common.TOOLBAR_PING) }), diff --git a/modules/hunting/api_challengeover.go b/modules/hunting/api_challengeover.go index f315e8d51..c6aeb876a 100644 --- a/modules/hunting/api_challengeover.go +++ b/modules/hunting/api_challengeover.go @@ -102,7 +102,6 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.HuntingCha } hunting.Boss[req.BossType] += 1 mapData["boss"] = hunting.Boss - } mapData["bossTime"] = hunting.BossTime @@ -112,6 +111,22 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.HuntingCha // 随机任务统计 this.module.ModuleRtask.SendToRtask(session, comm.Rtype81, req.Difficulty, req.BossType) this.module.ModuleRtask.SendToRtask(session, comm.Rtype82, req.BossType) - + // 狩猎副本掉落觉醒材料 + for _, v := range reward { + if _conf, err := this.configure.GetItemConfigureData(v.T); err == nil { + if _conf.Usetype == 8 { + this.module.ModuleRtask.SendToRtask(session, comm.Rtype154, v.N) + } + } + } + if newChallenge && bWin { + for _, v := range cfgHunting.Firstprize { + if _conf, err := this.configure.GetItemConfigureData(v.T); err == nil { + if _conf.Usetype == 8 { + this.module.ModuleRtask.SendToRtask(session, comm.Rtype154, v.N) + } + } + } + } return } diff --git a/modules/mainline/api_challenge.go b/modules/mainline/api_challenge.go index ec05a5064..67df4260a 100644 --- a/modules/mainline/api_challenge.go +++ b/modules/mainline/api_challenge.go @@ -52,7 +52,6 @@ func (this *apiComp) Challenge(session comm.IUserSession, req *pb.MainlineChalle } } if curChapter.Ps != 0 { - if code = this.module.ConsumeRes(session, node.PsMg, true); code != pb.ErrorCode_Success { // 扣1点 return } diff --git a/modules/mline/api.go b/modules/mline/api.go new file mode 100644 index 000000000..f73167d0d --- /dev/null +++ b/modules/mline/api.go @@ -0,0 +1,34 @@ +package mline + +import ( + "go_dreamfactory/lego/core" + "go_dreamfactory/modules" +) + +const ( + MainlineGetListResp = "getlist" + MainlineChallengeResp = "challenge" + MainlineChallengeOverResp = "challengeover" + MainlineGetRewardResp = "getreward" + MainlineNewChapterPush = "newchapter" +) + +type apiComp struct { + modules.MCompGate + service core.IService + module *Mainline +} + +//组件初始化接口 +func (this *apiComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { + err = this.MCompGate.Init(service, module, comp, options) + this.module = module.(*Mainline) + this.service = service + return +} + +func (this *apiComp) Start() (err error) { + err = this.MCompGate.Start() + + return +} diff --git a/modules/mline/api_challenge.go b/modules/mline/api_challenge.go new file mode 100644 index 000000000..1389590ae --- /dev/null +++ b/modules/mline/api_challenge.go @@ -0,0 +1,108 @@ +package mline + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/pb" + cfg "go_dreamfactory/sys/configure/structs" + + "google.golang.org/protobuf/proto" +) + +//参数校验 +func (this *apiComp) ChallengeCheck(session comm.IUserSession, req *pb.MainlineChallengeReq) (code pb.ErrorCode) { + if req.MainlineId == 0 || req.ChapterObj == "" || req.Leadpos >= 5 || len(req.Teamids) != 5 || req.Leadpos < 0 { + code = pb.ErrorCode_ReqParameterError + return + } + return +} + +///挑战主线关卡 +func (this *apiComp) Challenge(session comm.IUserSession, req *pb.MainlineChallengeReq) (code pb.ErrorCode, data proto.Message) { + var ( + curChapter *pb.DBMainline // 当前章节信息 + ps int32 + psAnt *cfg.Gameatn + ) + + code = this.ChallengeCheck(session, req) + if code != pb.ErrorCode_Success { + return // 参数校验失败直接返回 + } + // 校验关卡存不存在 + curChapter = this.module.modelMainline.getOneChapterInfo(session.GetUserId(), req.ChapterObj) + if curChapter == nil { + code = pb.ErrorCode_MainlineNotFound + return + } + + node := this.module.configure.GetMainlineConfigData(int32(req.MainlineId), curChapter.Intensity) + if node == nil { // 配置文件校验 + code = pb.ErrorCode_MainlineNotFindChapter + return + } + + for _, v := range curChapter.BranchID { + if v == int32(req.MainlineId) { // 重复挑战 + code = pb.ErrorCode_MainlineNotFindChapter + return + } + if v == int32(req.MainlineId) { + break + } + } + if curChapter.Ps != 0 { + if code = this.module.ConsumeRes(session, node.PsMg, true); code != pb.ErrorCode_Success { // 扣1点 + return + } + } else { + for _, v := range node.PsConsume { + if v.A == "attr" && v.T == "ps" { + ps += v.N + } + } + for _, v := range node.PsMg { + if v.A == "attr" && v.T == "ps" { + ps += v.N + } + } + psAnt = &cfg.Gameatn{ + A: "attr", + T: "ps", + N: ps, + } + if code = this.module.ConsumeRes(session, []*cfg.Gameatn{psAnt}, true); code != pb.ErrorCode_Success { + return + } + + curChapter.Ps = ps + update := map[string]interface{}{ + "ps": ps, + } + + err := this.module.modelMainline.modifyMainlineData(session.GetUserId(), curChapter.Id, update) + if err != nil { + code = pb.ErrorCode_DBError + return + } + } + + code, record := this.module.battle.CreatePveBattle(session, &pb.BattlePVEReq{ + Ptype: pb.PlayType_mainline, + Title: "", + Format: &pb.BattleFormation{ + Leadpos: req.Leadpos, + Format: req.Teamids, + }, + Mformat: node.FormatList, + }) + if code != pb.ErrorCode_Success { + return + } + session.SendMsg(string(this.module.GetType()), MainlineChallengeResp, &pb.MainlineChallengeResp{ + Info: &pb.BattleInfo{Id: record.Id, Title: record.Title, Btype: record.Btype, Ptype: record.Ptype, RedCompId: record.RedCompId, Redflist: record.Redflist, BlueCompId: record.BlueCompId, Buleflist: record.Buleflist}, + ChapterObj: req.ChapterObj, + MainlineId: req.GetMainlineId(), + }) + return +} diff --git a/modules/mline/api_challengeover.go b/modules/mline/api_challengeover.go new file mode 100644 index 000000000..24d0c548f --- /dev/null +++ b/modules/mline/api_challengeover.go @@ -0,0 +1,153 @@ +package mline + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/pb" + + cfg "go_dreamfactory/sys/configure/structs" + + "go.mongodb.org/mongo-driver/bson/primitive" + "google.golang.org/protobuf/proto" +) + +//参数校验 +func (this *apiComp) ChallengeOverCheck(session comm.IUserSession, req *pb.MainlineChallengeOverReq) (code pb.ErrorCode) { + if req.MainlineId == 0 { + code = pb.ErrorCode_ReqParameterError + return + } + return +} + +///挑战主线关卡 +func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.MainlineChallengeOverReq) (code pb.ErrorCode, data proto.Message) { + var ( + mainline *pb.DBMainline // 当前章节信息 + res []*cfg.Gameatn // 小章节奖励 + isWin bool + user *pb.DBUser + hero []string //新的英雄 + newhero []string //新的英雄 + ) + res = make([]*cfg.Gameatn, 0) + hero = make([]string, 0) + newhero = make([]string, 0) + code = this.ChallengeOverCheck(session, req) + if code != pb.ErrorCode_Success { + return // 参数校验失败直接返回 + } + // 校验关卡存不存在 + mainline = this.module.modelMainline.getOneChapterInfo(session.GetUserId(), req.ChapterObj) + if mainline == nil { + code = pb.ErrorCode_MainlineNotFound + return + } + + node := this.module.configure.GetMainlineConfigData(int32(req.MainlineId), mainline.Intensity) + if node == nil { // 配置文件校验 + code = pb.ErrorCode_MainlineNotFindChapter + return + } + for _, v := range mainline.BranchID { + if v == int32(req.MainlineId) { // 重复挑战 + code = pb.ErrorCode_MainlineNotFindChapter + return + } + } + // 校验通过 + + code, isWin = this.module.battle.CheckBattleReport(session, req.Report) + if code != pb.ErrorCode_Success { + return + } + + if !isWin { // 战斗失败直接返回 + // 返还 + mainline.Ps = 0 + this.module.modelMainline.modifyMainlineData(session.GetUserId(), mainline.Id, map[string]interface{}{ + "ps": 0, + }) + + if code = this.module.DispenseRes(session, node.PsConsume, true); code != pb.ErrorCode_Success { // 返还预扣体力 + return + } + code = pb.ErrorCode_BattleNoWin + return + } + + res = append(res, node.Award...) + for _, v := range node.Award { + if v.A == comm.HeroType { + hero = append(hero, v.T) + } + } + if len(hero) > 0 { + ishave := this.module.ModuleUser.CheckTujianHero(session, hero) + for i, v := range ishave { + if !v { + newhero = append(newhero, hero[i]) + } + } + } + user = this.module.ModuleUser.GetUser(session.GetUserId()) + mainline.MainlineId = int32(req.MainlineId) + mainline.BranchID = append(mainline.BranchID, int32(req.MainlineId)) + mainline.Ps = 0 // 重置预扣体力 + update := map[string]interface{}{ + "mainlineId": req.MainlineId, + "chapterId": mainline.ChapterId, + "branchID": mainline.BranchID, + "ps": 0, + } + if node.Episodetype == comm.MainLineBoss { // 打完boss 设置领奖状态 + update["awaredID"] = pb.AwaredType_TypeAvailable + mainline.AwaredID = pb.AwaredType_TypeAvailable + } + err := this.module.modelMainline.modifyMainlineData(session.GetUserId(), mainline.Id, update) + if err != nil { + code = pb.ErrorCode_DBError + return + } + + if node.Episodetype == comm.MainLineBoss { // 挑战完成 boss关 + _data := &pb.DBMainline{} + conf := this.module.configure.GetMainlineChapter(mainline.ChapterId + 1) + _data.Id = primitive.NewObjectID().Hex() + _data.ChapterId = mainline.ChapterId + 1 + _data.Intensity = mainline.Intensity + if conf == nil { // 这里就是切换下一个难度了 + if mainline.Intensity < comm.MaxMainlineIntensity { + _data.Intensity = mainline.Intensity + 1 // 难度+1 + _data.ChapterId = 1 // 默认第一章节 + } + } + + _mData := make(map[string]interface{}, 0) + _data.Uid = session.GetUserId() + _mData[_data.Id] = _data + + this.module.modelMainline.addNewChapter(session.GetUserId(), _mData) + session.SendMsg(string(this.module.GetType()), MainlineNewChapterPush, &pb.MainlineNewChapterPush{Data: _data}) // 推送新的章节 + + } + // 发奖 + if code = this.module.DispenseRes(session, res, true); code != pb.ErrorCode_Success { + this.module.Debugf("DispenseRes err:+%v", res) + } + // 加经验 + if node.Episodetype != 5 && node.Episodetype != 7 { + if req.Report != nil && req.Report.Info != nil && len(req.Report.Info.Redflist) > 0 { + for _, v := range req.Report.Info.Redflist[0].Team { + if node.Exp > 0 && !v.Ishelp { // 助战英雄不加经验 + this.module.ModuleHero.AddHeroExp(session, v.Oid, node.Exp) + } + } + } + } + + session.SendMsg(string(this.module.GetType()), MainlineChallengeOverResp, &pb.MainlineChallengeOverResp{Data: mainline, Newheros: newhero, Olv: user.Lv}) + // 主线任务统计 Rtype60 + this.module.ModuleRtask.SendToRtask(session, comm.Rtype60, 1) + this.module.ModuleRtask.SendToRtask(session, comm.Rtype61, int32(req.MainlineId)) + return +} diff --git a/modules/mline/api_getReward.go b/modules/mline/api_getReward.go new file mode 100644 index 000000000..9e4c3d8bc --- /dev/null +++ b/modules/mline/api_getReward.go @@ -0,0 +1,65 @@ +package mline + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/pb" + + "google.golang.org/protobuf/proto" +) + +//参数校验 +func (this *apiComp) GetRewardCheck(session comm.IUserSession, req *pb.MainlineGetRewardReq) (code pb.ErrorCode) { + if req.ChapterObj == "" { + code = pb.ErrorCode_ReqParameterError + } + return +} + +///获取主线关卡信息 +func (this *apiComp) GetReward(session comm.IUserSession, req *pb.MainlineGetRewardReq) (code pb.ErrorCode, data proto.Message) { + rsp := &pb.MainlineGetRewardResp{} + + code = this.GetRewardCheck(session, req) + if code != pb.ErrorCode_Success { + return // 参数校验失败直接返回 + } + + _obj := this.module.modelMainline.getOneChapterInfo(session.GetUserId(), req.ChapterObj) + if _obj == nil { + code = pb.ErrorCode_DBError + return + } + if _obj.AwaredID == pb.AwaredType_TypeReceived { + code = pb.ErrorCode_MainlineRepeatReward // 重复领奖 + return + } + if _obj.AwaredID != pb.AwaredType_TypeAvailable { + code = pb.ErrorCode_MainlineCompleteReward // 通关才能领奖 + return + } + // 校验是不是通关了 + chaptConfig := this.module.configure.GetMainlineChapter(int32(_obj.ChapterId)) // 根据配置文件找 + if chaptConfig == nil { + code = pb.ErrorCode_ConfigNoFound + return + } + + _obj.AwaredID = pb.AwaredType_TypeReceived // 设置领奖标记 + update := map[string]interface{}{ + "awaredID": _obj.AwaredID, + } + // 发奖 + code = this.module.DispenseRes(session, chaptConfig.Award, true) + if code != pb.ErrorCode_Success { + return + } + err := this.module.modelMainline.modifyMainlineData(session.GetUserId(), _obj.Id, update) + if err != nil { + code = pb.ErrorCode_DBError + return + } + + rsp.Data = _obj + session.SendMsg(string(this.module.GetType()), MainlineGetRewardResp, rsp) + return +} diff --git a/modules/mline/api_getlist.go b/modules/mline/api_getlist.go new file mode 100644 index 000000000..b581740fb --- /dev/null +++ b/modules/mline/api_getlist.go @@ -0,0 +1,47 @@ +package mline + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/pb" + + "go.mongodb.org/mongo-driver/bson/primitive" + "google.golang.org/protobuf/proto" +) + +//参数校验 +func (this *apiComp) GetListCheck(session comm.IUserSession, req *pb.MainlineGetListReq) (code pb.ErrorCode) { + + return +} + +///获取主线关卡信息 +func (this *apiComp) GetList(session comm.IUserSession, req *pb.MainlineGetListReq) (code pb.ErrorCode, data proto.Message) { + rsp := &pb.MainlineGetListResp{} + + code = this.GetListCheck(session, req) + if code != pb.ErrorCode_Success { + return // 参数校验失败直接返回 + } + + list, err := this.module.modelMainline.getMainlineList(session.GetUserId()) + if err != nil { + code = pb.ErrorCode_DBError + return + } + if len(list) == 0 { // 如果数量为0 则默认创建一条数据 + _data := &pb.DBMainline{} + _data.Id = primitive.NewObjectID().Hex() + _data.ChapterId = 1 // 默认第一章节 + _mData := make(map[string]interface{}, 0) + _data.Uid = session.GetUserId() + _data.Intensity = 1 // 难度1 + _mData[_data.Id] = _data + + this.module.modelMainline.addNewChapter(session.GetUserId(), _mData) + list = append(list, _data) + } + rsp.Data = list + + session.SendMsg(string(this.module.GetType()), MainlineGetListResp, &pb.MainlineGetListResp{Data: rsp.Data}) + return +} diff --git a/modules/mline/comp_configure.go b/modules/mline/comp_configure.go new file mode 100644 index 000000000..9c722d0cd --- /dev/null +++ b/modules/mline/comp_configure.go @@ -0,0 +1,92 @@ +package mline + +import ( + "go_dreamfactory/lego/core" + "go_dreamfactory/lego/sys/log" + "go_dreamfactory/modules" + "go_dreamfactory/sys/configure" + cfg "go_dreamfactory/sys/configure/structs" + "sync" +) + +const ( + game_mainlinechapter = "game_mainlinechapter.json" + game_mainline = "game_mainline.json" +) + +///配置管理基础组件 +type configureComp struct { + modules.MCompConfigure + module *Mainline + hlock sync.RWMutex + _mapMainline map[int64]*cfg.GameMainlineData +} + +//组件初始化接口 +func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { + err = this.MCompConfigure.Init(service, module, comp, options) + this.module = module.(*Mainline) + err = this.LoadMultiConfigure(map[string]interface{}{ + game_mainlinechapter: cfg.NewGameMainlineChapter, + }) + this._mapMainline = make(map[int64]*cfg.GameMainlineData, 0) + configure.RegisterConfigure(game_mainline, cfg.NewGameMainline, this.GetMainline) + + return +} + +func (this *configureComp) GetMainline() { + if v, err := this.GetConfigure(game_mainline); err == nil { + if configure, ok := v.(*cfg.GameMainline); ok { + this.hlock.Lock() + defer this.hlock.Unlock() + for _, value := range configure.GetDataList() { + this._mapMainline[int64(value.Id<<16)+int64(value.Intensity)] = value + } + return + } + } else { + log.Errorf("get game_mainline conf err:%v", err) + } + return +} + +// id + intensity +func (this *configureComp) GetMainlineConfigData(id, intensity int32) *cfg.GameMainlineData { + return this._mapMainline[int64(id<<16)+int64(intensity)] +} + +//读取配置数据 +func (this *configureComp) GetConfigure(name string) (v interface{}, err error) { + return configure.GetConfigure(name) + +} + +func (this *configureComp) GetMainlineChapter(id int32) (data *cfg.GameMainlineChapterData) { + if v, err := this.GetConfigure(game_mainlinechapter); err != nil { + this.module.Errorf("get global conf err:%v", err) + return + } else { + var ( + configure *cfg.GameMainlineChapter + ok bool + ) + if configure, ok = v.(*cfg.GameMainlineChapter); !ok { + this.module.Errorf("%T no is *cfg.Game_MainlineChapterData", v) + return + } + + data = configure.Get(int(id - 1)) + } + return +} + +// 获取章节数量 +func (this *configureComp) GetMaxMainlineChapter() int32 { + if v, err := this.GetConfigure(game_mainlinechapter); err == nil { + if configure, ok := v.(*cfg.GameMainlineChapter); ok { + return int32(len(configure.GetDataList())) + } + } + return 0 +} diff --git a/modules/mline/model_mainline.go b/modules/mline/model_mainline.go new file mode 100644 index 000000000..dfb29d4df --- /dev/null +++ b/modules/mline/model_mainline.go @@ -0,0 +1,63 @@ +package mline + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/lego/core" + "go_dreamfactory/modules" + "go_dreamfactory/pb" +) + +type ModelMainline struct { + modules.MCompModel + module *Mainline +} + +func (this *ModelMainline) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { + this.TableName = comm.TableMainline + err = this.MCompModel.Init(service, module, comp, options) + this.module = module.(*Mainline) + return +} + +// 获取章节信息 +func (this *ModelMainline) getMainlineList(uid string) (storys []*pb.DBMainline, err error) { + storys = make([]*pb.DBMainline, 0) + err = this.GetList(uid, &storys) + return +} + +// 修改章节信息 +func (this *ModelMainline) modifyMainlineData(uid string, objid string, data map[string]interface{}) error { + return this.module.modelMainline.ChangeList(uid, objid, data) +} + +// 增加新的章节数据 +func (this *ModelMainline) addNewChapter(uId string, data map[string]interface{}) (err error) { + + if err = this.AddLists(uId, data); err != nil { + this.module.Errorf("err:%v", err) + return + } + return nil +} + +// 获取指定章节数据 +func (this *ModelMainline) getOneChapterInfo(uid, obj string) *pb.DBMainline { + data := &pb.DBMainline{} + err := this.module.modelMainline.GetListObj(uid, obj, data) + if err != nil { + this.module.Errorf("%v", err) + return nil + } + return data +} + +// 增加新的章节数据 +func (this *ModelMainline) cleanChapter(uId string) (err error) { + + if err = this.DelByUId(uId); err != nil { + this.module.Errorf("err:%v", err) + return + } + return nil +} diff --git a/modules/mline/module.go b/modules/mline/module.go new file mode 100644 index 000000000..bc5697b5b --- /dev/null +++ b/modules/mline/module.go @@ -0,0 +1,201 @@ +package mline + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/lego/core" + "go_dreamfactory/modules" + "go_dreamfactory/pb" + "sort" + + "go.mongodb.org/mongo-driver/bson/primitive" +) + +type Mainline struct { + modules.ModuleBase + modelMainline *ModelMainline + service core.IService + api *apiComp + configure *configureComp + battle comm.IBattle +} + +func NewModule() core.IModule { + return &Mainline{} +} + +func (this *Mainline) GetType() core.M_Modules { + return comm.ModuleMainline +} + +func (this *Mainline) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { + err = this.ModuleBase.Init(service, module, options) + this.service = service + return +} + +func (this *Mainline) OnInstallComp() { + this.ModuleBase.OnInstallComp() + this.api = this.RegisterComp(new(apiComp)).(*apiComp) + this.modelMainline = this.RegisterComp(new(ModelMainline)).(*ModelMainline) + this.configure = this.RegisterComp(new(configureComp)).(*configureComp) +} + +// 接口信息 给其他模块调用 用来修改主线关卡信息 +func (this *Mainline) ModifyMainlineData(uid string, id int32) (code pb.ErrorCode) { + + conf := this.configure.GetMainlineConfigData(id, 1) + list, err := this.modelMainline.getMainlineList(uid) + if err != nil { + code = pb.ErrorCode_DBError + return + } + for _, v := range list { + if v.ChapterId == conf.Chapter { + data := make(map[string]interface{}, 0) + data["mainlineId"] = id + data["chapterId"] = v.ChapterId + this.modelMainline.modifyMainlineData(uid, v.Id, data) + if err != nil { + code = pb.ErrorCode_DBError + } + + return + } + } + //add + _data := &pb.DBMainline{} + _data.Id = primitive.NewObjectID().Hex() + _data.ChapterId = conf.Chapter + _data.MainlineId = conf.Id + _mData := make(map[string]interface{}, 0) + _data.Uid = uid + _data.Intensity = 1 // 难度1 + _mData[_data.Id] = _data + + this.modelMainline.addNewChapter(uid, _mData) + return +} + +func (this *Mainline) GetUsermainLineData(uid string) (mainlineId int32) { + + _szData, err := this.modelMainline.getMainlineList(uid) + if err == nil { + sort.SliceStable(_szData, func(i, j int) bool { // 排序 + return _szData[i].ChapterId > _szData[j].ChapterId + }) + } + + return +} + +func (this *Mainline) Start() (err error) { + err = this.ModuleBase.Start() + var module core.IModule + if module, err = this.service.GetModule(comm.ModuleBattle); err != nil { + return + } + + this.battle = module.(comm.IBattle) + return +} + +//红点查询 +func (this *Mainline) Reddot(session comm.IUserSession, rid ...comm.ReddotType) (reddot map[comm.ReddotType]bool) { + reddot = make(map[comm.ReddotType]bool) + for _, v := range rid { + if v == comm.Reddot5 { + reddot[comm.Reddot5] = this.CheckPoint(session.GetUserId()) + break + } + } + return +} + +// 红点检测 +func (this *Mainline) CheckPoint(uid string) bool { + list, err := this.modelMainline.getMainlineList(uid) + if err != nil { + return false + } + for _, v := range list { + conf := this.configure.GetMainlineChapter(v.ChapterId) + if conf == nil { + continue + } + if len(conf.Episode) != len(v.BranchID) { + return true + } + } + return false +} + +// 参数 难度 + 关卡id +func (this *Mainline) ModifyMainlineDataByNanduID(uid string, nandu, id int32) (code pb.ErrorCode) { + + conf := this.configure.GetMainlineConfigData(id, nandu) + if conf == nil { + code = pb.ErrorCode_ConfigNoFound // 找不到配置 + return + } + // 已现在设置的为准 删除之前的所有数据 + this.modelMainline.cleanChapter(uid) + // 获取当前的章节数据 + jumpCap := conf.Chapter + // 先加所有难度小于1 的章节 + for ndIndex := 1; ndIndex <= int(nandu)-1; ndIndex++ { + max := this.configure.GetMaxMainlineChapter() + for i := 1; i <= int(max); i++ { + confCap := this.configure.GetMainlineChapter(int32(i)) + //_conf := this.configure.GetMainlineConfigData(int32(i), int32(ndIndex)) + _data := &pb.DBMainline{} + _data.Id = primitive.NewObjectID().Hex() + _data.ChapterId = int32(i) + _data.MainlineId = confCap.Id + _mData := make(map[string]interface{}, 0) + _data.Uid = uid + _data.Intensity = int32(ndIndex) // 难度1 + + for _, v := range confCap.Episode { + _data.BranchID = append(_data.BranchID, v) + } + + _mData[_data.Id] = _data + + this.modelMainline.addNewChapter(uid, _mData) + } + } + // 加当前难度 的章节数据 + for i := 1; i <= int(jumpCap-1); i++ { + confCap := this.configure.GetMainlineChapter(int32(i)) + _data := &pb.DBMainline{} + _data.Id = primitive.NewObjectID().Hex() + _data.ChapterId = int32(i) + _data.MainlineId = confCap.Id + _mData := make(map[string]interface{}, 0) + _data.Uid = uid + _data.Intensity = int32(nandu) // 难度1 + for _, v := range confCap.Episode { + _data.BranchID = append(_data.BranchID, v) + } + _mData[_data.Id] = _data + this.modelMainline.addNewChapter(uid, _mData) + } + // 加当前难度 当前章节的前置关卡数据 + _data := &pb.DBMainline{} + _data.Id = primitive.NewObjectID().Hex() + _data.ChapterId = conf.Chapter + _data.MainlineId = conf.Id + _mData := make(map[string]interface{}, 0) + _data.Uid = uid + _data.Intensity = int32(nandu) // 难度1 + confCap := this.configure.GetMainlineChapter(int32(conf.Chapter)) + for _, v := range confCap.Episode { + if v <= id { + _data.BranchID = append(_data.BranchID, v) + } + } + _mData[_data.Id] = _data + this.modelMainline.addNewChapter(uid, _mData) + + return +} diff --git a/modules/sys/api_func.go b/modules/sys/api_func.go index 23b547283..ec4a53786 100644 --- a/modules/sys/api_func.go +++ b/modules/sys/api_func.go @@ -25,8 +25,11 @@ func (this *apiComp) Funclist(session comm.IUserSession, req *pb.SysFuncListReq) confList := this.moduleSys.configure.getOpencondList() for _, v := range confList { // 返回未开启的功能列表 - if user.Lv < v.Main { - funcList = append(funcList, v.Id) + for _, conf := range v.Main { + if conf.Key == "platlv" && user.Lv < conf.Param { + funcList = append(funcList, v.Id) + continue + } } } rsp.FuncIds = funcList diff --git a/modules/sys/model_sys.go b/modules/sys/model_sys.go index 6d2e9804c..3cef80442 100644 --- a/modules/sys/model_sys.go +++ b/modules/sys/model_sys.go @@ -27,9 +27,11 @@ func (this *ModelSys) IsAccess(funName string, uid string) (code pb.ErrorCode) { if user != nil { conf := this.moduleSys.configure.getFuncCfg(funName) if conf != nil { - if user.Lv < conf.Main{ - code = pb.ErrorCode_NoOpened - return + for _, v := range conf.Main { + if v.Key == "platlv" && user.Lv < v.Param { + code = pb.ErrorCode_NoOpened + return + } } } } diff --git a/modules/troll/api_buyorsell.go b/modules/troll/api_buyorsell.go index 0ecdd06b2..368dbce18 100644 --- a/modules/troll/api_buyorsell.go +++ b/modules/troll/api_buyorsell.go @@ -170,6 +170,6 @@ func (this *apiComp) BuyOrSell(session comm.IUserSession, req *pb.TrollBuyOrSell this.module.record.AddTrollRecord(session.GetUserId(), gold, trolltrain.TarinPos) } - this.module.ModuleRtask.SendToRtask(session, comm.Rtype151, 1) + this.module.ModuleRtask.SendToRtask(session, comm.Rtype153, 1) return } diff --git a/modules/user/comp_configure.go b/modules/user/comp_configure.go index 531791265..a3acca4ac 100644 --- a/modules/user/comp_configure.go +++ b/modules/user/comp_configure.go @@ -78,8 +78,11 @@ func (this *configureComp) FindFunc(lv int32) (funcIds []string) { return nil } for _, d := range data.GetDataList() { - if d.Main == lv { - funcIds = append(funcIds, d.Id) + for _, v := range d.Main { + if v.Key == "platlv" && v.Param == lv { + funcIds = append(funcIds, d.Id) + continue + } } } } diff --git a/pb/mline_db.pb.go b/pb/mline_db.pb.go new file mode 100644 index 000000000..26a1bbf80 --- /dev/null +++ b/pb/mline_db.pb.go @@ -0,0 +1,227 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.0 +// protoc v3.20.0 +// source: mline/mline_db.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type DBMline struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` //ID + Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid" bson:"uid"` //用户ID + CType int32 `protobuf:"varint,3,opt,name=cType,proto3" json:"cType" bson:"cType"` //章节ID + ChapterId int32 `protobuf:"varint,4,opt,name=chapterId,proto3" json:"chapterId" bson:"chapterId"` //章节ID + StageId int32 `protobuf:"varint,5,opt,name=stageId,proto3" json:"stageId" bson:"stageId"` //主线关卡ID + Star map[int32]int32 `protobuf:"bytes,6,rep,name=star,proto3" json:"star" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 关卡对应的星级 (key 关卡ID value 星数) + Awared map[int32]bool `protobuf:"bytes,7,rep,name=awared,proto3" json:"awared" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3" bson:"awared"` //(key 配置表星级) + Ps map[int32]int32 `protobuf:"bytes,8,rep,name=ps,proto3" json:"ps" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 预扣的体力 +} + +func (x *DBMline) Reset() { + *x = DBMline{} + if protoimpl.UnsafeEnabled { + mi := &file_mline_mline_db_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DBMline) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DBMline) ProtoMessage() {} + +func (x *DBMline) ProtoReflect() protoreflect.Message { + mi := &file_mline_mline_db_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DBMline.ProtoReflect.Descriptor instead. +func (*DBMline) Descriptor() ([]byte, []int) { + return file_mline_mline_db_proto_rawDescGZIP(), []int{0} +} + +func (x *DBMline) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *DBMline) GetUid() string { + if x != nil { + return x.Uid + } + return "" +} + +func (x *DBMline) GetCType() int32 { + if x != nil { + return x.CType + } + return 0 +} + +func (x *DBMline) GetChapterId() int32 { + if x != nil { + return x.ChapterId + } + return 0 +} + +func (x *DBMline) GetStageId() int32 { + if x != nil { + return x.StageId + } + return 0 +} + +func (x *DBMline) GetStar() map[int32]int32 { + if x != nil { + return x.Star + } + return nil +} + +func (x *DBMline) GetAwared() map[int32]bool { + if x != nil { + return x.Awared + } + return nil +} + +func (x *DBMline) GetPs() map[int32]int32 { + if x != nil { + return x.Ps + } + return nil +} + +var File_mline_mline_db_proto protoreflect.FileDescriptor + +var file_mline_mline_db_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x6d, 0x6c, 0x69, 0x6e, 0x65, 0x2f, 0x6d, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x62, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9c, 0x03, 0x0a, 0x07, 0x44, 0x42, 0x4d, 0x6c, 0x69, + 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, + 0x61, 0x70, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, + 0x68, 0x61, 0x70, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x67, + 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x74, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x74, 0x61, 0x72, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x44, 0x42, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x73, 0x74, 0x61, 0x72, 0x12, 0x2c, 0x0a, 0x06, 0x61, 0x77, + 0x61, 0x72, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x44, 0x42, 0x4d, + 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x61, 0x77, 0x61, 0x72, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x70, 0x73, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x44, 0x42, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x50, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x02, 0x70, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x53, 0x74, + 0x61, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x41, 0x77, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x35, + 0x0a, 0x07, 0x50, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_mline_mline_db_proto_rawDescOnce sync.Once + file_mline_mline_db_proto_rawDescData = file_mline_mline_db_proto_rawDesc +) + +func file_mline_mline_db_proto_rawDescGZIP() []byte { + file_mline_mline_db_proto_rawDescOnce.Do(func() { + file_mline_mline_db_proto_rawDescData = protoimpl.X.CompressGZIP(file_mline_mline_db_proto_rawDescData) + }) + return file_mline_mline_db_proto_rawDescData +} + +var file_mline_mline_db_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_mline_mline_db_proto_goTypes = []interface{}{ + (*DBMline)(nil), // 0: DBMline + nil, // 1: DBMline.StarEntry + nil, // 2: DBMline.AwaredEntry + nil, // 3: DBMline.PsEntry +} +var file_mline_mline_db_proto_depIdxs = []int32{ + 1, // 0: DBMline.star:type_name -> DBMline.StarEntry + 2, // 1: DBMline.awared:type_name -> DBMline.AwaredEntry + 3, // 2: DBMline.ps:type_name -> DBMline.PsEntry + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_mline_mline_db_proto_init() } +func file_mline_mline_db_proto_init() { + if File_mline_mline_db_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_mline_mline_db_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DBMline); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_mline_mline_db_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_mline_mline_db_proto_goTypes, + DependencyIndexes: file_mline_mline_db_proto_depIdxs, + MessageInfos: file_mline_mline_db_proto_msgTypes, + }.Build() + File_mline_mline_db_proto = out.File + file_mline_mline_db_proto_rawDesc = nil + file_mline_mline_db_proto_goTypes = nil + file_mline_mline_db_proto_depIdxs = nil +} diff --git a/pb/mline_msg.pb.go b/pb/mline_msg.pb.go new file mode 100644 index 000000000..e0db9ac34 --- /dev/null +++ b/pb/mline_msg.pb.go @@ -0,0 +1,643 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.0 +// protoc v3.20.0 +// source: mline/mline_msg.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// 查询关卡进度 +type MlineGetListReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CType int32 `protobuf:"varint,1,opt,name=cType,proto3" json:"cType"` // 章节类型 +} + +func (x *MlineGetListReq) Reset() { + *x = MlineGetListReq{} + if protoimpl.UnsafeEnabled { + mi := &file_mline_mline_msg_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MlineGetListReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MlineGetListReq) ProtoMessage() {} + +func (x *MlineGetListReq) ProtoReflect() protoreflect.Message { + mi := &file_mline_mline_msg_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MlineGetListReq.ProtoReflect.Descriptor instead. +func (*MlineGetListReq) Descriptor() ([]byte, []int) { + return file_mline_mline_msg_proto_rawDescGZIP(), []int{0} +} + +func (x *MlineGetListReq) GetCType() int32 { + if x != nil { + return x.CType + } + return 0 +} + +// 返回进度信息 +type MlineGetListResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []*DBMline `protobuf:"bytes,1,rep,name=data,proto3" json:"data"` +} + +func (x *MlineGetListResp) Reset() { + *x = MlineGetListResp{} + if protoimpl.UnsafeEnabled { + mi := &file_mline_mline_msg_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MlineGetListResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MlineGetListResp) ProtoMessage() {} + +func (x *MlineGetListResp) ProtoReflect() protoreflect.Message { + mi := &file_mline_mline_msg_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MlineGetListResp.ProtoReflect.Descriptor instead. +func (*MlineGetListResp) Descriptor() ([]byte, []int) { + return file_mline_mline_msg_proto_rawDescGZIP(), []int{1} +} + +func (x *MlineGetListResp) GetData() []*DBMline { + if x != nil { + return x.Data + } + return nil +} + +// 领取关卡宝箱 +type MlineGetRewardReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CId int32 `protobuf:"varint,1,opt,name=cId,proto3" json:"cId"` // 章节配置表唯一ID + Star int32 `protobuf:"varint,2,opt,name=star,proto3" json:"star"` // 星级奖励 +} + +func (x *MlineGetRewardReq) Reset() { + *x = MlineGetRewardReq{} + if protoimpl.UnsafeEnabled { + mi := &file_mline_mline_msg_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MlineGetRewardReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MlineGetRewardReq) ProtoMessage() {} + +func (x *MlineGetRewardReq) ProtoReflect() protoreflect.Message { + mi := &file_mline_mline_msg_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MlineGetRewardReq.ProtoReflect.Descriptor instead. +func (*MlineGetRewardReq) Descriptor() ([]byte, []int) { + return file_mline_mline_msg_proto_rawDescGZIP(), []int{2} +} + +func (x *MlineGetRewardReq) GetCId() int32 { + if x != nil { + return x.CId + } + return 0 +} + +func (x *MlineGetRewardReq) GetStar() int32 { + if x != nil { + return x.Star + } + return 0 +} + +type MlineGetRewardResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data *DBMline `protobuf:"bytes,1,opt,name=data,proto3" json:"data"` //当前章节信息 +} + +func (x *MlineGetRewardResp) Reset() { + *x = MlineGetRewardResp{} + if protoimpl.UnsafeEnabled { + mi := &file_mline_mline_msg_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MlineGetRewardResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MlineGetRewardResp) ProtoMessage() {} + +func (x *MlineGetRewardResp) ProtoReflect() protoreflect.Message { + mi := &file_mline_mline_msg_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MlineGetRewardResp.ProtoReflect.Descriptor instead. +func (*MlineGetRewardResp) Descriptor() ([]byte, []int) { + return file_mline_mline_msg_proto_rawDescGZIP(), []int{3} +} + +func (x *MlineGetRewardResp) GetData() *DBMline { + if x != nil { + return x.Data + } + return nil +} + +// 挑战关卡 +type MlineChallengeReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + StageId int32 `protobuf:"varint,1,opt,name=stageId,proto3" json:"stageId"` // 小关ID + Battle *BattleFormation `protobuf:"bytes,2,opt,name=battle,proto3" json:"battle"` +} + +func (x *MlineChallengeReq) Reset() { + *x = MlineChallengeReq{} + if protoimpl.UnsafeEnabled { + mi := &file_mline_mline_msg_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MlineChallengeReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MlineChallengeReq) ProtoMessage() {} + +func (x *MlineChallengeReq) ProtoReflect() protoreflect.Message { + mi := &file_mline_mline_msg_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MlineChallengeReq.ProtoReflect.Descriptor instead. +func (*MlineChallengeReq) Descriptor() ([]byte, []int) { + return file_mline_mline_msg_proto_rawDescGZIP(), []int{4} +} + +func (x *MlineChallengeReq) GetStageId() int32 { + if x != nil { + return x.StageId + } + return 0 +} + +func (x *MlineChallengeReq) GetBattle() *BattleFormation { + if x != nil { + return x.Battle + } + return nil +} + +type MlineChallengeResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Info *BattleInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info"` + StageId int32 `protobuf:"varint,2,opt,name=stageId,proto3" json:"stageId"` // 小关ID +} + +func (x *MlineChallengeResp) Reset() { + *x = MlineChallengeResp{} + if protoimpl.UnsafeEnabled { + mi := &file_mline_mline_msg_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MlineChallengeResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MlineChallengeResp) ProtoMessage() {} + +func (x *MlineChallengeResp) ProtoReflect() protoreflect.Message { + mi := &file_mline_mline_msg_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MlineChallengeResp.ProtoReflect.Descriptor instead. +func (*MlineChallengeResp) Descriptor() ([]byte, []int) { + return file_mline_mline_msg_proto_rawDescGZIP(), []int{5} +} + +func (x *MlineChallengeResp) GetInfo() *BattleInfo { + if x != nil { + return x.Info + } + return nil +} + +func (x *MlineChallengeResp) GetStageId() int32 { + if x != nil { + return x.StageId + } + return 0 +} + +// 客户端通知服务器打赢了 +type MlineChallengeOverReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + StageId int32 `protobuf:"varint,1,opt,name=stageId,proto3" json:"stageId"` // 小关ID + Report *BattleReport `protobuf:"bytes,3,opt,name=report,proto3" json:"report"` //战报 +} + +func (x *MlineChallengeOverReq) Reset() { + *x = MlineChallengeOverReq{} + if protoimpl.UnsafeEnabled { + mi := &file_mline_mline_msg_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MlineChallengeOverReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MlineChallengeOverReq) ProtoMessage() {} + +func (x *MlineChallengeOverReq) ProtoReflect() protoreflect.Message { + mi := &file_mline_mline_msg_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MlineChallengeOverReq.ProtoReflect.Descriptor instead. +func (*MlineChallengeOverReq) Descriptor() ([]byte, []int) { + return file_mline_mline_msg_proto_rawDescGZIP(), []int{6} +} + +func (x *MlineChallengeOverReq) GetStageId() int32 { + if x != nil { + return x.StageId + } + return 0 +} + +func (x *MlineChallengeOverReq) GetReport() *BattleReport { + if x != nil { + return x.Report + } + return nil +} + +type MlineChallengeOverResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data *DBMline `protobuf:"bytes,1,opt,name=data,proto3" json:"data"` //当前章节信息 +} + +func (x *MlineChallengeOverResp) Reset() { + *x = MlineChallengeOverResp{} + if protoimpl.UnsafeEnabled { + mi := &file_mline_mline_msg_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MlineChallengeOverResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MlineChallengeOverResp) ProtoMessage() {} + +func (x *MlineChallengeOverResp) ProtoReflect() protoreflect.Message { + mi := &file_mline_mline_msg_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MlineChallengeOverResp.ProtoReflect.Descriptor instead. +func (*MlineChallengeOverResp) Descriptor() ([]byte, []int) { + return file_mline_mline_msg_proto_rawDescGZIP(), []int{7} +} + +func (x *MlineChallengeOverResp) GetData() *DBMline { + if x != nil { + return x.Data + } + return nil +} + +var File_mline_mline_msg_proto protoreflect.FileDescriptor + +var file_mline_mline_msg_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x6d, 0x6c, 0x69, 0x6e, 0x65, 0x2f, 0x6d, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6d, 0x73, + 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x6d, 0x6c, 0x69, 0x6e, 0x65, 0x2f, 0x6d, + 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x62, + 0x61, 0x74, 0x74, 0x6c, 0x65, 0x2f, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x6d, 0x73, 0x67, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x27, 0x0a, 0x0f, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x47, + 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x54, 0x79, 0x70, 0x65, 0x22, + 0x30, 0x0a, 0x10, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x44, 0x42, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x39, 0x0a, 0x11, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x63, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x61, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x74, 0x61, 0x72, 0x22, 0x32, 0x0a, 0x12, + 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x08, 0x2e, 0x44, 0x42, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x57, 0x0a, 0x11, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x74, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, + 0x28, 0x0a, 0x06, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x06, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x22, 0x4f, 0x0a, 0x12, 0x4d, 0x6c, 0x69, + 0x6e, 0x65, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x1f, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x67, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x73, 0x74, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x15, 0x4d, 0x6c, + 0x69, 0x6e, 0x65, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x4f, 0x76, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x67, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x74, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, + 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x06, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x22, 0x36, 0x0a, 0x16, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x44, + 0x42, 0x4d, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x5a, 0x04, + 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_mline_mline_msg_proto_rawDescOnce sync.Once + file_mline_mline_msg_proto_rawDescData = file_mline_mline_msg_proto_rawDesc +) + +func file_mline_mline_msg_proto_rawDescGZIP() []byte { + file_mline_mline_msg_proto_rawDescOnce.Do(func() { + file_mline_mline_msg_proto_rawDescData = protoimpl.X.CompressGZIP(file_mline_mline_msg_proto_rawDescData) + }) + return file_mline_mline_msg_proto_rawDescData +} + +var file_mline_mline_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_mline_mline_msg_proto_goTypes = []interface{}{ + (*MlineGetListReq)(nil), // 0: MlineGetListReq + (*MlineGetListResp)(nil), // 1: MlineGetListResp + (*MlineGetRewardReq)(nil), // 2: MlineGetRewardReq + (*MlineGetRewardResp)(nil), // 3: MlineGetRewardResp + (*MlineChallengeReq)(nil), // 4: MlineChallengeReq + (*MlineChallengeResp)(nil), // 5: MlineChallengeResp + (*MlineChallengeOverReq)(nil), // 6: MlineChallengeOverReq + (*MlineChallengeOverResp)(nil), // 7: MlineChallengeOverResp + (*DBMline)(nil), // 8: DBMline + (*BattleFormation)(nil), // 9: BattleFormation + (*BattleInfo)(nil), // 10: BattleInfo + (*BattleReport)(nil), // 11: BattleReport +} +var file_mline_mline_msg_proto_depIdxs = []int32{ + 8, // 0: MlineGetListResp.data:type_name -> DBMline + 8, // 1: MlineGetRewardResp.data:type_name -> DBMline + 9, // 2: MlineChallengeReq.battle:type_name -> BattleFormation + 10, // 3: MlineChallengeResp.info:type_name -> BattleInfo + 11, // 4: MlineChallengeOverReq.report:type_name -> BattleReport + 8, // 5: MlineChallengeOverResp.data:type_name -> DBMline + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_mline_mline_msg_proto_init() } +func file_mline_mline_msg_proto_init() { + if File_mline_mline_msg_proto != nil { + return + } + file_mline_mline_db_proto_init() + file_battle_battle_msg_proto_init() + if !protoimpl.UnsafeEnabled { + file_mline_mline_msg_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MlineGetListReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mline_mline_msg_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MlineGetListResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mline_mline_msg_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MlineGetRewardReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mline_mline_msg_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MlineGetRewardResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mline_mline_msg_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MlineChallengeReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mline_mline_msg_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MlineChallengeResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mline_mline_msg_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MlineChallengeOverReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mline_mline_msg_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MlineChallengeOverResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_mline_mline_msg_proto_rawDesc, + NumEnums: 0, + NumMessages: 8, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_mline_mline_msg_proto_goTypes, + DependencyIndexes: file_mline_mline_msg_proto_depIdxs, + MessageInfos: file_mline_mline_msg_proto_msgTypes, + }.Build() + File_mline_mline_msg_proto = out.File + file_mline_mline_msg_proto_rawDesc = nil + file_mline_mline_msg_proto_goTypes = nil + file_mline_mline_msg_proto_depIdxs = nil +} diff --git a/sys/configure/structs/Game.OpenedCond.go b/sys/configure/structs/Game.OpenedCond.go new file mode 100644 index 000000000..ed98c2e01 --- /dev/null +++ b/sys/configure/structs/Game.OpenedCond.go @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +package cfg + +import "errors" + +type GameOpenedCond struct { + Key string + Param int32 +} + +const TypeId_GameOpenedCond = -2110428505 + +func (*GameOpenedCond) GetTypeId() int32 { + return -2110428505 +} + +func (_v *GameOpenedCond)Deserialize(_buf map[string]interface{}) (err error) { + { var _ok_ bool; if _v.Key, _ok_ = _buf["key"].(string); !_ok_ { err = errors.New("key error"); return } } + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["param"].(float64); !_ok_ { err = errors.New("param error"); return }; _v.Param = int32(_tempNum_) } + return +} + +func DeserializeGameOpenedCond(_buf map[string]interface{}) (*GameOpenedCond, error) { + v := &GameOpenedCond{} + if err := v.Deserialize(_buf); err == nil { + return v, nil + } else { + return nil, err + } +} diff --git a/sys/configure/structs/Tables.go b/sys/configure/structs/Tables.go index 774928597..d691ec869 100644 --- a/sys/configure/structs/Tables.go +++ b/sys/configure/structs/Tables.go @@ -57,7 +57,6 @@ type Tables struct { Playerlv *GamePlayerlv Facemod *GameFacemod Msgdistrib *GameMsgdistrib - TestFlow *GameTestFlow Opencond *GameOpencond Stroy *GameStroy Pagoda *GamePagoda @@ -435,12 +434,6 @@ func NewTables(loader JsonLoader) (*Tables, error) { if tables.Msgdistrib, err = NewGameMsgdistrib(buf) ; err != nil { return nil, err } - if buf, err = loader("game_testflow") ; err != nil { - return nil, err - } - if tables.TestFlow, err = NewGameTestFlow(buf) ; err != nil { - return nil, err - } if buf, err = loader("game_opencond") ; err != nil { return nil, err } diff --git a/sys/configure/structs/game.opencondData.go b/sys/configure/structs/game.opencondData.go index 3d6a2a42b..956f07f07 100644 --- a/sys/configure/structs/game.opencondData.go +++ b/sys/configure/structs/game.opencondData.go @@ -13,7 +13,7 @@ import "errors" type GameOpencondData struct { Id string Name string - Main int32 + Main []*GameOpenedCond Optional string Wkqbx int32 Kqbx int32 @@ -31,7 +31,20 @@ func (*GameOpencondData) GetTypeId() int32 { func (_v *GameOpencondData)Deserialize(_buf map[string]interface{}) (err error) { { var _ok_ bool; if _v.Id, _ok_ = _buf["id"].(string); !_ok_ { err = errors.New("id error"); return } } {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["name"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.Name error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.Name, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } } - { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["main"].(float64); !_ok_ { err = errors.New("main error"); return }; _v.Main = int32(_tempNum_) } + { + var _arr_ []interface{} + var _ok_ bool + if _arr_, _ok_ = _buf["main"].([]interface{}); !_ok_ { err = errors.New("main error"); return } + + _v.Main = make([]*GameOpenedCond, 0, len(_arr_)) + + for _, _e_ := range _arr_ { + var _list_v_ *GameOpenedCond + { var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameOpenedCond(_x_); err != nil { return } } + _v.Main = append(_v.Main, _list_v_) + } + } + { var _ok_ bool; if _v.Optional, _ok_ = _buf["optional"].(string); !_ok_ { err = errors.New("optional error"); return } } { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["wkqbx"].(float64); !_ok_ { err = errors.New("wkqbx error"); return }; _v.Wkqbx = int32(_tempNum_) } { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["kqbx"].(float64); !_ok_ { err = errors.New("kqbx error"); return }; _v.Kqbx = int32(_tempNum_) }