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 | 51 | |
| 52 | 52 | type ExchangePosReq struct { |
| 53 | 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 | 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 | 70 | type ClickBoxReq struct { |
| ... | ... | @@ -304,11 +307,11 @@ type QueryPlayerRankResp struct { |
| 304 | 307 | } |
| 305 | 308 | |
| 306 | 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 | 317 | type adRateData struct { |
| ... | ... | @@ -484,7 +487,7 @@ type UserData struct { |
| 484 | 487 | RandGiftNum int //当前剩余空投猫粮次数 |
| 485 | 488 | RandGiftDay int //记录当前猫粮日期,当日期变化则重置RandGiftNum |
| 486 | 489 | RandGiftTime int //记录上一次空投猫粮时间 |
| 487 | - Redbag int //红包值 单位为分 | |
| 490 | + Redbag float32 //红包值 单位为分 | |
| 488 | 491 | Head string //头像地址 |
| 489 | 492 | NickName string //昵称 |
| 490 | 493 | RealName string //实名 | ... | ... |
src/HttpServer/logic/function.go
| ... | ... | @@ -6,6 +6,7 @@ import ( |
| 6 | 6 | "common/logger" |
| 7 | 7 | "common/redis" |
| 8 | 8 | "encoding/json" |
| 9 | + "math/rand" | |
| 9 | 10 | "sort" |
| 10 | 11 | "strconv" |
| 11 | 12 | "time" |
| ... | ... | @@ -104,7 +105,7 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { |
| 104 | 105 | var d1 CatPosInfo |
| 105 | 106 | d1.Position = i |
| 106 | 107 | d1.Cat = 0 |
| 107 | - if i == 0 { | |
| 108 | + if i == 0 || i == 1 { | |
| 108 | 109 | d1.Cat = 2 |
| 109 | 110 | } |
| 110 | 111 | udata.PosInfo = append(udata.PosInfo, d1) |
| ... | ... | @@ -177,6 +178,156 @@ func getCatPutPos(uinfo *UserData, clv int) int { |
| 177 | 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 | 331 | func (udata *UserData) CalcGoldRate() int64 { |
| 181 | 332 | //计算出所有速率的和 |
| 182 | 333 | //计算方式为 首先计算合成界面猫的产出速率,然后计算红毛包的产出速率,最后计算仓库中的猫的产出速率 | ... | ... |
src/HttpServer/logic/httpserver.go
| ... | ... | @@ -32,7 +32,9 @@ func startServerHttpServe() { |
| 32 | 32 | http.HandleFunc("/api/home/adRate", AcclecteGold) //看广告加速 |
| 33 | 33 | http.HandleFunc("/api/home/shop", QueryBuyCat) //商店 |
| 34 | 34 | http.HandleFunc("/api/home/leftRateTimes", LeftRateTimes) //剩余看广告加速次数 |
| 35 | + http.HandleFunc("/api/home/change", ExchangePos) //合成 | |
| 35 | 36 | |
| 37 | + /////---------------------------------------------------------------------old | |
| 36 | 38 | http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置 |
| 37 | 39 | http.HandleFunc("/happycat/clickcatbox", ClickCatBox) //请求点击猫箱子 |
| 38 | 40 | http.HandleFunc("/happycat/upgradecatbox", UpgradeCatBox) //请求点击猫箱子 |
| ... | ... | @@ -610,7 +612,7 @@ func AcclecteGold(w http.ResponseWriter, r *http.Request) { |
| 610 | 612 | func ExchangePos(w http.ResponseWriter, r *http.Request) { |
| 611 | 613 | Uuid := 0 |
| 612 | 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 | 617 | if Uuid == 0 { |
| 616 | 618 | SetHeader(w) |
| ... | ... | @@ -622,7 +624,7 @@ func ExchangePos(w http.ResponseWriter, r *http.Request) { |
| 622 | 624 | s := string(result) |
| 623 | 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 | 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 | 512 | respstr, _ := json.Marshal(&resp) |
| 513 | 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 | +} | ... | ... |