logic.go
3.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package cardholder
import (
"apigame/dto"
"apigame/service/constd"
"apigame/util/util-lx/lxalilog"
"apigame/util/util-lx/lxtime"
"apigame/util/uttype"
)
// SaveData 存储数据
func SaveData(gameId string, d *dto.CardHolderData) {
d.UpdateTime = lxtime.NowUninx()
d.Encode()
dto.SavePlayerData(gameId, d.Uid, d)
}
func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) {
d = dto.NewCardHolderData(uid)
has, err := dto.LoadPlayerData(gameId, uid, d)
if err != nil {
lxalilog.Errors(err, "cardholder._LoadData", gameId, uid)
return
}
// 解析
if has {
d.Decode()
}
return
}
// LoadData 获取数据 外部接口
func LoadData(gameId string, uid int64, configId int64) (d *dto.CardHolderData) {
d = _LoadData(gameId, uid)
// 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
if configId != 0 &&
configId != d.ActivityId {
d.ActivityId = configId
d.Details = dto.NewCardHolderDataDetails()
SaveData(gameId, d)
}
return
}
// CheckStatus 判断活动是否开启
func CheckStatus(conf *CardActivityConfig) string {
sec := lxtime.NowUninx()
if conf.Id == 0 {
return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
}
if sec < conf.Raw.StartTime {
return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
}
if sec > conf.Raw.EndTime {
return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR
}
return constd.RECODE_OK
}
// CheckGameData 检查游戏数据 轮次等
func CheckGameData(d *dto.CardHolderData, conf *CardActivityConfig) string {
if d.Details.Round > conf.Raw.Round {
return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR
}
return constd.RECODE_OK
}
// GetUserSequenceIdAndCohort 获取 用户序列组ID(sequenceId) 用户分组(cohort)
func GetUserSequenceIdAndCohort(uid int64) (sequenceId, cohort string) {
// todo 这里后续要对接
sequenceId = "1"
cohort = "1"
return
}
// GetOneFromArray 从配置的数组里获取一个值 scale=之前刻度
func GetOneFromArray(array []string, scale int) string {
length := len(array)
if length < 1 {
return ""
}
if length == 1 {
return array[0]
}
return array[scale%length]
}
// GetListFromArray 从配置的数组里获取一组值 scale=之前刻度 count=数目
func GetListFromArray(array []string, scale, count int) []string {
list := make([]string, 0)
if count < 0 {
return list
}
s := scale
for i := 0; i < count; i++ {
one := GetOneFromArray(array, s)
list = append(list, one)
s++
}
return list
}
// GetNewCard 按顺序查找数目最少的一张卡抽取
func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int {
if len(conf.CardConfig) < 1 {
return 0
}
rate := int64(100000000)
list := make([]int64, 0)
for id, _ := range conf.CardConfig {
count, _ := gameData.Details.Cards[id]
index := int64(count)*rate + int64(id)
list = append(list, index)
}
indexMin := uttype.Min(list...)
return int(indexMin % rate)
}
// HandleNextRound 处理轮次完成 保留卡包 星级序列刻度 卡牌序列刻度
func HandleNextRound(gameData *dto.CardHolderData) {
gameData.Details.Round += 1
gameData.Details.Cards = make(map[int]int)
gameData.Details.Album = make(map[string]int)
}