diff --git a/bin/json/game_consumehero.json b/bin/json/game_consumehero.json index 2a1b5d583..070827c4f 100644 --- a/bin/json/game_consumehero.json +++ b/bin/json/game_consumehero.json @@ -8,7 +8,12 @@ "text": "酒吧新人" }, "hero": 33003, + "iconimg": "xxtx_js_33003", "img": "tx_js_33003", + "name": { + "key": "consume_consume_hero_name_01", + "text": "胡德" + }, "intr": { "key": "consume_consume_hero_intr_01", "text": "胡德的毒苹果酒吧桌游卡" @@ -21,6 +26,7 @@ "key": "consume_consume_hero_skilltxt_01", "text": "随机消除7个方块" }, + "get": 107, "consume": [], "skilltype": 1, "skillload": 6, @@ -45,7 +51,12 @@ "text": "酒吧新人" }, "hero": 44003, + "iconimg": "xxtx_js_44003", "img": "tx_js_44003", + "name": { + "key": "consume_consume_hero_name_02", + "text": "匹诺曹" + }, "intr": { "key": "consume_consume_hero_intr_02", "text": "匹诺曹的毒苹果酒吧桌游卡" @@ -58,6 +69,7 @@ "key": "consume_consume_hero_skilltxt_02", "text": "消除中间的一列宝石" }, + "get": 107, "consume": [], "skilltype": 1, "skillload": 7, @@ -82,7 +94,12 @@ "text": "酒吧新人" }, "hero": 43004, + "iconimg": "xxtx_js_43004", "img": "tx_js_43004", + "name": { + "key": "consume_consume_hero_name_03", + "text": "姜饼人" + }, "intr": { "key": "consume_consume_hero_intr_03", "text": "姜饼人的毒苹果酒吧桌游卡" @@ -95,6 +112,7 @@ "key": "consume_consume_hero_skilltxt_03", "text": "将随机6个宝石染成当前盘面上颜色最多的宝石" }, + "get": 107, "consume": [], "skilltype": 1, "skillload": 7, @@ -119,7 +137,12 @@ "text": "老手" }, "hero": 13004, + "iconimg": "xxtx_js_13004", "img": "tx_js_13004", + "name": { + "key": "consume_consume_hero_name_04", + "text": "法夸德勋爵" + }, "intr": { "key": "consume_consume_hero_intr_04", "text": "法夸德勋爵的毒苹果酒吧桌游卡" @@ -132,6 +155,7 @@ "key": "consume_consume_hero_skilltxt_04", "text": "选中一个方块,消除以该方块为中心,两条斜线上的所有方块(选中的方块也会被消除)。" }, + "get": 107, "consume": [ { "a": "attr", @@ -162,7 +186,12 @@ "text": "老手" }, "hero": 13005, + "iconimg": "xxtx_js_13005", "img": "tx_js_13005", + "name": { + "key": "consume_consume_hero_name_05", + "text": "大大" + }, "intr": { "key": "consume_consume_hero_intr_05", "text": "大大的毒苹果酒吧桌游卡" @@ -175,6 +204,7 @@ "key": "consume_consume_hero_skilltxt_05", "text": "随机用炸弹代替一个方块,并直接引爆炸弹(炸弹是特殊方块,这里就是用炸弹代替,然后直接消掉该炸弹)。" }, + "get": 107, "consume": [ { "a": "attr", @@ -205,7 +235,12 @@ "text": "老手" }, "hero": 15002, + "iconimg": "xxtx_js_15002", "img": "tx_js_15002", + "name": { + "key": "consume_consume_hero_name_06", + "text": "船长" + }, "intr": { "key": "consume_consume_hero_intr_06", "text": "船长的毒苹果酒吧桌游卡" @@ -218,6 +253,7 @@ "key": "consume_consume_hero_skilltxt_06", "text": "指定盘面上2中颜色最多的方块,将其中一种颜色全部集中到右方,另一种全部集中到左方,然后执行消除。" }, + "get": 107, "consume": [ { "a": "attr", @@ -248,7 +284,12 @@ "text": "老手" }, "hero": 24001, + "iconimg": "xxtx_js_24001", "img": "tx_js_24001", + "name": { + "key": "consume_consume_hero_name_07", + "text": "警长" + }, "intr": { "key": "consume_consume_hero_intr_07", "text": "警长的毒苹果酒吧桌游卡" @@ -261,6 +302,7 @@ "key": "consume_consume_hero_skilltxt_07", "text": "使用技能后,玩家下一次行动不会消耗步骤,如果下一次行动消除了一组方块,那么会直接消除该组方块左右三行/三列区域内的所有方块。" }, + "get": 107, "consume": [ { "a": "attr", @@ -291,7 +333,12 @@ "text": "靠谱的家伙" }, "hero": 25001, + "iconimg": "xxtx_js_25001", "img": "tx_js_25001", + "name": { + "key": "consume_consume_hero_name_08", + "text": "阿宝" + }, "intr": { "key": "consume_consume_hero_intr_08", "text": "阿宝的毒苹果酒吧桌游卡" @@ -304,6 +351,7 @@ "key": "consume_consume_hero_skilltxt_08", "text": "随机选择2中颜色,然后消除盘面上所有对应颜色的方块" }, + "get": 107, "consume": [ { "a": "attr", @@ -334,7 +382,12 @@ "text": "靠谱的家伙" }, "hero": 35001, + "iconimg": "xxtx_js_35001", "img": "tx_js_35001", + "name": { + "key": "consume_consume_hero_name_09", + "text": "师父" + }, "intr": { "key": "consume_consume_hero_intr_09", "text": "师父的毒苹果酒吧桌游卡" @@ -347,6 +400,7 @@ "key": "consume_consume_hero_skilltxt_09", "text": "选择一种颜色,所有对应颜色的棋子随机变成象棋里的马,像,士,并按照对应的象棋规则走3次,被该方块踩中的方块消除,然后对应方块也消除。" }, + "get": 107, "consume": [ { "a": "attr", @@ -377,7 +431,12 @@ "text": "靠谱的家伙" }, "hero": 44004, + "iconimg": "xxtx_js_44004", "img": "tx_js_44004", + "name": { + "key": "consume_consume_hero_name_10", + "text": "骇客蛛" + }, "intr": { "key": "consume_consume_hero_intr_10", "text": "骇客蛛的毒苹果酒吧桌游卡" @@ -390,6 +449,7 @@ "key": "consume_consume_hero_skilltxt_10", "text": "选中不相连的3列,一起向左/向右复制这3列的宝石(覆盖原方块)" }, + "get": 107, "consume": [ { "a": "attr", @@ -420,7 +480,12 @@ "text": "靠谱的家伙" }, "hero": 44006, + "iconimg": "xxtx_js_44006", "img": "tx_js_44006", + "name": { + "key": "consume_consume_hero_name_11", + "text": "悍娇虎" + }, "intr": { "key": "consume_consume_hero_intr_11", "text": "悍娇虎的毒苹果酒吧桌游卡" @@ -433,6 +498,7 @@ "key": "consume_consume_hero_skilltxt_11", "text": "选中一个方块,然后消除盘面上所有相同颜色的方块。" }, + "get": 107, "consume": [ { "a": "attr", @@ -463,7 +529,12 @@ "text": "身怀绝技之人" }, "hero": 45003, + "iconimg": "xxtx_js_45003", "img": "tx_js_45003", + "name": { + "key": "consume_consume_hero_name_12", + "text": "盖" + }, "intr": { "key": "consume_consume_hero_intr_12", "text": "盖的毒苹果酒吧桌游卡" @@ -476,6 +547,7 @@ "key": "consume_consume_hero_skilltxt_12", "text": "随机将盘面内8个方块变为“烟火”,并从消除通过该技能生成的4个烟火。" }, + "get": 107, "consume": [ { "a": "attr", @@ -506,7 +578,12 @@ "text": "身怀绝技之人" }, "hero": 34007, + "iconimg": "xxtx_js_34007", "img": "tx_js_34007", + "name": { + "key": "consume_consume_hero_name_13", + "text": "菲奥娜" + }, "intr": { "key": "consume_consume_hero_intr_13", "text": "菲奥娜的毒苹果酒吧桌游卡" @@ -519,6 +596,7 @@ "key": "consume_consume_hero_skilltxt_13", "text": "随机标记三个处于最左边的方块,然后消除这三个方块所在的三行的所有方块。" }, + "get": 107, "consume": [ { "a": "attr", @@ -549,7 +627,12 @@ "text": "身怀绝技之人" }, "hero": 45004, + "iconimg": "xxtx_js_45004", "img": "tx_js_45004", + "name": { + "key": "consume_consume_hero_name_14", + "text": "穿靴子的猫" + }, "intr": { "key": "consume_consume_hero_intr_14", "text": "穿靴子的猫的毒苹果酒吧桌游卡" @@ -562,6 +645,7 @@ "key": "consume_consume_hero_skilltxt_14", "text": "选中一个方块,然后消除改方块行列上的所有宝石。" }, + "get": 107, "consume": [ { "a": "attr", @@ -592,7 +676,12 @@ "text": "传奇牌手!" }, "hero": 45001, + "iconimg": "xxtx_js_45001", "img": "tx_js_45001", + "name": { + "key": "consume_consume_hero_name_15", + "text": "乌龟大师" + }, "intr": { "key": "consume_consume_hero_intr_15", "text": "乌龟大师的毒苹果酒吧桌游卡" @@ -605,6 +694,7 @@ "key": "consume_consume_hero_skilltxt_15", "text": "选择一种宝石颜色,场内所有对应颜色左右上下的宝石均变成改颜色。" }, + "get": 107, "consume": [ { "a": "attr", @@ -635,7 +725,12 @@ "text": "传奇牌手!" }, "hero": 34006, + "iconimg": "xxtx_js_34006", "img": "tx_js_34006", + "name": { + "key": "consume_consume_hero_name_16", + "text": "冰霜杰克" + }, "intr": { "key": "consume_consume_hero_intr_16", "text": "冰霜杰克的毒苹果酒吧桌游卡" @@ -648,6 +743,7 @@ "key": "consume_consume_hero_skilltxt_16", "text": "随机选中一种颜色的宝石首尾相连,连线路上的宝石也变成该颜色,然后随机引爆一个泥巴方块。" }, + "get": 107, "consume": [ { "a": "attr", @@ -678,7 +774,12 @@ "text": "传奇牌手!" }, "hero": 35003, + "iconimg": "xxtx_js_35003", "img": "tx_js_35003", + "name": { + "key": "consume_consume_hero_name_17", + "text": "漆黑" + }, "intr": { "key": "consume_consume_hero_intr_17", "text": "漆黑的毒苹果酒吧桌游卡" @@ -691,6 +792,7 @@ "key": "consume_consume_hero_skilltxt_17", "text": "随机选中棋盘内的一种颜色,将该颜色方块随机变成另一种颜色,然后执行一次消除,然后再执行一次该逻辑(变2次,消除2次)。" }, + "get": 107, "consume": [ { "a": "attr", diff --git a/bin/json/game_dragonlvitem.json b/bin/json/game_dragonlvitem.json index 11465803e..add91c452 100644 --- a/bin/json/game_dragonlvitem.json +++ b/bin/json/game_dragonlvitem.json @@ -1,297 +1,371 @@ [ { "key": 1, - "attribute": "stime", + "id": "20030001", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 1, - "num": 0, + "num": [], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 2, - "attribute": "stime", + "id": "20030001", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 2, - "num": 2, + "num": [ + 2, + 2, + 2, + 2, + 2 + ], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 3, - "attribute": "stime", + "id": "20030001", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 3, - "num": 4, + "num": [ + 4, + 4, + 4, + 4, + 4 + ], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 4, - "attribute": "stime", + "id": "20030001", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 4, - "num": 6, + "num": [ + 6, + 6, + 6, + 6, + 6 + ], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 5, - "attribute": "stime", + "id": "20030001", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 5, - "num": 8, - "item": [] + "num": [ + 8, + 8, + 8, + 8, + 8 + ], + "item": [], + "uplv": 0 }, { "key": 6, - "attribute": "hp", + "id": "20030002", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 1, - "num": 0, + "num": [], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 7, - "attribute": "hp", + "id": "20030002", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 2, - "num": 2, + "num": [ + 2, + 2, + 2, + 2, + 2 + ], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 8, - "attribute": "hp", + "id": "20030002", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 3, - "num": 4, + "num": [ + 4, + 4, + 4, + 4, + 4 + ], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 9, - "attribute": "hp", + "id": "20030002", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 4, - "num": 6, + "num": [ + 6, + 6, + 6, + 6, + 6 + ], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 10, - "attribute": "hp", + "id": "20030002", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 5, - "num": 8, - "item": [] + "num": [ + 8, + 8, + 8, + 8, + 8 + ], + "item": [], + "uplv": 0 }, { "key": 11, - "attribute": "sprinttime", + "id": "20030003", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 1, - "num": 0, + "num": [], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 12, - "attribute": "sprinttime", + "id": "20030003", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 2, - "num": 2, + "num": [ + 2, + 2, + 2, + 2, + 2 + ], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 13, - "attribute": "sprinttime", + "id": "20030003", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 3, - "num": 4, + "num": [ + 4, + 4, + 4, + 4, + 4 + ], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 14, - "attribute": "sprinttime", + "id": "20030003", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 4, - "num": 6, + "num": [ + 6, + 6, + 6, + 6, + 6 + ], "item": [ { "a": "attr", "t": "gold", "n": 10000 } - ] + ], + "uplv": 0 }, { "key": 15, - "attribute": "sprinttime", + "id": "20030003", + "attribute": [ + "stime", + "hp", + "sprinttime", + "energyrecover", + "etime" + ], "lv": 5, - "num": 8, - "item": [] - }, - { - "key": 16, - "attribute": "energyrecover", - "lv": 1, - "num": 0, - "item": [ - { - "a": "attr", - "t": "gold", - "n": 10000 - } - ] - }, - { - "key": 17, - "attribute": "energyrecover", - "lv": 2, - "num": 2, - "item": [ - { - "a": "attr", - "t": "gold", - "n": 10000 - } - ] - }, - { - "key": 18, - "attribute": "energyrecover", - "lv": 3, - "num": 4, - "item": [ - { - "a": "attr", - "t": "gold", - "n": 10000 - } - ] - }, - { - "key": 19, - "attribute": "energyrecover", - "lv": 4, - "num": 6, - "item": [ - { - "a": "attr", - "t": "gold", - "n": 10000 - } - ] - }, - { - "key": 20, - "attribute": "energyrecover", - "lv": 5, - "num": 8, - "item": [] - }, - { - "key": 21, - "attribute": "etime", - "lv": 1, - "num": 0, - "item": [ - { - "a": "attr", - "t": "gold", - "n": 10000 - } - ] - }, - { - "key": 22, - "attribute": "etime", - "lv": 2, - "num": 2, - "item": [ - { - "a": "attr", - "t": "gold", - "n": 10000 - } - ] - }, - { - "key": 23, - "attribute": "etime", - "lv": 3, - "num": 4, - "item": [ - { - "a": "attr", - "t": "gold", - "n": 10000 - } - ] - }, - { - "key": 24, - "attribute": "etime", - "lv": 4, - "num": 6, - "item": [ - { - "a": "attr", - "t": "gold", - "n": 10000 - } - ] - }, - { - "key": 25, - "attribute": "etime", - "lv": 5, - "num": 8, - "item": [] + "num": [ + 8, + 8, + 8, + 8, + 8 + ], + "item": [], + "uplv": 0 } ] \ No newline at end of file diff --git a/bin/json/game_skillafteratk.json b/bin/json/game_skillafteratk.json index fdae32c41..410d42a27 100644 --- a/bin/json/game_skillafteratk.json +++ b/bin/json/game_skillafteratk.json @@ -3440,7 +3440,7 @@ "Order": "", "Limit": 1, "ExecuteCnt": 1, - "TriggerAnim": "", + "TriggerAnim": "Passive", "Type": 3, "Argu": [ 390001209, @@ -7240,7 +7240,7 @@ "Order": "", "Limit": 1, "ExecuteCnt": 1, - "TriggerAnim": "", + "TriggerAnim": "Passive", "Type": 8, "Argu": [ 1, @@ -10712,7 +10712,7 @@ "Order": "", "Limit": 10, "ExecuteCnt": 1, - "TriggerAnim": "", + "TriggerAnim": "Passive", "Type": 32, "Argu": [ 150 @@ -33066,7 +33066,7 @@ "Order": "", "Limit": 10, "ExecuteCnt": 1, - "TriggerAnim": "", + "TriggerAnim": "Buff", "Type": 3, "Argu": [ 391000107, @@ -35697,7 +35697,7 @@ "Order": "", "Limit": 10, "ExecuteCnt": 1, - "TriggerAnim": "", + "TriggerAnim": "Passive", "Type": 8, "Argu": [ 1, @@ -38632,7 +38632,7 @@ "Order": "HasBuffDown=3", "Limit": 1, "ExecuteCnt": 1, - "TriggerAnim": "", + "TriggerAnim": "Passive", "Type": 8, "Argu": [ 3, @@ -40328,7 +40328,7 @@ "Order": "", "Limit": 10, "ExecuteCnt": 1, - "TriggerAnim": "", + "TriggerAnim": "Passive", "Type": 8, "Argu": [ 1, diff --git a/modules/caravan/model_caravan.go b/modules/caravan/model_caravan.go index 3c899d979..8a18b2ac0 100644 --- a/modules/caravan/model_caravan.go +++ b/modules/caravan/model_caravan.go @@ -21,6 +21,7 @@ type modelCaravan struct { module *Caravan } +// 本服模块 func (this *modelCaravan) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.TableName = string(comm.TableCaravan) err = this.MCompModel.Init(service, module, comp, options) diff --git a/modules/dragon/api_lvitem.go b/modules/dragon/api_lvitem.go index 6d93ab296..2085ceba6 100644 --- a/modules/dragon/api_lvitem.go +++ b/modules/dragon/api_lvitem.go @@ -58,11 +58,9 @@ func (this *apiComp) LvItem(session comm.IUserSession, req *pb.DragonLvItemReq) } return } - if _, ok := dragon.Lvitem[req.Attribute]; !ok { // 默认1级 - dragon.Lvitem[req.Attribute] = 1 - } - if curLvConf, err = this.module.configure.GetDragonLvItemConf(req.Attribute, dragon.Lvitem[req.Attribute]); err == nil { - if upLvConf, err = this.module.configure.GetDragonLvItemConf(req.Attribute, dragon.Lvitem[req.Attribute]+1); err != nil { + + if curLvConf, err = this.module.configure.GetDragonLvItemConf(req.Attribute, dragon.Itemlv); err == nil { + if upLvConf, err = this.module.configure.GetDragonLvItemConf(req.Attribute, dragon.Itemlv+1); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DragonMaxLvItem, Title: pb.ErrorCode_DragonMaxLvItem.ToString(), @@ -73,9 +71,12 @@ func (this *apiComp) LvItem(session comm.IUserSession, req *pb.DragonLvItemReq) if errdata = this.module.CheckRes(session, curLvConf.Item); errdata != nil { // 校验消耗 return } - dragon.Lvitem[req.Attribute] += 1 // 升级 - update["lvitem"] = dragon.Lvitem - dragon.Property[req.Attribute] += upLvConf.Num + dragon.Itemlv += 1 // 升级 + update["lvitem"] = dragon.Itemlv + for pos, v := range upLvConf.Attribute { + dragon.Property[v] += upLvConf.Num[pos] + } + update["property"] = dragon.Property } diff --git a/modules/dragon/configure_comp.go b/modules/dragon/configure_comp.go index 3b5fec648..b4f12f316 100644 --- a/modules/dragon/configure_comp.go +++ b/modules/dragon/configure_comp.go @@ -24,13 +24,12 @@ const ( // /配置管理组件 type configureComp struct { modules.MCompConfigure - module *Dragon - hlock sync.RWMutex - dragon map[string]*cfg.GameTrainlvData - play map[string]*cfg.GameDragonPlayData - mount map[string]*cfg.GameBuzkashiMountData - lvItem map[string]*cfg.GameDragonLvItemData - attribute map[string]struct{} + module *Dragon + hlock sync.RWMutex + dragon map[string]*cfg.GameTrainlvData + play map[string]*cfg.GameDragonPlayData + mount map[string]*cfg.GameBuzkashiMountData + lvItem map[string]*cfg.GameDragonLvItemData } // 组件初始化接口 @@ -154,14 +153,11 @@ func (this *configureComp) LoadDragonLvItem() { if v, err := this.GetConfigure(game_dragonlvitem); err == nil { this.hlock.Lock() defer this.hlock.Unlock() - this.attribute = make(map[string]struct{}, 0) this.lvItem = make(map[string]*cfg.GameDragonLvItemData) if _configure, ok := v.(*cfg.GameDragonLvItem); ok { for _, v := range _configure.GetDataList() { - this.lvItem[v.Attribute+"-"+strconv.Itoa(int(v.Lv))] = v - if _, ok := this.attribute[v.Attribute]; !ok { - this.attribute[v.Attribute] = struct{}{} - } + key := v.Id + "-" + strconv.Itoa(int(v.Lv)) + this.lvItem[key] = v } return } @@ -170,21 +166,14 @@ func (this *configureComp) LoadDragonLvItem() { } } -func (this *configureComp) GetDragonLvItemConf(attribute string, lv int32) (conf *cfg.GameDragonLvItemData, err error) { - key := attribute + "-" + strconv.Itoa(int(lv)) +func (this *configureComp) GetDragonLvItemConf(dragonId string, lv int32) (conf *cfg.GameDragonLvItemData, err error) { + key := dragonId + "-" + strconv.Itoa(int(lv)) this.hlock.RLock() defer this.hlock.RUnlock() ok := false if conf, ok = this.lvItem[key]; ok { return } - err = comm.NewNotFoundConfErr(moduleName, dragon_trainlv, fmt.Sprintf("id:%s,lv:%d", attribute, lv)) + err = comm.NewNotFoundConfErr(moduleName, dragon_trainlv, fmt.Sprintf("id:%s,lv:%d", dragonId, lv)) return } - -func (this *configureComp) GetDragonAttributeConf() (conf map[string]struct{}) { - - this.hlock.RLock() - defer this.hlock.RUnlock() - return this.attribute -} diff --git a/modules/dragon/model_dragon.go b/modules/dragon/model_dragon.go index 623cb4d7b..0538ad256 100644 --- a/modules/dragon/model_dragon.go +++ b/modules/dragon/model_dragon.go @@ -88,6 +88,7 @@ func (this *ModelDragon) CreateDragon(session comm.IUserSession, dragons map[str Play: map[int32]*pb.PlayData{}, Rtime: configure.Now().Unix(), Lvitem: map[string]int32{}, + Itemlv: 1, } for _, obj := range dragonList { if obj.Dragonid == dragonCfgId { // 重复获得 直接返回 @@ -121,10 +122,6 @@ func (this *ModelDragon) CreateDragon(session comm.IUserSession, dragons map[str } } - for k := range this.module.configure.GetDragonAttributeConf() { - dragon.Lvitem[k] = 1 - } - if bNewDragon { if dbModel != nil { err = dbModel.AddList(uid, dragon.Id, dragon) @@ -200,8 +197,19 @@ func (this *ModelDragon) UpdateDragonData(uid string, oid string, data map[strin func (this *ModelDragon) GetDragonByOid(uid string, oid string) (dragon *pb.DBDragon, err error) { dragon = &pb.DBDragon{} - if err = this.GetListObj(uid, oid, dragon); err != nil { - this.module.Errorf("err:%v", err) + if db.IsCross() { + if dbModel, err1 := this.module.GetDBModelByUid(uid, this.TableName); err1 == nil { + if err = dbModel.GetListObj(uid, oid, dragon); err != nil { + this.module.Errorf("err:%v", err) + } + } else { + this.module.Errorln(err) // 获取跨服对象失败 + return + } + } else { + if err = this.GetListObj(uid, oid, dragon); err != nil { + this.module.Errorf("err:%v", err) + } } return } diff --git a/modules/dragon/module.go b/modules/dragon/module.go index 23fe2f4fd..656ae65f5 100644 --- a/modules/dragon/module.go +++ b/modules/dragon/module.go @@ -80,6 +80,7 @@ func (this *Dragon) CreateRobotDragon(dragonid string, lv int32) (dragon *pb.DBD Exp: 0, Property: map[string]int32{}, Play: map[int32]*pb.PlayData{}, + Lvitem: map[string]int32{}, Rtime: configure.Now().Unix(), } diff --git a/modules/entertainment/configure.go b/modules/entertainment/configure.go index 5db9cde93..420e79c0c 100644 --- a/modules/entertainment/configure.go +++ b/modules/entertainment/configure.go @@ -51,7 +51,6 @@ func (this *configureComp) Init(service core.IService, module core.IModule, comp configure.RegisterConfigure(game_passcheck, cfg.NewGamePassCheck, this.updatePassCheck) configure.RegisterConfigure(game_consumeIntegral, cfg.NewGameConsumeIntegral, this.loadConsumeIntegral) - this.GetConsumeResetIntegral() return } diff --git a/modules/entertainment/model.go b/modules/entertainment/model.go index c7495acfa..38cd6b125 100644 --- a/modules/entertainment/model.go +++ b/modules/entertainment/model.go @@ -43,16 +43,14 @@ func (this *modelComp) queryPlayers(uIds []string) (result []*pb.DBXXLData, err func (this *modelComp) getEntertainmList(uid string) (result *pb.DBXXLData, err error) { var ( - conn *db.DBConn dbModel *db.DBModel ) if db.IsCross() { dbModel = this.DBModel } else { - if conn, err = db.Cross(); err != nil { + if dbModel, err = this.module.GetCrossDBModel(this.TableName); err != nil { return } - dbModel = db.NewDBModelByExpired(db.CrossTag(), this.TableName, conn) } result = &pb.DBXXLData{ @@ -104,17 +102,15 @@ func (this *modelComp) getEntertainmList(uid string) (result *pb.DBXXLData, err //支持本服数据变更操作 func (this *modelComp) modifyEntertainmList(uid string, data map[string]interface{}) error { var ( - conn *db.DBConn dbModel *db.DBModel err error ) if db.IsCross() { dbModel = this.DBModel } else { - if conn, err = db.Cross(); err != nil { + if dbModel, err = this.module.GetCrossDBModel(this.TableName); err != nil { return err } - dbModel = db.NewDBModelByExpired(db.CrossTag(), this.TableName, conn) } return dbModel.Change(uid, data) } diff --git a/modules/entertainment/modelrank.go b/modules/entertainment/modelrank.go index bc3efe361..d454d33ba 100644 --- a/modules/entertainment/modelrank.go +++ b/modules/entertainment/modelrank.go @@ -29,12 +29,13 @@ func (this *modelRank) Init(service core.IService, module core.IModule, comp cor // 更新排名 func (this *modelRank) updateXxlRank(users ...*pb.XxlPlayer) (err error) { var ( - pipe *pipe.RedisPipe = this.DBModel.Redis.RedisPipe(context.TODO()) - menbers []*redis.Z - cmd *redis.IntCmd - menbersCmd []*redis.IntCmd = make([]*redis.IntCmd, len(users)) - rank int64 + pipe *pipe.RedisPipe = this.DBModel.Redis.RedisPipe(context.TODO()) + menbers []*redis.Z + cmd *redis.IntCmd + + strName string ) + strName = fmt.Sprintf("%s-%s", this.DBModel.ServiceId, this.TableName) if len(users) == 0 { return } @@ -42,12 +43,9 @@ func (this *modelRank) updateXxlRank(users ...*pb.XxlPlayer) (err error) { for i, v := range users { menbers[i] = &redis.Z{Score: float64(v.Consumeexp), Member: v.Uinfo.Uid} } - if cmd = pipe.ZAdd(this.TableName, menbers...); err != nil { + if cmd = pipe.ZAdd(strName, menbers...); err != nil { this.module.Errorln(err) } - for i, v := range users { - menbersCmd[i] = pipe.ZRevRank(this.TableName, v.Uinfo.Uid) - } if _, err = pipe.Exec(); err != nil { this.module.Errorln(err) return @@ -56,22 +54,17 @@ func (this *modelRank) updateXxlRank(users ...*pb.XxlPlayer) (err error) { this.module.Errorln(err) return } - for i, v := range menbersCmd { - if rank, err = v.Result(); err != nil { - this.module.Errorln(err) - return - } - users[i].Rank = int32(rank + 1) - } return } // 获取排行榜前50的用户名单 func (this *modelRank) queryRankUser() (ranks []string, err error) { var ( - result []string + result []string + strName string ) - if result, err = this.DBModel.Redis.ZRevRange(fmt.Sprintf("%s-%s", this.DBModel.ServiceId, this.TableName), 0, 50).Result(); err != nil { + strName = fmt.Sprintf("%s-%s", this.DBModel.ServiceId, this.TableName) + if result, err = this.DBModel.Redis.ZRevRange(strName, 0, comm.MaxRankList).Result(); err != nil { this.module.Errorln(err) return } diff --git a/modules/user/model_user.go b/modules/user/model_user.go index ac9fd6c9f..1d03025d7 100644 --- a/modules/user/model_user.go +++ b/modules/user/model_user.go @@ -310,7 +310,6 @@ func (this *ModelUser) changelv(session comm.IUserSession, lv int32, exp int64, } func (this *ModelUser) CleanUserMerchantmoney(session comm.IUserSession) (err error) { - // 获取本服的数据 if m, e := this.module.GetDBModelByUid(session.GetUserId(), this.TableName); e == nil { user := &pb.DBUser{} diff --git a/pb/dragon_db.pb.go b/pb/dragon_db.pb.go index 4b8da752e..4d2f057cc 100644 --- a/pb/dragon_db.pb.go +++ b/pb/dragon_db.pb.go @@ -88,7 +88,8 @@ type DBDragon struct { Property map[string]int32 `protobuf:"bytes,6,rep,name=property,proto3" json:"property" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 坐骑属性 Play map[int32]*PlayData `protobuf:"bytes,7,rep,name=play,proto3" json:"play" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // 坐骑训练次数 Rtime int64 `protobuf:"varint,8,opt,name=rtime,proto3" json:"rtime"` // 刷新时间 用来清除 每日训练次数 - Lvitem map[string]int32 `protobuf:"bytes,9,rep,name=lvitem,proto3" json:"lvitem" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // + Lvitem map[string]int32 `protobuf:"bytes,9,rep,name=lvitem,proto3" json:"lvitem" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 等前端同步删除此字段 + Itemlv int32 `protobuf:"varint,10,opt,name=itemlv,proto3" json:"itemlv"` // 道具提升等级 } func (x *DBDragon) Reset() { @@ -186,6 +187,13 @@ func (x *DBDragon) GetLvitem() map[string]int32 { return nil } +func (x *DBDragon) GetItemlv() int32 { + if x != nil { + return x.Itemlv + } + return 0 +} + var File_dragon_dragon_db_proto protoreflect.FileDescriptor var file_dragon_dragon_db_proto_rawDesc = []byte{ @@ -194,7 +202,7 @@ var file_dragon_dragon_db_proto_rawDesc = []byte{ 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x64, 0x65, 0x6e, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, - 0x64, 0x65, 0x6e, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xc9, 0x03, 0x0a, 0x08, 0x44, 0x42, 0x44, + 0x64, 0x65, 0x6e, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xe1, 0x03, 0x0a, 0x08, 0x44, 0x42, 0x44, 0x72, 0x61, 0x67, 0x6f, 0x6e, 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, 0x1a, 0x0a, 0x08, 0x64, 0x72, 0x61, 0x67, 0x6f, @@ -211,20 +219,21 @@ var file_dragon_dragon_db_proto_rawDesc = []byte{ 0x28, 0x03, 0x52, 0x05, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x6c, 0x76, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x44, 0x42, 0x44, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x2e, 0x4c, 0x76, 0x69, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x06, 0x6c, 0x76, 0x69, 0x74, 0x65, 0x6d, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 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, 0x42, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x76, 0x69, - 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 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, + 0x52, 0x06, 0x6c, 0x76, 0x69, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x74, 0x65, 0x6d, + 0x6c, 0x76, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x6c, 0x76, + 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 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, 0x42, 0x0a, + 0x09, 0x50, 0x6c, 0x61, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x50, 0x6c, + 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x76, 0x69, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 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 ( diff --git a/sys/configure/structs/Game.ConsumeHeroData.go b/sys/configure/structs/Game.ConsumeHeroData.go index 17279a359..ea62be227 100644 --- a/sys/configure/structs/Game.ConsumeHeroData.go +++ b/sys/configure/structs/Game.ConsumeHeroData.go @@ -16,10 +16,13 @@ type GameConsumeHeroData struct { Herocolor int32 Herotitel string Hero int32 + Iconimg string Img string + Name string Intr string Skillname string Skilltxt string + Get int32 Consume []*Gameatn Skilltype int32 Skillload int32 @@ -40,10 +43,13 @@ func (_v *GameConsumeHeroData)Deserialize(_buf map[string]interface{}) (err erro { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["herocolor"].(float64); !_ok_ { err = errors.New("herocolor error"); return }; _v.Herocolor = int32(_tempNum_) } {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["herotitel"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.Herotitel error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.Herotitel, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } } { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["hero"].(float64); !_ok_ { err = errors.New("hero error"); return }; _v.Hero = int32(_tempNum_) } + { var _ok_ bool; if _v.Iconimg, _ok_ = _buf["iconimg"].(string); !_ok_ { err = errors.New("iconimg error"); return } } { var _ok_ bool; if _v.Img, _ok_ = _buf["img"].(string); !_ok_ { err = errors.New("img 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 __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["intr"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.Intr error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.Intr, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } } {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["skillname"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.Skillname error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.Skillname, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } } {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["skilltxt"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.Skilltxt error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.Skilltxt, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } } + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["get"].(float64); !_ok_ { err = errors.New("get error"); return }; _v.Get = int32(_tempNum_) } { var _arr_ []interface{} var _ok_ bool diff --git a/sys/configure/structs/Game.DragonLvItemData.go b/sys/configure/structs/Game.DragonLvItemData.go index 04c11611e..be8c70f0d 100644 --- a/sys/configure/structs/Game.DragonLvItemData.go +++ b/sys/configure/structs/Game.DragonLvItemData.go @@ -12,10 +12,12 @@ import "errors" type GameDragonLvItemData struct { Key int32 - Attribute string + Id string + Attribute []string Lv int32 - Num int32 + Num []int32 Item []*Gameatn + Uplv int32 } const TypeId_GameDragonLvItemData = -767946250 @@ -26,9 +28,36 @@ func (*GameDragonLvItemData) GetTypeId() int32 { func (_v *GameDragonLvItemData)Deserialize(_buf map[string]interface{}) (err error) { { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["key"].(float64); !_ok_ { err = errors.New("key error"); return }; _v.Key = int32(_tempNum_) } - { var _ok_ bool; if _v.Attribute, _ok_ = _buf["attribute"].(string); !_ok_ { err = errors.New("attribute error"); return } } + { var _ok_ bool; if _v.Id, _ok_ = _buf["id"].(string); !_ok_ { err = errors.New("id error"); return } } + { + var _arr_ []interface{} + var _ok_ bool + if _arr_, _ok_ = _buf["attribute"].([]interface{}); !_ok_ { err = errors.New("attribute error"); return } + + _v.Attribute = make([]string, 0, len(_arr_)) + + for _, _e_ := range _arr_ { + var _list_v_ string + { if _list_v_, _ok_ = _e_.(string); !_ok_ { err = errors.New("_list_v_ error"); return } } + _v.Attribute = append(_v.Attribute, _list_v_) + } + } + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["lv"].(float64); !_ok_ { err = errors.New("lv error"); return }; _v.Lv = int32(_tempNum_) } - { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["num"].(float64); !_ok_ { err = errors.New("num error"); return }; _v.Num = int32(_tempNum_) } + { + var _arr_ []interface{} + var _ok_ bool + if _arr_, _ok_ = _buf["num"].([]interface{}); !_ok_ { err = errors.New("num error"); return } + + _v.Num = make([]int32, 0, len(_arr_)) + + for _, _e_ := range _arr_ { + var _list_v_ int32 + { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) } + _v.Num = append(_v.Num, _list_v_) + } + } + { var _arr_ []interface{} var _ok_ bool @@ -43,6 +72,7 @@ func (_v *GameDragonLvItemData)Deserialize(_buf map[string]interface{}) (err err } } + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["uplv"].(float64); !_ok_ { err = errors.New("uplv error"); return }; _v.Uplv = int32(_tempNum_) } return }