diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index fcf94d9..c37631c 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -51,17 +51,20 @@ type DataDesc struct { type ExchangePosReq struct { //Uuid int `json:"uuid"` - Pos_1 int `json:"pos_1"` - Pos_2 int `json:"pos_2"` + From int `json:"from"` + To int `json:"to"` } +type ExchangePosData struct { + CatList []CatPosInfo `json:"catList"` + Coin DoBuyCatCoin `json:"coin"` + NewCat int `json:"newCat"` + Reward float32 `json:"reward"` +} type ExchangePosResp struct { - Code int `json:"code"` - Message string `json:"message"` - Pos1_lv int `json:"pos1_lv"` - Pos2_lv int `json:"pos2_lv"` - Highest_lv int `json:"highest_lv"` - Add_num int `json:"add_num"` + Code int `json:"code"` + Message string `json:"message"` + Data ExchangePosData `json:"data"` } type ClickBoxReq struct { @@ -304,11 +307,11 @@ type QueryPlayerRankResp struct { } type CatPosInfo struct { - Position int `json:"position"` - Cat int `json:"cat"` - RedPacket int `json:"redPacket"` - Time int `json:"time"` - StartTime int `json:"startTime"` + Position int `json:"position"` + Cat int `json:"cat"` + RedPacket float32 `json:"redPacket"` + Time int `json:"time"` + StartTime int `json:"startTime"` } type adRateData struct { @@ -484,7 +487,7 @@ type UserData struct { RandGiftNum int //当前剩余空投猫粮次数 RandGiftDay int //记录当前猫粮日期,当日期变化则重置RandGiftNum RandGiftTime int //记录上一次空投猫粮时间 - Redbag int //红包值 单位为分 + Redbag float32 //红包值 单位为分 Head string //头像地址 NickName string //昵称 RealName string //实名 diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index 7303472..4f0bddc 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -6,6 +6,7 @@ import ( "common/logger" "common/redis" "encoding/json" + "math/rand" "sort" "strconv" "time" @@ -104,7 +105,7 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { var d1 CatPosInfo d1.Position = i d1.Cat = 0 - if i == 0 { + if i == 0 || i == 1 { d1.Cat = 2 } udata.PosInfo = append(udata.PosInfo, d1) @@ -177,6 +178,156 @@ func getCatPutPos(uinfo *UserData, clv int) int { return pos } +//处理红包猫自动合成 +func DoAutoMergeRedCat(uinfo *UserData, uuid int) { + //首先处理五方招财猫逻辑 + eastsum := 0 + westsum := 0 + southsum := 0 + northsum := 0 + middlesum := 0 + + for _, v := range uinfo.PosInfo { + if v.Cat == 103 { + eastsum++ + } + if v.Cat == 104 { + westsum++ + } + if v.Cat == 105 { + southsum++ + } + if v.Cat == 106 { + northsum++ + } + if v.Cat == 107 { + middlesum++ + } + + } + + //五方猫 + if eastsum > 0 && westsum > 0 && northsum > 0 && southsum > 0 && middlesum > 0 { + //合成一天招财猫 + //首先去除五只猫 + onepos := -1 + for k, v := range uinfo.PosInfo { + if v.Cat == 103 { + onepos = k + uinfo.PosInfo[k].Cat = 0 + uinfo.PosInfo[k].RedPacket = 0 + uinfo.PosInfo[k].Position = k + break + } + } + for k, v := range uinfo.PosInfo { + if v.Cat == 104 { + onepos = k + uinfo.PosInfo[k].Cat = 0 + uinfo.PosInfo[k].RedPacket = 0 + uinfo.PosInfo[k].Position = k + break + } + } + for k, v := range uinfo.PosInfo { + if v.Cat == 105 { + onepos = k + uinfo.PosInfo[k].Cat = 0 + uinfo.PosInfo[k].RedPacket = 0 + uinfo.PosInfo[k].Position = k + break + } + } + for k, v := range uinfo.PosInfo { + if v.Cat == 106 { + onepos = k + uinfo.PosInfo[k].Cat = 0 + uinfo.PosInfo[k].RedPacket = 0 + uinfo.PosInfo[k].Position = k + break + } + } + for k, v := range uinfo.PosInfo { + if v.Cat == 107 { + onepos = k + uinfo.PosInfo[k].Cat = 0 + uinfo.PosInfo[k].RedPacket = 0 + uinfo.PosInfo[k].Position = k + break + } + } + if onepos < 0 { + logger.Error("DoAutoMergeRedCat failed onepos=%v", onepos) + } + uinfo.PosInfo[onepos].Cat = 102 //1天招财猫 + cfg := jsonconf.GetRedCatConfig(uinfo.PosInfo[onepos].Cat) + if cfg == nil { + logger.Error("DoAutoMergeRedCat getrdcfg failed lv=%v", uinfo.PosInfo[onepos].Cat) + } else { + uinfo.PosInfo[onepos].Time = 24 * 60 * 60 + uinfo.PosInfo[onepos].RedPacket = cfg.Money + uinfo.PosInfo[onepos].StartTime = int(time.Now().Unix()) + uinfo.PosInfo[onepos].Position = onepos + } + + } + +} + +//合成红包猫 返回红包猫等级 等级为red_catconfig的id+100 +func MergeRedBagCat(uinfo *UserData, pos int) int { + rtpos := 0 + + //走随机合成逻辑 + sumrate := float32(0) + for _, v := range jsonconf.GetJsonConf().RedCatConfig { + sumrate += v.Rate + } + rand.Seed(time.Now().UnixNano()) + randnum := rand.Intn(100) + tmprate := 0 + for _, v := range jsonconf.GetJsonConf().RedCatConfig { + tmprate += int(v.Rate / sumrate) + if tmprate >= randnum { + uinfo.PosInfo[pos].Position = pos + uinfo.PosInfo[pos].Cat = 100 + v.Id + if v.Id == 13 { + uinfo.PosInfo[pos].Time = 10 * 60 + uinfo.PosInfo[pos].StartTime = int(time.Now().Unix()) + } + if v.Id == 14 { + uinfo.PosInfo[pos].Time = 15 * 60 + uinfo.PosInfo[pos].StartTime = int(time.Now().Unix()) + } + if v.Id == 2 { + uinfo.PosInfo[pos].Time = 24 * 60 * 60 + uinfo.PosInfo[pos].StartTime = int(time.Now().Unix()) + } + uinfo.PosInfo[pos].RedPacket = v.Money + rtpos = pos + break + } + } + + return rtpos +} + +func (uinfo *UserData) CheckBuyCatSHop() { + //检查可购买的猫是否会增加 + //需要扩充一下商店 + curshoplv := len(uinfo.BuyCatInfo) + if uinfo.Highestlv-5 > curshoplv { + var info BuyCatInfoData + info.Buytime = 0 + cafcfg := jsonconf.GetCatConfig(uinfo.Highestlv - 5) + if cafcfg != nil { + info.CurPrice, _ = strconv.ParseInt(cafcfg.Price, 10, 64) + } + info.IsMaxBuytime = 0 + uinfo.BuyCatInfo = append(uinfo.BuyCatInfo, info) + } +} + func (udata *UserData) CalcGoldRate() int64 { //计算出所有速率的和 //计算方式为 首先计算合成界面猫的产出速率,然后计算红毛包的产出速率,最后计算仓库中的猫的产出速率 diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index f53db3b..ee89f6b 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -32,7 +32,9 @@ func startServerHttpServe() { http.HandleFunc("/api/home/adRate", AcclecteGold) //看广告加速 http.HandleFunc("/api/home/shop", QueryBuyCat) //商店 http.HandleFunc("/api/home/leftRateTimes", LeftRateTimes) //剩余看广告加速次数 + http.HandleFunc("/api/home/change", ExchangePos) //合成 + /////---------------------------------------------------------------------old http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置 http.HandleFunc("/happycat/clickcatbox", ClickCatBox) //请求点击猫箱子 http.HandleFunc("/happycat/upgradecatbox", UpgradeCatBox) //请求点击猫箱子 @@ -610,7 +612,7 @@ func AcclecteGold(w http.ResponseWriter, r *http.Request) { func ExchangePos(w http.ResponseWriter, r *http.Request) { Uuid := 0 if len(r.Header) > 0 { - Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + Uuid, _ = strconv.Atoi(r.Header.Get("uid")) } if Uuid == 0 { SetHeader(w) @@ -622,7 +624,7 @@ func ExchangePos(w http.ResponseWriter, r *http.Request) { s := string(result) logger.Info("ExchangePos , body:%v,uuid=%v", s, Uuid) - //HandlerExchangePos(w, s, Uuid) + HandlerExchangePos(w, s, Uuid) } func GetUserData(w http.ResponseWriter, r *http.Request) { diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index ac704b8..4ba07ee 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -512,3 +512,93 @@ func HandlerQueryBuyCat(w http.ResponseWriter, data string, uuid int) { respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } + +func HandlerExchangePos(w http.ResponseWriter, data string, uuid int) { + SetHeader(w) + var resp ExchangePosResp + resp.Code = 0 + var rdata ExchangePosReq + err := json.Unmarshal([]byte(data), &rdata) + if err != nil { + logger.Info("json decode HandlerExchangePos data failed:%v", err, " for:%v", data) + resp.Message = "json unmarshal failed" + resp.Code = 1 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) + return + } + + for { + uinfo, err := GetUserInfo(strconv.Itoa(uuid)) + if err != nil || uinfo == nil { + logger.Error("HandlerExchangePos getuserinfo failed=%v", err) + resp.Code = 1 + resp.Message = "get userinfo failed" + break + } + + sumpos := len(uinfo.PosInfo) - 1 + //检查位置索引的合法性 + if rdata.From < 0 || rdata.To < 0 || rdata.From > sumpos || rdata.To > sumpos { + logger.Error("HandlerExchangePos pos index not legal failed=%v", err) + resp.Code = 1 + resp.Message = "pos index not legal" + break + } + + //下面判断是交换还是合成 + if uinfo.PosInfo[rdata.From].Cat == uinfo.PosInfo[rdata.To].Cat { + //相同 则合成 + //首先判断是否是顶级猫了 + if uinfo.PosInfo[rdata.From].Cat == 36 { + //todo 走红包猫的逻辑 + MergeRedBagCat(uinfo, rdata.From) + DoAutoMergeRedCat(uinfo, uuid) + //此处处理一下红包猫的自动合成逻辑 + if uinfo.Highestlv < 37 { + //非红包猫 + uinfo.Highestlv = 37 + uinfo.CheckBuyCatSHop() + } + + } else { + // + uinfo.PosInfo[rdata.From].Cat = 0 + uinfo.PosInfo[rdata.To].Cat++ + if uinfo.PosInfo[rdata.To].Cat > uinfo.Highestlv { + uinfo.Highestlv = uinfo.PosInfo[rdata.To].Cat + resp.Data.NewCat = uinfo.PosInfo[rdata.To].Cat + uinfo.CheckBuyCatSHop() + } + + } + } else { + //不相同 交换即可 + if (uinfo.PosInfo[rdata.From].Cat == 108 && uinfo.PosInfo[rdata.To].Cat == 109) || (uinfo.PosInfo[rdata.From].Cat == 109 && uinfo.PosInfo[rdata.To].Cat == 108) { + //合成情侣猫 + addredpacket := uinfo.PosInfo[rdata.From].RedPacket + uinfo.PosInfo[rdata.To].RedPacket + uinfo.PosInfo[rdata.From].Cat = 0 + uinfo.PosInfo[rdata.From].RedPacket = 0 + uinfo.PosInfo[rdata.To].Cat = 0 + uinfo.PosInfo[rdata.To].RedPacket = 0 + resp.Data.Reward = addredpacket + uinfo.Redbag += addredpacket + //todo 调用sdk接口 + } else { + uinfo.PosInfo[rdata.From].Cat, uinfo.PosInfo[rdata.To].Cat = uinfo.PosInfo[rdata.To].Cat, uinfo.PosInfo[rdata.From].Cat + } + } + //重新计算速率 + uinfo.CalcGoldRate() + + //保存玩家数据 + SaveUserInfo(uinfo, strconv.Itoa(uuid)) + resp.Code = 0 + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) + +} -- libgit2 0.21.0