Commit 5cb04cde151510a63315b95e4c0d88d979f378b2
1 parent
82bb3859
Exists in
master
提交接口
Showing
4 changed files
with
263 additions
and
17 deletions
Show diff stats
src/HttpServer/logic/datadef.go
| @@ -51,17 +51,20 @@ type DataDesc struct { | @@ -51,17 +51,20 @@ type DataDesc struct { | ||
| 51 | 51 | ||
| 52 | type ExchangePosReq struct { | 52 | type ExchangePosReq struct { |
| 53 | //Uuid int `json:"uuid"` | 53 | //Uuid int `json:"uuid"` |
| 54 | - Pos_1 int `json:"pos_1"` | ||
| 55 | - Pos_2 int `json:"pos_2"` | 54 | + From int `json:"from"` |
| 55 | + To int `json:"to"` | ||
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | +type ExchangePosData struct { | ||
| 59 | + CatList []CatPosInfo `json:"catList"` | ||
| 60 | + Coin DoBuyCatCoin `json:"coin"` | ||
| 61 | + NewCat int `json:"newCat"` | ||
| 62 | + Reward float32 `json:"reward"` | ||
| 63 | +} | ||
| 58 | type ExchangePosResp struct { | 64 | type ExchangePosResp struct { |
| 59 | - Code int `json:"code"` | ||
| 60 | - Message string `json:"message"` | ||
| 61 | - Pos1_lv int `json:"pos1_lv"` | ||
| 62 | - Pos2_lv int `json:"pos2_lv"` | ||
| 63 | - Highest_lv int `json:"highest_lv"` | ||
| 64 | - Add_num int `json:"add_num"` | 65 | + Code int `json:"code"` |
| 66 | + Message string `json:"message"` | ||
| 67 | + Data ExchangePosData `json:"data"` | ||
| 65 | } | 68 | } |
| 66 | 69 | ||
| 67 | type ClickBoxReq struct { | 70 | type ClickBoxReq struct { |
| @@ -304,11 +307,11 @@ type QueryPlayerRankResp struct { | @@ -304,11 +307,11 @@ type QueryPlayerRankResp struct { | ||
| 304 | } | 307 | } |
| 305 | 308 | ||
| 306 | type CatPosInfo struct { | 309 | type CatPosInfo struct { |
| 307 | - Position int `json:"position"` | ||
| 308 | - Cat int `json:"cat"` | ||
| 309 | - RedPacket int `json:"redPacket"` | ||
| 310 | - Time int `json:"time"` | ||
| 311 | - StartTime int `json:"startTime"` | 310 | + Position int `json:"position"` |
| 311 | + Cat int `json:"cat"` | ||
| 312 | + RedPacket float32 `json:"redPacket"` | ||
| 313 | + Time int `json:"time"` | ||
| 314 | + StartTime int `json:"startTime"` | ||
| 312 | } | 315 | } |
| 313 | 316 | ||
| 314 | type adRateData struct { | 317 | type adRateData struct { |
| @@ -484,7 +487,7 @@ type UserData struct { | @@ -484,7 +487,7 @@ type UserData struct { | ||
| 484 | RandGiftNum int //当前剩余空投猫粮次数 | 487 | RandGiftNum int //当前剩余空投猫粮次数 |
| 485 | RandGiftDay int //记录当前猫粮日期,当日期变化则重置RandGiftNum | 488 | RandGiftDay int //记录当前猫粮日期,当日期变化则重置RandGiftNum |
| 486 | RandGiftTime int //记录上一次空投猫粮时间 | 489 | RandGiftTime int //记录上一次空投猫粮时间 |
| 487 | - Redbag int //红包值 单位为分 | 490 | + Redbag float32 //红包值 单位为分 |
| 488 | Head string //头像地址 | 491 | Head string //头像地址 |
| 489 | NickName string //昵称 | 492 | NickName string //昵称 |
| 490 | RealName string //实名 | 493 | RealName string //实名 |
src/HttpServer/logic/function.go
| @@ -6,6 +6,7 @@ import ( | @@ -6,6 +6,7 @@ import ( | ||
| 6 | "common/logger" | 6 | "common/logger" |
| 7 | "common/redis" | 7 | "common/redis" |
| 8 | "encoding/json" | 8 | "encoding/json" |
| 9 | + "math/rand" | ||
| 9 | "sort" | 10 | "sort" |
| 10 | "strconv" | 11 | "strconv" |
| 11 | "time" | 12 | "time" |
| @@ -104,7 +105,7 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { | @@ -104,7 +105,7 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { | ||
| 104 | var d1 CatPosInfo | 105 | var d1 CatPosInfo |
| 105 | d1.Position = i | 106 | d1.Position = i |
| 106 | d1.Cat = 0 | 107 | d1.Cat = 0 |
| 107 | - if i == 0 { | 108 | + if i == 0 || i == 1 { |
| 108 | d1.Cat = 2 | 109 | d1.Cat = 2 |
| 109 | } | 110 | } |
| 110 | udata.PosInfo = append(udata.PosInfo, d1) | 111 | udata.PosInfo = append(udata.PosInfo, d1) |
| @@ -177,6 +178,156 @@ func getCatPutPos(uinfo *UserData, clv int) int { | @@ -177,6 +178,156 @@ func getCatPutPos(uinfo *UserData, clv int) int { | ||
| 177 | return pos | 178 | return pos |
| 178 | } | 179 | } |
| 179 | 180 | ||
| 181 | +//处理红包猫自动合成 | ||
| 182 | +func DoAutoMergeRedCat(uinfo *UserData, uuid int) { | ||
| 183 | + //首先处理五方招财猫逻辑 | ||
| 184 | + eastsum := 0 | ||
| 185 | + westsum := 0 | ||
| 186 | + southsum := 0 | ||
| 187 | + northsum := 0 | ||
| 188 | + middlesum := 0 | ||
| 189 | + | ||
| 190 | + for _, v := range uinfo.PosInfo { | ||
| 191 | + if v.Cat == 103 { | ||
| 192 | + eastsum++ | ||
| 193 | + } | ||
| 194 | + if v.Cat == 104 { | ||
| 195 | + westsum++ | ||
| 196 | + } | ||
| 197 | + if v.Cat == 105 { | ||
| 198 | + southsum++ | ||
| 199 | + } | ||
| 200 | + if v.Cat == 106 { | ||
| 201 | + northsum++ | ||
| 202 | + } | ||
| 203 | + if v.Cat == 107 { | ||
| 204 | + middlesum++ | ||
| 205 | + } | ||
| 206 | + | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + //五方猫 | ||
| 210 | + if eastsum > 0 && westsum > 0 && northsum > 0 && southsum > 0 && middlesum > 0 { | ||
| 211 | + //合成一天招财猫 | ||
| 212 | + //首先去除五只猫 | ||
| 213 | + onepos := -1 | ||
| 214 | + for k, v := range uinfo.PosInfo { | ||
| 215 | + if v.Cat == 103 { | ||
| 216 | + onepos = k | ||
| 217 | + uinfo.PosInfo[k].Cat = 0 | ||
| 218 | + uinfo.PosInfo[k].RedPacket = 0 | ||
| 219 | + uinfo.PosInfo[k].Position = k | ||
| 220 | + break | ||
| 221 | + } | ||
| 222 | + } | ||
| 223 | + for k, v := range uinfo.PosInfo { | ||
| 224 | + if v.Cat == 104 { | ||
| 225 | + onepos = k | ||
| 226 | + uinfo.PosInfo[k].Cat = 0 | ||
| 227 | + uinfo.PosInfo[k].RedPacket = 0 | ||
| 228 | + uinfo.PosInfo[k].Position = k | ||
| 229 | + break | ||
| 230 | + } | ||
| 231 | + } | ||
| 232 | + for k, v := range uinfo.PosInfo { | ||
| 233 | + if v.Cat == 105 { | ||
| 234 | + onepos = k | ||
| 235 | + uinfo.PosInfo[k].Cat = 0 | ||
| 236 | + uinfo.PosInfo[k].RedPacket = 0 | ||
| 237 | + uinfo.PosInfo[k].Position = k | ||
| 238 | + break | ||
| 239 | + } | ||
| 240 | + } | ||
| 241 | + for k, v := range uinfo.PosInfo { | ||
| 242 | + if v.Cat == 106 { | ||
| 243 | + onepos = k | ||
| 244 | + uinfo.PosInfo[k].Cat = 0 | ||
| 245 | + uinfo.PosInfo[k].RedPacket = 0 | ||
| 246 | + uinfo.PosInfo[k].Position = k | ||
| 247 | + break | ||
| 248 | + } | ||
| 249 | + } | ||
| 250 | + for k, v := range uinfo.PosInfo { | ||
| 251 | + if v.Cat == 107 { | ||
| 252 | + onepos = k | ||
| 253 | + uinfo.PosInfo[k].Cat = 0 | ||
| 254 | + uinfo.PosInfo[k].RedPacket = 0 | ||
| 255 | + uinfo.PosInfo[k].Position = k | ||
| 256 | + break | ||
| 257 | + } | ||
| 258 | + } | ||
| 259 | + if onepos < 0 { | ||
| 260 | + logger.Error("DoAutoMergeRedCat failed onepos=%v", onepos) | ||
| 261 | + } | ||
| 262 | + uinfo.PosInfo[onepos].Cat = 102 //1天招财猫 | ||
| 263 | + cfg := jsonconf.GetRedCatConfig(uinfo.PosInfo[onepos].Cat) | ||
| 264 | + if cfg == nil { | ||
| 265 | + logger.Error("DoAutoMergeRedCat getrdcfg failed lv=%v", uinfo.PosInfo[onepos].Cat) | ||
| 266 | + } else { | ||
| 267 | + uinfo.PosInfo[onepos].Time = 24 * 60 * 60 | ||
| 268 | + uinfo.PosInfo[onepos].RedPacket = cfg.Money | ||
| 269 | + uinfo.PosInfo[onepos].StartTime = int(time.Now().Unix()) | ||
| 270 | + uinfo.PosInfo[onepos].Position = onepos | ||
| 271 | + } | ||
| 272 | + | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | +} | ||
| 276 | + | ||
| 277 | +//合成红包猫 返回红包猫等级 等级为red_catconfig的id+100 | ||
| 278 | +func MergeRedBagCat(uinfo *UserData, pos int) int { | ||
| 279 | + rtpos := 0 | ||
| 280 | + | ||
| 281 | + //走随机合成逻辑 | ||
| 282 | + sumrate := float32(0) | ||
| 283 | + for _, v := range jsonconf.GetJsonConf().RedCatConfig { | ||
| 284 | + sumrate += v.Rate | ||
| 285 | + } | ||
| 286 | + rand.Seed(time.Now().UnixNano()) | ||
| 287 | + randnum := rand.Intn(100) | ||
| 288 | + tmprate := 0 | ||
| 289 | + for _, v := range jsonconf.GetJsonConf().RedCatConfig { | ||
| 290 | + tmprate += int(v.Rate / sumrate) | ||
| 291 | + if tmprate >= randnum { | ||
| 292 | + uinfo.PosInfo[pos].Position = pos | ||
| 293 | + uinfo.PosInfo[pos].Cat = 100 + v.Id | ||
| 294 | + if v.Id == 13 { | ||
| 295 | + uinfo.PosInfo[pos].Time = 10 * 60 | ||
| 296 | + uinfo.PosInfo[pos].StartTime = int(time.Now().Unix()) | ||
| 297 | + } | ||
| 298 | + if v.Id == 14 { | ||
| 299 | + uinfo.PosInfo[pos].Time = 15 * 60 | ||
| 300 | + uinfo.PosInfo[pos].StartTime = int(time.Now().Unix()) | ||
| 301 | + } | ||
| 302 | + if v.Id == 2 { | ||
| 303 | + uinfo.PosInfo[pos].Time = 24 * 60 * 60 | ||
| 304 | + uinfo.PosInfo[pos].StartTime = int(time.Now().Unix()) | ||
| 305 | + } | ||
| 306 | + uinfo.PosInfo[pos].RedPacket = v.Money | ||
| 307 | + rtpos = pos | ||
| 308 | + break | ||
| 309 | + } | ||
| 310 | + } | ||
| 311 | + | ||
| 312 | + return rtpos | ||
| 313 | +} | ||
| 314 | + | ||
| 315 | +func (uinfo *UserData) CheckBuyCatSHop() { | ||
| 316 | + //检查可购买的猫是否会增加 | ||
| 317 | + //需要扩充一下商店 | ||
| 318 | + curshoplv := len(uinfo.BuyCatInfo) | ||
| 319 | + if uinfo.Highestlv-5 > curshoplv { | ||
| 320 | + var info BuyCatInfoData | ||
| 321 | + info.Buytime = 0 | ||
| 322 | + cafcfg := jsonconf.GetCatConfig(uinfo.Highestlv - 5) | ||
| 323 | + if cafcfg != nil { | ||
| 324 | + info.CurPrice, _ = strconv.ParseInt(cafcfg.Price, 10, 64) | ||
| 325 | + } | ||
| 326 | + info.IsMaxBuytime = 0 | ||
| 327 | + uinfo.BuyCatInfo = append(uinfo.BuyCatInfo, info) | ||
| 328 | + } | ||
| 329 | +} | ||
| 330 | + | ||
| 180 | func (udata *UserData) CalcGoldRate() int64 { | 331 | func (udata *UserData) CalcGoldRate() int64 { |
| 181 | //计算出所有速率的和 | 332 | //计算出所有速率的和 |
| 182 | //计算方式为 首先计算合成界面猫的产出速率,然后计算红毛包的产出速率,最后计算仓库中的猫的产出速率 | 333 | //计算方式为 首先计算合成界面猫的产出速率,然后计算红毛包的产出速率,最后计算仓库中的猫的产出速率 |
src/HttpServer/logic/httpserver.go
| @@ -32,7 +32,9 @@ func startServerHttpServe() { | @@ -32,7 +32,9 @@ func startServerHttpServe() { | ||
| 32 | http.HandleFunc("/api/home/adRate", AcclecteGold) //看广告加速 | 32 | http.HandleFunc("/api/home/adRate", AcclecteGold) //看广告加速 |
| 33 | http.HandleFunc("/api/home/shop", QueryBuyCat) //商店 | 33 | http.HandleFunc("/api/home/shop", QueryBuyCat) //商店 |
| 34 | http.HandleFunc("/api/home/leftRateTimes", LeftRateTimes) //剩余看广告加速次数 | 34 | http.HandleFunc("/api/home/leftRateTimes", LeftRateTimes) //剩余看广告加速次数 |
| 35 | + http.HandleFunc("/api/home/change", ExchangePos) //合成 | ||
| 35 | 36 | ||
| 37 | + /////---------------------------------------------------------------------old | ||
| 36 | http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置 | 38 | http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置 |
| 37 | http.HandleFunc("/happycat/clickcatbox", ClickCatBox) //请求点击猫箱子 | 39 | http.HandleFunc("/happycat/clickcatbox", ClickCatBox) //请求点击猫箱子 |
| 38 | http.HandleFunc("/happycat/upgradecatbox", UpgradeCatBox) //请求点击猫箱子 | 40 | http.HandleFunc("/happycat/upgradecatbox", UpgradeCatBox) //请求点击猫箱子 |
| @@ -610,7 +612,7 @@ func AcclecteGold(w http.ResponseWriter, r *http.Request) { | @@ -610,7 +612,7 @@ func AcclecteGold(w http.ResponseWriter, r *http.Request) { | ||
| 610 | func ExchangePos(w http.ResponseWriter, r *http.Request) { | 612 | func ExchangePos(w http.ResponseWriter, r *http.Request) { |
| 611 | Uuid := 0 | 613 | Uuid := 0 |
| 612 | if len(r.Header) > 0 { | 614 | if len(r.Header) > 0 { |
| 613 | - Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) | 615 | + Uuid, _ = strconv.Atoi(r.Header.Get("uid")) |
| 614 | } | 616 | } |
| 615 | if Uuid == 0 { | 617 | if Uuid == 0 { |
| 616 | SetHeader(w) | 618 | SetHeader(w) |
| @@ -622,7 +624,7 @@ func ExchangePos(w http.ResponseWriter, r *http.Request) { | @@ -622,7 +624,7 @@ func ExchangePos(w http.ResponseWriter, r *http.Request) { | ||
| 622 | s := string(result) | 624 | s := string(result) |
| 623 | logger.Info("ExchangePos , body:%v,uuid=%v", s, Uuid) | 625 | logger.Info("ExchangePos , body:%v,uuid=%v", s, Uuid) |
| 624 | 626 | ||
| 625 | - //HandlerExchangePos(w, s, Uuid) | 627 | + HandlerExchangePos(w, s, Uuid) |
| 626 | } | 628 | } |
| 627 | 629 | ||
| 628 | func GetUserData(w http.ResponseWriter, r *http.Request) { | 630 | func GetUserData(w http.ResponseWriter, r *http.Request) { |
src/HttpServer/logic/logic.go
| @@ -512,3 +512,93 @@ func HandlerQueryBuyCat(w http.ResponseWriter, data string, uuid int) { | @@ -512,3 +512,93 @@ func HandlerQueryBuyCat(w http.ResponseWriter, data string, uuid int) { | ||
| 512 | respstr, _ := json.Marshal(&resp) | 512 | respstr, _ := json.Marshal(&resp) |
| 513 | fmt.Fprint(w, string(respstr)) | 513 | fmt.Fprint(w, string(respstr)) |
| 514 | } | 514 | } |
| 515 | + | ||
| 516 | +func HandlerExchangePos(w http.ResponseWriter, data string, uuid int) { | ||
| 517 | + SetHeader(w) | ||
| 518 | + var resp ExchangePosResp | ||
| 519 | + resp.Code = 0 | ||
| 520 | + var rdata ExchangePosReq | ||
| 521 | + err := json.Unmarshal([]byte(data), &rdata) | ||
| 522 | + if err != nil { | ||
| 523 | + logger.Info("json decode HandlerExchangePos data failed:%v", err, " for:%v", data) | ||
| 524 | + resp.Message = "json unmarshal failed" | ||
| 525 | + resp.Code = 1 | ||
| 526 | + respstr, _ := json.Marshal(&resp) | ||
| 527 | + fmt.Fprint(w, string(respstr)) | ||
| 528 | + return | ||
| 529 | + } | ||
| 530 | + | ||
| 531 | + for { | ||
| 532 | + uinfo, err := GetUserInfo(strconv.Itoa(uuid)) | ||
| 533 | + if err != nil || uinfo == nil { | ||
| 534 | + logger.Error("HandlerExchangePos getuserinfo failed=%v", err) | ||
| 535 | + resp.Code = 1 | ||
| 536 | + resp.Message = "get userinfo failed" | ||
| 537 | + break | ||
| 538 | + } | ||
| 539 | + | ||
| 540 | + sumpos := len(uinfo.PosInfo) - 1 | ||
| 541 | + //检查位置索引的合法性 | ||
| 542 | + if rdata.From < 0 || rdata.To < 0 || rdata.From > sumpos || rdata.To > sumpos { | ||
| 543 | + logger.Error("HandlerExchangePos pos index not legal failed=%v", err) | ||
| 544 | + resp.Code = 1 | ||
| 545 | + resp.Message = "pos index not legal" | ||
| 546 | + break | ||
| 547 | + } | ||
| 548 | + | ||
| 549 | + //下面判断是交换还是合成 | ||
| 550 | + if uinfo.PosInfo[rdata.From].Cat == uinfo.PosInfo[rdata.To].Cat { | ||
| 551 | + //相同 则合成 | ||
| 552 | + //首先判断是否是顶级猫了 | ||
| 553 | + if uinfo.PosInfo[rdata.From].Cat == 36 { | ||
| 554 | + //todo 走红包猫的逻辑 | ||
| 555 | + MergeRedBagCat(uinfo, rdata.From) | ||
| 556 | + DoAutoMergeRedCat(uinfo, uuid) | ||
| 557 | + //此处处理一下红包猫的自动合成逻辑 | ||
| 558 | + if uinfo.Highestlv < 37 { | ||
| 559 | + //非红包猫 | ||
| 560 | + uinfo.Highestlv = 37 | ||
| 561 | + uinfo.CheckBuyCatSHop() | ||
| 562 | + } | ||
| 563 | + | ||
| 564 | + } else { | ||
| 565 | + // | ||
| 566 | + uinfo.PosInfo[rdata.From].Cat = 0 | ||
| 567 | + uinfo.PosInfo[rdata.To].Cat++ | ||
| 568 | + if uinfo.PosInfo[rdata.To].Cat > uinfo.Highestlv { | ||
| 569 | + uinfo.Highestlv = uinfo.PosInfo[rdata.To].Cat | ||
| 570 | + resp.Data.NewCat = uinfo.PosInfo[rdata.To].Cat | ||
| 571 | + uinfo.CheckBuyCatSHop() | ||
| 572 | + } | ||
| 573 | + | ||
| 574 | + } | ||
| 575 | + } else { | ||
| 576 | + //不相同 交换即可 | ||
| 577 | + 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) { | ||
| 578 | + //合成情侣猫 | ||
| 579 | + addredpacket := uinfo.PosInfo[rdata.From].RedPacket + uinfo.PosInfo[rdata.To].RedPacket | ||
| 580 | + uinfo.PosInfo[rdata.From].Cat = 0 | ||
| 581 | + uinfo.PosInfo[rdata.From].RedPacket = 0 | ||
| 582 | + uinfo.PosInfo[rdata.To].Cat = 0 | ||
| 583 | + uinfo.PosInfo[rdata.To].RedPacket = 0 | ||
| 584 | + resp.Data.Reward = addredpacket | ||
| 585 | + uinfo.Redbag += addredpacket | ||
| 586 | + //todo 调用sdk接口 | ||
| 587 | + } else { | ||
| 588 | + uinfo.PosInfo[rdata.From].Cat, uinfo.PosInfo[rdata.To].Cat = uinfo.PosInfo[rdata.To].Cat, uinfo.PosInfo[rdata.From].Cat | ||
| 589 | + } | ||
| 590 | + } | ||
| 591 | + //重新计算速率 | ||
| 592 | + uinfo.CalcGoldRate() | ||
| 593 | + | ||
| 594 | + //保存玩家数据 | ||
| 595 | + SaveUserInfo(uinfo, strconv.Itoa(uuid)) | ||
| 596 | + resp.Code = 0 | ||
| 597 | + break | ||
| 598 | + } | ||
| 599 | + | ||
| 600 | + //回包 | ||
| 601 | + respstr, _ := json.Marshal(&resp) | ||
| 602 | + fmt.Fprint(w, string(respstr)) | ||
| 603 | + | ||
| 604 | +} |