Commit 34263c32237ba5ffe9367b8c9b5f4d9fe4727c14
1 parent
3e479fb8
Exists in
master
提交
Showing
5 changed files
with
271 additions
and
35 deletions
Show diff stats
src/HttpServer/jsonconf/jsonconf.go
... | ... | @@ -12,55 +12,65 @@ var ( |
12 | 12 | ) |
13 | 13 | |
14 | 14 | type CardDesc struct { |
15 | - Time int `json:"time"` | |
16 | - Ctype int `json:"type"` | |
17 | - Desc string `json:"desc"` | |
15 | + Time int `json:"time"` | |
16 | + Ctype int `json:"type"` | |
17 | + Desc string `json:"desc"` | |
18 | 18 | Flop_card string `json:"flop_card"` |
19 | 19 | } |
20 | 20 | |
21 | 21 | type CatDesc struct { |
22 | - Id int `json:"id"` | |
23 | - Name string `json:"name"` | |
24 | - Level_buy int `json:"level_buy"` | |
25 | - Rec_buy int `json:"rec_buy"` | |
26 | - Price string `json:"price"` | |
27 | - Gold_get string `json:"gold_get"` | |
28 | - Ratio float32 `json:"ratio"` | |
29 | - Increse_limit int `json:"increse_limit"` | |
30 | - Interval float32 `json:"interval"` | |
22 | + Id int `json:"id"` | |
23 | + Name string `json:"name"` | |
24 | + Level_buy int `json:"level_buy"` | |
25 | + Rec_buy int `json:"rec_buy"` | |
26 | + Price string `json:"price"` | |
27 | + Gold_get string `json:"gold_get"` | |
28 | + Ratio float32 `json:"ratio"` | |
29 | + Increse_limit int `json:"increse_limit"` | |
30 | + Interval float32 `json:"interval"` | |
31 | 31 | } |
32 | 32 | |
33 | 33 | type RedCatDesc struct { |
34 | - Id int `json:"id"` | |
35 | - Name string `json:"name"` | |
36 | - Skin string `json:"skin"` | |
37 | - Money float32 `json:"money"` | |
38 | - Rate float32 `json:"rate"` | |
39 | - Is_37 int `json:"is_37"` | |
40 | - Dec_red string `json:"dec_red"` | |
41 | - Dec_get string `json:"dec_get"` | |
34 | + Id int `json:"id"` | |
35 | + Name string `json:"name"` | |
36 | + Skin string `json:"skin"` | |
37 | + Money float32 `json:"money"` | |
38 | + Rate float32 `json:"rate"` | |
39 | + Is_37 int `json:"is_37"` | |
40 | + Dec_red string `json:"dec_red"` | |
41 | + Dec_get string `json:"dec_get"` | |
42 | 42 | } |
43 | 43 | |
44 | 44 | type TurnTableDesc struct { |
45 | - Id int `json:"id"` | |
46 | - Ttype int `json:"type"` | |
47 | - Rate float32 `json:"rate"` | |
48 | - Parameter int `json:"parameter"` | |
49 | - Desc string `json:"desc"` | |
50 | - Idx int `json:"idx"` | |
45 | + Id int `json:"id"` | |
46 | + Ttype int `json:"type"` | |
47 | + Rate float32 `json:"rate"` | |
48 | + Parameter int `json:"parameter"` | |
49 | + Desc string `json:"desc"` | |
50 | + Idx int `json:"idx"` | |
51 | 51 | } |
52 | 52 | |
53 | 53 | type GameConfig struct { |
54 | - CardConfig []CardDesc | |
55 | - CatConfig []CatDesc | |
56 | - RedCatConfig []RedCatDesc | |
57 | - TurnTableConfig []TurnTableDesc | |
54 | + CardConfig []CardDesc | |
55 | + CatConfig []CatDesc | |
56 | + RedCatConfig []RedCatDesc | |
57 | + TurnTableConfig []TurnTableDesc | |
58 | 58 | } |
59 | 59 | |
60 | 60 | func GetJsonConf() *GameConfig { |
61 | 61 | return g_jsonconf |
62 | 62 | } |
63 | 63 | |
64 | +func GetTurnTable(ctype int) []TurnTableDesc { | |
65 | + var rtslice []TurnTableDesc | |
66 | + for _, v := range g_jsonconf.TurnTableConfig { | |
67 | + if v.Ttype == ctype { | |
68 | + rtslice = append(rtslice, v) | |
69 | + } | |
70 | + } | |
71 | + return rtslice | |
72 | +} | |
73 | + | |
64 | 74 | func GetCatConfig(lv int) *CatDesc { |
65 | 75 | for _, v := range g_jsonconf.CatConfig { |
66 | 76 | if v.Id == lv { |
... | ... | @@ -70,6 +80,16 @@ func GetCatConfig(lv int) *CatDesc { |
70 | 80 | return nil |
71 | 81 | } |
72 | 82 | |
83 | +//获取转盘配置 | |
84 | +func GetTurnTableCfg(id int) *TurnTableDesc { | |
85 | + for _, v := range g_jsonconf.TurnTableConfig { | |
86 | + if v.Id == id { | |
87 | + return &v | |
88 | + } | |
89 | + } | |
90 | + return nil | |
91 | +} | |
92 | + | |
73 | 93 | //获取红包猫配置 |
74 | 94 | func GetRedCatConfig(lv int) *RedCatDesc { |
75 | 95 | reallv := lv - 100 |
... | ... | @@ -84,7 +104,6 @@ func GetRedCatConfig(lv int) *RedCatDesc { |
84 | 104 | return nil |
85 | 105 | } |
86 | 106 | |
87 | - | |
88 | 107 | func file_get_contents(path string) ([]byte, error) { |
89 | 108 | f, err := os.Open(path) |
90 | 109 | if err != nil { |
... | ... | @@ -148,8 +167,6 @@ func LoadJsonConf() error { |
148 | 167 | return err |
149 | 168 | } |
150 | 169 | |
151 | - | |
152 | - | |
153 | 170 | logger.Info("loadJsonConf success pconf=%v,err=%v", *g_jsonconf, err) |
154 | 171 | return err |
155 | 172 | } | ... | ... |
src/HttpServer/logic/datadef.go
... | ... | @@ -210,6 +210,30 @@ type AddTicketResp struct { |
210 | 210 | Data AddTicketData `json:"data"` |
211 | 211 | } |
212 | 212 | |
213 | +type MultipleData struct { | |
214 | +} | |
215 | + | |
216 | +type MultipleReq struct { | |
217 | + RewardId int `json:"rewardId"` | |
218 | +} | |
219 | + | |
220 | +type MultipleResp struct { | |
221 | + Code int `json:"code"` | |
222 | + Message string `json:"message"` | |
223 | + Data MultipleData `json:"data"` | |
224 | +} | |
225 | + | |
226 | +type DrawTableData struct { | |
227 | + RewardId int `json:"rewardId"` | |
228 | + Coin string `json:"coin"` | |
229 | +} | |
230 | + | |
231 | +type DrawTableResp struct { | |
232 | + Code int `json:"code"` | |
233 | + Message string `json:"message"` | |
234 | + Data DrawTableData `json:"data"` | |
235 | +} | |
236 | + | |
213 | 237 | type AcclecteBoxResp struct { |
214 | 238 | Code int `json:"code"` |
215 | 239 | Message string `json:"message"` |
... | ... | @@ -584,6 +608,9 @@ type UserData struct { |
584 | 608 | GetWatchAdsGoldTime int //看广告领金币次数 |
585 | 609 | DrawTicket int //抽奖券次数 |
586 | 610 | DrawTicketTimes int //剩余增加抽奖券次数 |
611 | + DratMult int //下次抽奖的倍数 | |
612 | + DrawLastRewardId int //上一次的奖励ID | |
613 | + DrawTableCount int //当前抽奖次数 5次以后归零 | |
587 | 614 | IsAuto int //当前是否自动合成 |
588 | 615 | IsBoxAcc int //是否处于加速生成箱子状态 |
589 | 616 | RandGiftNum int //当前剩余空投猫粮次数 | ... | ... |
src/HttpServer/logic/function.go
... | ... | @@ -73,6 +73,52 @@ func (u *UserData) GetCatPos(catlv int) int { |
73 | 73 | return pos |
74 | 74 | } |
75 | 75 | |
76 | +//转盘抽奖 返回抽到的奖项的id | |
77 | +func (u *UserData) DrawTable() int { | |
78 | + idx := -1 | |
79 | + if u.DrawTableCount != 3 { | |
80 | + //抽a类型 | |
81 | + sumrate := float32(0) | |
82 | + tmprate := 0 | |
83 | + rand.Seed(time.Now().UnixNano()) | |
84 | + randnum := rand.Intn(100) | |
85 | + cflist := jsonconf.GetTurnTable(1) | |
86 | + for _, vv := range cflist { | |
87 | + sumrate += vv.Rate | |
88 | + } | |
89 | + | |
90 | + for _, v := range cflist { | |
91 | + tmprate += int(v.Rate / sumrate) | |
92 | + if tmprate >= randnum { | |
93 | + idx = v.Id | |
94 | + break | |
95 | + } | |
96 | + } | |
97 | + | |
98 | + } else { | |
99 | + //抽b类型 | |
100 | + sumrate := float32(0) | |
101 | + tmprate := 0 | |
102 | + rand.Seed(time.Now().UnixNano()) | |
103 | + randnum := rand.Intn(100) | |
104 | + cflist := jsonconf.GetTurnTable(2) | |
105 | + for _, vv := range cflist { | |
106 | + sumrate += vv.Rate | |
107 | + } | |
108 | + | |
109 | + for _, v := range cflist { | |
110 | + tmprate += int(v.Rate / sumrate) | |
111 | + if tmprate >= randnum { | |
112 | + idx = v.Id | |
113 | + break | |
114 | + } | |
115 | + } | |
116 | + } | |
117 | + | |
118 | + logger.Info("DrawTable idx=%v", idx) | |
119 | + return idx | |
120 | +} | |
121 | + | |
76 | 122 | func (u *UserData) HandlePassDay() { |
77 | 123 | isdiffday := false |
78 | 124 | nowtime := time.Now() |
... | ... | @@ -108,7 +154,7 @@ func (u *UserData) HandlePassDay() { |
108 | 154 | u.DoubleLeftTimes = ACCGOLDRATELIMIT |
109 | 155 | u.GetWatchAdsGoldTime = WATCHADSGOLDLIMIT |
110 | 156 | u.DrawTicket = DRAWTICKETNUM |
111 | - u.DoubleLeftTimes = DRAWTICKETGETLIMIT | |
157 | + u.DrawTicketTimes = DRAWTICKETGETLIMIT | |
112 | 158 | } |
113 | 159 | |
114 | 160 | u.LastLoginTime = int(nowtime.Unix()) |
... | ... | @@ -166,7 +212,9 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { |
166 | 212 | udata.RegTime = int(time.Now().Unix()) |
167 | 213 | udata.LastLoginTime = int(time.Now().Unix()) |
168 | 214 | udata.DrawTicket = DRAWTICKETNUM |
169 | - udata.DoubleLeftTimes = DRAWTICKETGETLIMIT | |
215 | + udata.DrawTicketTimes = DRAWTICKETGETLIMIT | |
216 | + udata.DratMult = 1 | |
217 | + udata.DrawTableCount = 1 | |
170 | 218 | |
171 | 219 | //初始化16个猫爬架 |
172 | 220 | for i := 0; i < 16; i++ { | ... | ... |
src/HttpServer/logic/httpserver.go
... | ... | @@ -43,6 +43,8 @@ func startServerHttpServe() { |
43 | 43 | http.HandleFunc("/api/home/limitCatList", LimitCatList) //分红猫列表 |
44 | 44 | http.HandleFunc("/api/turntable/index", QueryTurntable) //转盘主页 |
45 | 45 | http.HandleFunc("/api/turntable/addTicket", AddTicket) //增加抽奖券 |
46 | + http.HandleFunc("/api/turntable/multiple", Multiple) //增加倍数 | |
47 | + http.HandleFunc("/api/turntable/draw", DrawTable) //抽奖 | |
46 | 48 | |
47 | 49 | /////---------------------------------------------------------------------old |
48 | 50 | http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置 |
... | ... | @@ -637,6 +639,42 @@ func RedCatList(w http.ResponseWriter, r *http.Request) { |
637 | 639 | //HandlerRecvTimingReward(w, s, Uuid) |
638 | 640 | } |
639 | 641 | |
642 | +func DrawTable(w http.ResponseWriter, r *http.Request) { | |
643 | + Uuid := 0 | |
644 | + if len(r.Header) > 0 { | |
645 | + Uuid, _ = strconv.Atoi(r.Header.Get("uid")) | |
646 | + } | |
647 | + if Uuid == 0 { | |
648 | + SetHeader(w) | |
649 | + return | |
650 | + } | |
651 | + result, _ := ioutil.ReadAll(r.Body) | |
652 | + r.Body.Close() | |
653 | + | |
654 | + s := string(result) | |
655 | + logger.Info("DrawTable , body:%v,uuid=%v", s, Uuid) | |
656 | + | |
657 | + HandlerDrawTable(w, s, Uuid) | |
658 | +} | |
659 | + | |
660 | +func Multiple(w http.ResponseWriter, r *http.Request) { | |
661 | + Uuid := 0 | |
662 | + if len(r.Header) > 0 { | |
663 | + Uuid, _ = strconv.Atoi(r.Header.Get("uid")) | |
664 | + } | |
665 | + if Uuid == 0 { | |
666 | + SetHeader(w) | |
667 | + return | |
668 | + } | |
669 | + result, _ := ioutil.ReadAll(r.Body) | |
670 | + r.Body.Close() | |
671 | + | |
672 | + s := string(result) | |
673 | + logger.Info("Multiple , body:%v,uuid=%v", s, Uuid) | |
674 | + | |
675 | + HandlerMultiple(w, s, Uuid) | |
676 | +} | |
677 | + | |
640 | 678 | func AddTicket(w http.ResponseWriter, r *http.Request) { |
641 | 679 | Uuid := 0 |
642 | 680 | if len(r.Header) > 0 { | ... | ... |
src/HttpServer/logic/logic.go
... | ... | @@ -403,6 +403,112 @@ func HandlerGetMainPageInfo(w http.ResponseWriter, data string, uuid int) { |
403 | 403 | fmt.Fprint(w, string(respstr)) |
404 | 404 | } |
405 | 405 | |
406 | +func HandlerDrawTable(w http.ResponseWriter, data string, uuid int) { | |
407 | + SetHeader(w) | |
408 | + var resp DrawTableResp | |
409 | + resp.Code = 0 | |
410 | + resp.Message = "success" | |
411 | + | |
412 | + for { | |
413 | + | |
414 | + uinfo, err := GetUserInfo(strconv.Itoa(uuid)) | |
415 | + if err != nil || uinfo == nil { | |
416 | + logger.Error("HandlerDrawTable getuserinfo failed=%v", err) | |
417 | + resp.Code = 1 | |
418 | + resp.Message = "get userinfo failed" | |
419 | + break | |
420 | + } | |
421 | + | |
422 | + //抽奖券数量是否足够 | |
423 | + if uinfo.DrawTicket <= 0 { | |
424 | + logger.Error("HandlerDrawTable ticketnotenough failed=%v", err) | |
425 | + resp.Code = 1 | |
426 | + resp.Message = "ticketnotenough" | |
427 | + break | |
428 | + } | |
429 | + | |
430 | + //根据抽奖次数 | |
431 | + tid := uinfo.DrawTable() | |
432 | + tablecfg := jsonconf.GetTurnTableCfg(tid) | |
433 | + if tablecfg == nil { | |
434 | + logger.Error("HandlerDrawTable tid failed=%v", tid) | |
435 | + resp.Code = 1 | |
436 | + resp.Message = "tidnotright" | |
437 | + break | |
438 | + } | |
439 | + | |
440 | + //加金币 此处现金概率为零不做处理 | |
441 | + | |
442 | + addgold := int64(tablecfg.Parameter) * uinfo.Goldrate | |
443 | + if uinfo.DratMult != 1 { | |
444 | + addgold = addgold * int64(uinfo.DratMult) | |
445 | + } | |
446 | + | |
447 | + uinfo.DrawTicket-- | |
448 | + uinfo.DratMult = 1 | |
449 | + uinfo.DrawTableCount++ | |
450 | + if uinfo.DrawTableCount > 5 { | |
451 | + uinfo.DrawTableCount = 1 | |
452 | + } | |
453 | + | |
454 | + uinfo.Gold += addgold | |
455 | + | |
456 | + resp.Data.Coin = strconv.FormatInt(uinfo.Gold, 10) | |
457 | + resp.Data.RewardId = tid | |
458 | + resp.Code = 0 | |
459 | + break | |
460 | + } | |
461 | + | |
462 | + //回包 | |
463 | + logger.Info("HandlerDrawTable resp=%+v", resp) | |
464 | + respstr, _ := json.Marshal(&resp) | |
465 | + fmt.Fprint(w, string(respstr)) | |
466 | + | |
467 | +} | |
468 | + | |
469 | +func HandlerMultiple(w http.ResponseWriter, data string, uuid int) { | |
470 | + SetHeader(w) | |
471 | + var resp MultipleResp | |
472 | + resp.Code = 0 | |
473 | + resp.Message = "success" | |
474 | + var rdata MultipleReq | |
475 | + | |
476 | + err := json.Unmarshal([]byte(data), &rdata) | |
477 | + for { | |
478 | + if err != nil { | |
479 | + logger.Error("HandlerMultiple json unmarshal failed=%v", err) | |
480 | + resp.Code = 1 | |
481 | + resp.Message = "json failed" | |
482 | + break | |
483 | + } | |
484 | + | |
485 | + uinfo, err := GetUserInfo(strconv.Itoa(uuid)) | |
486 | + if err != nil || uinfo == nil { | |
487 | + logger.Error("HandlerMultiple getuserinfo failed=%v", err) | |
488 | + resp.Code = 1 | |
489 | + resp.Message = "get userinfo failed" | |
490 | + break | |
491 | + } | |
492 | + cfg := jsonconf.GetTurnTableCfg(rdata.RewardId) | |
493 | + if cfg == nil { | |
494 | + logger.Error("HandlerMultiple getcfgfailed failed=%v", rdata.RewardId) | |
495 | + resp.Code = 1 | |
496 | + resp.Message = "getcfgfailed failed" | |
497 | + break | |
498 | + } | |
499 | + | |
500 | + uinfo.DratMult = cfg.Parameter | |
501 | + SaveUserInfo(uinfo, strconv.Itoa(uuid)) | |
502 | + resp.Code = 0 | |
503 | + break | |
504 | + } | |
505 | + | |
506 | + //回包 | |
507 | + respstr, _ := json.Marshal(&resp) | |
508 | + fmt.Fprint(w, string(respstr)) | |
509 | + | |
510 | +} | |
511 | + | |
406 | 512 | func HandlerAddTicket(w http.ResponseWriter, data string, uuid int) { |
407 | 513 | SetHeader(w) |
408 | 514 | var resp AddTicketResp | ... | ... |