diff --git a/controllers/cardholder.go b/controllers/cardholder.go index 6dc74b5..10d9d48 100644 --- a/controllers/cardholder.go +++ b/controllers/cardholder.go @@ -57,3 +57,15 @@ func (c *CardHolderController) ShopExchange() { c.RetRspCodeData(code, rsp) } + +// AutoExchangeInfo 上期剩余星星自动兑换信息 +func (c *CardHolderController) AutoExchangeInfo() { + req := new(models.ReqAutoExchangeInfo) + if !c.GetPostData(req) { + return + } + + code, rsp := cardholder.HandleAutoExchangeInfo(req) + + c.RetRspCodeData(code, rsp) +} diff --git a/dto/cardholder.go b/dto/cardholder.go index faf209e..e5f65a7 100644 --- a/dto/cardholder.go +++ b/dto/cardholder.go @@ -26,6 +26,8 @@ type CardHolderDataDetails struct { CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度 Round int // 卡册当前轮次 StarCount int // 星星点数 + LastStarCount int // 上期活动剩余星星点数 + AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表 } func NewCardHolderData(uid int64) *CardHolderData { @@ -44,6 +46,8 @@ func NewCardHolderDataDetails() *CardHolderDataDetails { StarSequenceScales: make(map[string]int), CardSequenceScales: make(map[string]int), Round: 1, + StarCount: 0, + AutoExchangeHolder: make([]int, 0), } } diff --git a/go.mod b/go.mod index 1fa9103..b0ee699 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/garyburd/redigo v1.6.4 github.com/go-sql-driver/mysql v1.7.0 github.com/lixu-any/go-tools v0.0.0-20221128094643-07d54c69e9bf + github.com/samber/lo v1.39.0 gorm.io/driver/mysql v1.5.6 gorm.io/gorm v1.25.9 ) @@ -34,11 +35,12 @@ require ( github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect go.uber.org/atomic v1.5.0 // indirect golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect + golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect golang.org/x/lint v0.0.0-20190930215403-16217165b5de // indirect - golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect - golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f // indirect - golang.org/x/text v0.3.3 // indirect - golang.org/x/tools v0.0.0-20210106214847-113979e3529a // indirect + golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect + golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 // indirect google.golang.org/protobuf v1.25.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v2 v2.2.8 // indirect diff --git a/go.sum b/go.sum index 5ef80ef..be6e6b8 100644 --- a/go.sum +++ b/go.sum @@ -333,6 +333,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA= +github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo= @@ -400,6 +402,8 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM= +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -428,8 +432,9 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -460,12 +465,14 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -484,8 +491,9 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 h1:0c3L82FDQ5rt1bjTBlchS8t6RQ6299/+5bWMnRLh+uI= +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/models/cardholder.go b/models/cardholder.go index b10760f..663562d 100644 --- a/models/cardholder.go +++ b/models/cardholder.go @@ -66,3 +66,19 @@ type RspStarShopExchange struct { AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励 AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发 } + +// ReqAutoExchangeInfo 请求 上期剩余星星自动兑换信息 +type ReqAutoExchangeInfo struct { + BaseLoginInfo + BaseSign +} + +// RspAutoExchangeInfo 返回 上期剩余星星自动兑换信息 +type RspAutoExchangeInfo struct { + CardHolderInfo + NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表 + AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励 + AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发 + LastStarCount int `form:"last_star_count" json:"last_star_count"` // 上期活动剩余星星点数 + AutoExchangeHolder []int `form:"auto_exchange_holder" json:"auto_exchange_holder"` // 活动切换时自动兑换的卡包列表 +} diff --git a/routers/router.go b/routers/router.go index 2874f63..c2fe590 100644 --- a/routers/router.go +++ b/routers/router.go @@ -17,8 +17,10 @@ func init() { beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info") // 卡包打开 beego.Router(prefix+"/cardholder/open", &controllers.CardHolderController{}, "post:Open") - // 卡包打开 + // 星星商店兑换 beego.Router(prefix+"/cardholder/shopexchange", &controllers.CardHolderController{}, "post:ShopExchange") + // 上期剩余星星自动兑换信息 + beego.Router(prefix+"/cardholder/autoexchangeinfo", &controllers.CardHolderController{}, "post:AutoExchangeInfo") beego.ErrorController(&controllers.ErrorController{}) } diff --git a/service/cardholder/handle.go b/service/cardholder/handle.go index 8eb9fc4..cef9345 100644 --- a/service/cardholder/handle.go +++ b/service/cardholder/handle.go @@ -47,7 +47,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH } // 读取游戏数据 - gameData := LoadData(req.GameID, req.UID, config.Id) + gameData := LoadData(req.GameID, req.UID, config) rsp.CardHolderInfo = GetInfo(gameData, config) @@ -84,7 +84,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH } // 读取游戏数据 - gameData := LoadData(req.GameID, req.UID, config.Id) + gameData := LoadData(req.GameID, req.UID, config) // 检查游戏数据 轮次等 code = CheckGameData(gameData, config) if code != constd.RECODE_OK { @@ -93,7 +93,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH // 开始处理抽卡 openMode := 0 - sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) + sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid) allNewCards := make([]int, 0) for _, idCardholder := range req.Ids { confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)] @@ -157,7 +157,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model } // 读取游戏数据 - gameData := LoadData(req.GameID, req.UID, config.Id) + gameData := LoadData(req.GameID, req.UID, config) // 检查游戏数据 轮次等 code = CheckGameData(gameData, config) if code != constd.RECODE_OK { @@ -201,7 +201,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model // 开始处理抽卡 openMode := 1 - sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) + sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid) for i := 0; i < cardholderCount; i++ { newCards := DoOpen(req.GameID, gameData, config, @@ -233,3 +233,62 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model return } + +// HandleAutoExchangeInfo 上期剩余星星自动兑换信息 +func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp models.RspAutoExchangeInfo) { + rsp = models.RspAutoExchangeInfo{ + NewCards: make([]int, 0), + AwardAlbum: make(map[int]string), + AutoExchangeHolder: make([]int, 0), + } + code = constd.RECODE_OK + + // 尝试更新配置 + config, hasConfig := TryUpdateConfig(req.GameID) + if !hasConfig { + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR + return + } + + // 检查活动状态 + code = CheckStatus(config) + if code != constd.RECODE_OK { + return + } + + // 读取游戏数据 + gameData := LoadData(req.GameID, req.UID, config) + // 检查游戏数据 轮次等 + code = CheckGameData(gameData, config) + if code != constd.RECODE_OK { + return + } + + if gameData.Details.LastStarCount <= 0 { + code = constd.RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR + return + } + + rsp.LastStarCount = gameData.Details.LastStarCount + for _, i2 := range gameData.Details.AutoExchangeHolder { + rsp.AutoExchangeHolder = append(rsp.AutoExchangeHolder, i2) + } + // 把当前的卡包内数据放在新卡数据里给客户端 + for i1, i2 := range gameData.Details.Cards { + for i := 0; i < i2; i++ { + rsp.NewCards = append(rsp.NewCards, i1) + } + } + + gameData.Details.LastStarCount = 0 + gameData.Details.AutoExchangeHolder = make([]int, 0) + // 存档 + SaveData(req.GameID, gameData) + + utslice.Shuffle(rsp.NewCards) + + // 返回信息 + rsp.CardHolderInfo = GetInfo(gameData, config) + + return +} diff --git a/service/cardholder/logic.go b/service/cardholder/logic.go index 671c225..9541dc6 100644 --- a/service/cardholder/logic.go +++ b/service/cardholder/logic.go @@ -9,6 +9,9 @@ import ( "apigame/util/utjson" "apigame/util/utslice" "apigame/util/utstring" + "github.com/samber/lo" + "sort" + "strconv" ) // SaveData 存储数据 @@ -35,13 +38,23 @@ func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) { } // LoadData 获取数据 外部接口 -func LoadData(gameId string, uid int64, configId int64) (d *dto.CardHolderData) { +func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *dto.CardHolderData) { + configId := config.Id d = _LoadData(gameId, uid) // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新 if configId != 0 && configId != d.ActivityId { + + // 剩余的星星数 + starCount := d.Details.StarCount + d.ActivityId = configId d.Details = dto.NewCardHolderDataDetails() + + // 使用剩余的星星数来自动兑换卡包 + d.Details.LastStarCount = starCount + NextActivityAutoExchange(gameId, d, config) + SaveData(gameId, d) } return @@ -388,3 +401,47 @@ func GetStarCardList(gameData *dto.CardHolderData, config *CardActivityConfig, n return } + +// NextActivityAutoExchange 活动切换时自动兑换卡包 +func NextActivityAutoExchange(gameId string, gameData *dto.CardHolderData, config *CardActivityConfig) { + starCount := gameData.Details.LastStarCount + // 把星星的配置按照需要的星星数降序排列 + list := lo.Values[int, StarShopConfig](config.StarShopConfig) + sort.Slice(list, func(i, j int) bool { + return list[i].NeedStarNumber < list[j].NeedStarNumber + }) + list = lo.Reverse(list) + // 遍历 + for _, config := range list { + for starCount >= config.NeedStarNumber { + gameData.Details.AutoExchangeHolder = append(gameData.Details.AutoExchangeHolder, config.Id) + starCount -= config.NeedStarNumber + } + } + + // 开始处理抽卡 + openMode := 2 + sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid) + allNewCards := make([]int, 0) + for _, idCardholder := range gameData.Details.AutoExchangeHolder { + confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)] + newCards := DoOpen(gameId, + gameData, config, + confCardholder, + sequenceId, cohort, + openMode) + // 打乱顺序 + utslice.Shuffle(newCards) + for _, i3 := range newCards { + allNewCards = append(allNewCards, i3) + } + } + _, _ = DoOpenCheckAward(gameId, + gameData, config, + sequenceId, cohort, + allNewCards, + openMode) + + // 计算星星点数 + CalculateStarCount(gameData, config) +} diff --git a/service/constd/code-msg.go b/service/constd/code-msg.go index 2fb9e64..125257a 100644 --- a/service/constd/code-msg.go +++ b/service/constd/code-msg.go @@ -40,13 +40,14 @@ const ( RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051" RECODE_MERGE_QINGXIANGMTXZ_ERROR = "2052" - RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR = "2100" - RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR = "2101" - RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR = "2102" - RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR = "2103" - RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR = "2104" - RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR = "2105" - RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR = "2106" + RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR = "2100" + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR = "2101" + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR = "2102" + RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR = "2103" + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR = "2104" + RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR = "2105" + RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR = "2106" + RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR = "2107" ) var recodeText = map[string]string{ @@ -87,13 +88,14 @@ var recodeText = map[string]string{ RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在", RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证", - RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR: "活动未开放", - RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始", - RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束", - RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR: "活动轮次已全部完成", - RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误", - RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR: "商店ID错误", - RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR: "星星商店星星不足", + RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR: "活动未开放", + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始", + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束", + RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR: "活动轮次已全部完成", + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误", + RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR: "商店ID错误", + RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR: "星星商店星星不足", + RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR: "没有星星商店自动兑换信息", } func RecodeText(code string) string { -- libgit2 0.21.0