Merge branch 'develop' into sdk
This commit is contained in:
commit
57c07ca2a3
@ -23,7 +23,8 @@ func init() {
|
||||
func GetActivityGiftId(chargeId int) int {
|
||||
data, err := gamedata.GetData(CFG_ACTIVITY_GIFT)
|
||||
if err != nil {
|
||||
log.Debug("GetActivityGift err:%v", err)
|
||||
log.Debug("GetActivityGiftId err:%v", err)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
ChargeId := gamedata.GetIntValue(v, "ChargeId")
|
||||
@ -34,10 +35,11 @@ func GetActivityGiftId(chargeId int) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetAcitivityGiftItems(chargeId int) []*item.Item {
|
||||
func GetActivityGiftItems(chargeId int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_ACTIVITY_GIFT)
|
||||
if err != nil {
|
||||
log.Debug("GetAcitivityGiftItems err:%v", err)
|
||||
log.Debug("GetActivityGiftItems err:%v", err)
|
||||
return nil
|
||||
}
|
||||
for _, v := range data {
|
||||
ChargeId := gamedata.GetIntValue(v, "ChargeId")
|
||||
@ -53,9 +55,10 @@ func GetActivityList() []*gamedata.ActivityData {
|
||||
data, err := gamedata.GetData(CFG_ACTIVITY)
|
||||
if err != nil {
|
||||
log.Debug("GetActivityList err:%v", err)
|
||||
return nil
|
||||
}
|
||||
Now := GoUtil.Now()
|
||||
var List []*gamedata.ActivityData
|
||||
List := make([]*gamedata.ActivityData, 0, len(data))
|
||||
|
||||
for k, v := range data {
|
||||
StartTimeStr := gamedata.GetStringValue(v, "StartTime")
|
||||
@ -63,7 +66,11 @@ func GetActivityList() []*gamedata.ActivityData {
|
||||
StartTime := GoUtil.ParseTime(StartTimeStr)
|
||||
EndTime := GoUtil.ParseTime(EndTimeStr)
|
||||
if Now >= StartTime && Now <= EndTime {
|
||||
Id, _ := strconv.Atoi(k)
|
||||
Id, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetActivityList parse id err:%v, key:%s", err, k)
|
||||
continue
|
||||
}
|
||||
Type := gamedata.GetIntValue(v, "Type")
|
||||
Name := gamedata.GetStringValue(v, "Name")
|
||||
Title := gamedata.GetStringValue(v, "Title")
|
||||
@ -84,10 +91,11 @@ func GetActivityList() []*gamedata.ActivityData {
|
||||
return List
|
||||
}
|
||||
|
||||
func GetAcitivityRewardItems(ActId int) []*item.Item {
|
||||
func GetActivityRewardItems(ActId int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_ACTIVITY_GIFT)
|
||||
if err != nil {
|
||||
log.Debug("GetAcitivityGiftItems err:%v", err)
|
||||
log.Debug("GetActivityRewardItems err:%v", err)
|
||||
return nil
|
||||
}
|
||||
for _, v := range data {
|
||||
ChargeId := gamedata.GetIntValue(v, "ChargeId")
|
||||
@ -104,8 +112,10 @@ func GetActivityTitle(ActId int) (string, string) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_ACTIVITY, ActId)
|
||||
if err != nil {
|
||||
log.Debug("GetActivityTitle err:%v", err)
|
||||
return "", ""
|
||||
}
|
||||
return languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Title")), languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Title"))
|
||||
title := gamedata.GetStringValue(data, "Title")
|
||||
return languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, title), languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, title)
|
||||
}
|
||||
|
||||
func GetActivityRecycleMail(ActId int) (string, string, string) {
|
||||
|
||||
@ -20,7 +20,7 @@ func GetInitList() []int {
|
||||
log.Debug("GetInitList err: %v", err)
|
||||
return nil
|
||||
}
|
||||
r := make([]int, 0)
|
||||
r := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
IsInit := gamedata.GetIntValue(v, "Init")
|
||||
if IsInit == 1 {
|
||||
@ -47,7 +47,7 @@ func GetAllId() []int {
|
||||
log.Debug("GetAllId err: %v", err)
|
||||
return nil
|
||||
}
|
||||
r := make([]int, 0)
|
||||
r := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
Id, _ := strconv.Atoi(k)
|
||||
r = append(r, Id)
|
||||
|
||||
@ -12,8 +12,9 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
ENERGY_SHOP_MUL = "energy_shop_mul"
|
||||
ENERGY_CFG = "BaseEnergy"
|
||||
ENERGY_SHOP_MUL = "energy_shop_mul"
|
||||
ENERGY_CFG = "BaseEnergy"
|
||||
MAX_ENERGY_LEVEL = 999 // 最大能量等级上限
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -27,17 +28,28 @@ func GetEnergyByMul(T int) float64 {
|
||||
log.Debug("GetEnergyByMul err:%v", err)
|
||||
return 0
|
||||
}
|
||||
d := data["Value"].(map[string]interface{})
|
||||
if len(d) == 0 {
|
||||
|
||||
valueData, ok := data["Value"]
|
||||
if !ok {
|
||||
log.Debug("GetEnergyByMul: Value field not found")
|
||||
return 0
|
||||
}
|
||||
|
||||
d, ok := valueData.(map[string]interface{})
|
||||
if !ok || len(d) == 0 {
|
||||
log.Debug("GetEnergyByMul: Value is not a valid map")
|
||||
return 0
|
||||
}
|
||||
|
||||
T = min(T, len(d))
|
||||
T1 := strconv.Itoa(T)
|
||||
if v, ok := d[T1]; ok {
|
||||
return v.(float64)
|
||||
} else {
|
||||
return 0
|
||||
if floatVal, ok := v.(float64); ok {
|
||||
return floatVal
|
||||
}
|
||||
log.Debug("GetEnergyByMul: value is not float64, key=%s", T1)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetFriendReplyReward() []*item.Item {
|
||||
@ -49,15 +61,25 @@ func GetFriendReplyReward() []*item.Item {
|
||||
return gamedata.GetItemList(data, "Value")
|
||||
}
|
||||
|
||||
func GetEnergyByADNum() []*item.Item {
|
||||
data, err := gamedata.GetDataByKey(CFG_BASE, "ad_energy_gift")
|
||||
if err != nil {
|
||||
log.Debug("GetEnergyByADNum err:%v", err)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Value")
|
||||
}
|
||||
|
||||
func GetMaxEnergyMul(Lv int, Energy int) int {
|
||||
Mul := 0
|
||||
for i := 1; i < 999; i++ {
|
||||
for i := 1; i <= MAX_ENERGY_LEVEL; i++ {
|
||||
data, err := gamedata.GetDataByIntKey(ENERGY_CFG, i)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
UnlockLv := gamedata.GetIntValue(data, "UnlockLv")
|
||||
if Lv < UnlockLv || Energy < gamedata.GetIntValue(data, "NeedEnergy") {
|
||||
needEnergy := gamedata.GetIntValue(data, "NeedEnergy")
|
||||
if Lv < UnlockLv || Energy < needEnergy {
|
||||
break
|
||||
}
|
||||
Mul = i - 1
|
||||
@ -68,6 +90,7 @@ func GetMaxEnergyMul(Lv int, Energy int) int {
|
||||
func GetLimitEnergyMul(Lv int) int {
|
||||
data, err := gamedata.GetDataByIntKey(ENERGY_CFG, Lv+1)
|
||||
if err != nil {
|
||||
log.Debug("GetLimitEnergyMul err:%v, Lv=%d", err, Lv)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Limit")
|
||||
|
||||
@ -28,14 +28,19 @@ func init() {
|
||||
func GetAllCollectReward() []*item.Item {
|
||||
data, err := gamedata.GetDataByKey(CARD_CONST_CFG_NAME, "all_collect_reward")
|
||||
if err != nil {
|
||||
log.Debug("GetAllCollectReward data not found")
|
||||
log.Debug("GetAllCollectReward err:%v", err)
|
||||
return nil
|
||||
}
|
||||
return item.ParseItem(data["Value"])
|
||||
if value, ok := data["Value"]; ok {
|
||||
return item.ParseItem(value)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func GetStarById(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CARD_DETAIL_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetStarById data not found")
|
||||
log.Debug("GetStarById err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Star")
|
||||
}
|
||||
@ -43,7 +48,8 @@ func GetStarById(Id int) int {
|
||||
func GetRoundById(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CARD_DETAIL_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetRoundById data not found")
|
||||
log.Debug("GetRoundById err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Round")
|
||||
}
|
||||
@ -51,31 +57,31 @@ func GetRoundById(Id int) int {
|
||||
// 获取开启卡包获得的卡牌数量
|
||||
func GetPackRewardCnt(Star int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CARD_PACK_CFG_NAME, Star)
|
||||
|
||||
if err != nil {
|
||||
log.Debug("GetPackRewardCnt data not found")
|
||||
log.Debug("GetPackRewardCnt err:%v, Star=%d", err, Star)
|
||||
return 0
|
||||
}
|
||||
|
||||
return gamedata.GetIntValue(data, "RewardCnt")
|
||||
}
|
||||
|
||||
// 获取开启开包比得x星卡
|
||||
// 获取开启开包必得x星卡
|
||||
func GetPackMustHave(Star int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CARD_PACK_CFG_NAME, Star)
|
||||
if err != nil {
|
||||
log.Debug("GetPackMustHave data not found")
|
||||
log.Debug("GetPackMustHave err:%v, Star=%d", err, Star)
|
||||
return 0
|
||||
}
|
||||
|
||||
return gamedata.GetIntValue(data, "MustHave")
|
||||
}
|
||||
|
||||
// 根据星级获取卡牌列表
|
||||
func GetCardListByStar(Round, Star, IsGold int) []int {
|
||||
var CardList []int
|
||||
data, err := gamedata.GetData(CARD_DETAIL_CFG_NAME)
|
||||
if err != nil {
|
||||
log.Debug("GetCardListByStar data not found")
|
||||
log.Debug("GetCardListByStar err:%v", err)
|
||||
return nil
|
||||
}
|
||||
CardList := make([]int, 0, len(data)/10)
|
||||
for k, v := range data {
|
||||
Extra := gamedata.GetIntValue(v, "Round")
|
||||
if Round < Extra {
|
||||
@ -84,7 +90,11 @@ func GetCardListByStar(Round, Star, IsGold int) []int {
|
||||
vStar := gamedata.GetIntValue(v, "Star")
|
||||
isGold := gamedata.GetIntValue(v, "IsGold")
|
||||
if vStar == Star && IsGold == isGold {
|
||||
id, _ := strconv.Atoi(k)
|
||||
id, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetCardListByStar parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
CardList = append(CardList, id)
|
||||
}
|
||||
}
|
||||
@ -93,15 +103,15 @@ func GetCardListByStar(Round, Star, IsGold int) []int {
|
||||
|
||||
// 获取随机卡牌
|
||||
func GetRandListByStar(Star int) map[int]int {
|
||||
var randList []int
|
||||
data, err := gamedata.GetDataByIntKey(CARD_PACK_CFG_NAME, Star)
|
||||
if err != nil {
|
||||
log.Debug("GetRandListByStar data not found")
|
||||
log.Debug("GetRandListByStar err:%v, Star=%d", err, Star)
|
||||
return nil
|
||||
}
|
||||
r1 := gamedata.GetStringValue(data, "RandRate")
|
||||
r2 := strings.Split(r1, ",")
|
||||
randList = GoUtil.SliceStringToInt(r2)
|
||||
r := make(map[int]int)
|
||||
randList := GoUtil.SliceStringToInt(r2)
|
||||
r := make(map[int]int, len(randList))
|
||||
for k, v := range randList {
|
||||
r[k+1] = v
|
||||
}
|
||||
@ -125,7 +135,8 @@ func GetCollectReward(Color int) ([]*item.Item, int) {
|
||||
func GetExchangeCfg(Id int) (int, []*item.Item) {
|
||||
data, err := gamedata.GetDataByIntKey(CARD_EXCHANGE_CFG, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetExchangeCfg data not found")
|
||||
log.Debug("GetExchangeCfg err:%v, Id=%d", err, Id)
|
||||
return 0, nil
|
||||
}
|
||||
CostStar := gamedata.GetIntValue(data, "CostStar")
|
||||
itemList := gamedata.GetItemList(data, "Item")
|
||||
@ -136,14 +147,18 @@ func GetExchangeCfg(Id int) (int, []*item.Item) {
|
||||
func GetCardListByColor(Id int) []int {
|
||||
data, err := gamedata.GetData(CARD_DETAIL_CFG_NAME)
|
||||
if err != nil {
|
||||
log.Debug("GetCardListByColor data not found")
|
||||
return []int{}
|
||||
log.Debug("GetCardListByColor err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
var r []int
|
||||
r := make([]int, 0, len(data)/5)
|
||||
for k, v := range data {
|
||||
color := gamedata.GetIntValue(v, "PictureAlbum")
|
||||
if color == Id {
|
||||
k1, _ := strconv.Atoi(k)
|
||||
k1, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetCardListByColor parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
r = append(r, k1)
|
||||
}
|
||||
}
|
||||
@ -154,16 +169,20 @@ func GetCardListByColor(Id int) []int {
|
||||
func GetAllCardId(Round int) []int {
|
||||
data, err := gamedata.GetData(CARD_DETAIL_CFG_NAME)
|
||||
if err != nil {
|
||||
log.Debug("GetCardListByColor data not found")
|
||||
return []int{}
|
||||
log.Debug("GetAllCardId err:%v, Round=%d", err, Round)
|
||||
return nil
|
||||
}
|
||||
var r []int
|
||||
r := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
Extra := gamedata.GetIntValue(v, "Round")
|
||||
if Round < Extra {
|
||||
continue
|
||||
}
|
||||
k1, _ := strconv.Atoi(k)
|
||||
k1, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetAllCardId parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
r = append(r, k1)
|
||||
}
|
||||
return r
|
||||
@ -172,7 +191,8 @@ func GetAllCardId(Round int) []int {
|
||||
func CheckCardIsGold(Id int) bool {
|
||||
data, err := gamedata.GetDataByIntKey(CARD_DETAIL_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("CheckCardIsGold data not found")
|
||||
log.Debug("CheckCardIsGold err:%v, Id=%d", err, Id)
|
||||
return false
|
||||
}
|
||||
return gamedata.GetIntValue(data, "IsGold") == 1
|
||||
}
|
||||
@ -180,7 +200,8 @@ func CheckCardIsGold(Id int) bool {
|
||||
func GetCardDuration() int64 {
|
||||
data, err := gamedata.GetDataByKey(CARD_CONST_CFG_NAME, "duration")
|
||||
if err != nil {
|
||||
log.Debug("GetCardDuration data not found")
|
||||
log.Debug("GetCardDuration err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return int64(gamedata.GetIntValue(data, "Value"))
|
||||
}
|
||||
@ -188,7 +209,8 @@ func GetCardDuration() int64 {
|
||||
func GetExTimes() int {
|
||||
data, err := gamedata.GetDataByKey(CARD_CONST_CFG_NAME, "exchange_times")
|
||||
if err != nil {
|
||||
log.Debug("GetExTimes data not found")
|
||||
log.Debug("GetExTimes err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
@ -196,7 +218,8 @@ func GetExTimes() int {
|
||||
func GetReqTimes() int {
|
||||
data, err := gamedata.GetDataByKey(CARD_CONST_CFG_NAME, "request_times")
|
||||
if err != nil {
|
||||
log.Debug("GetReqTimes data not found")
|
||||
log.Debug("GetReqTimes err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
@ -204,7 +227,8 @@ func GetReqTimes() int {
|
||||
func GetItemIdByCardId(CardId int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CARD_DETAIL_CFG_NAME, CardId)
|
||||
if err != nil {
|
||||
log.Debug("GetItemIdByCardId data not found")
|
||||
log.Debug("GetItemIdByCardId err:%v, CardId=%d", err, CardId)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "ItemId")
|
||||
}
|
||||
@ -212,7 +236,11 @@ func GetItemIdByCardId(CardId int) int {
|
||||
func GetSeasonFirstReward() []*item.Item {
|
||||
data, err := gamedata.GetDataByKey(CARD_CONST_CFG_NAME, "season_first")
|
||||
if err != nil {
|
||||
log.Debug("GetSeasonFirstReward data not found")
|
||||
log.Debug("GetSeasonFirstReward err:%v", err)
|
||||
return nil
|
||||
}
|
||||
return item.ParseItem(data["Value"])
|
||||
if value, ok := data["Value"]; ok {
|
||||
return item.ParseItem(value)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"server/game/mod/item"
|
||||
GoUtil "server/game_util"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -29,6 +30,7 @@ func init() {
|
||||
func GetGameNum(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_TEMPLATE_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetGameNum err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "PassNum")
|
||||
@ -38,6 +40,7 @@ func GetGameMaxProgress(Id int) int {
|
||||
TemplateId := GetTemplateId(Id)
|
||||
data, err := gamedata.GetData(CATNIP_GAME_CFG_NAME)
|
||||
if err != nil {
|
||||
log.Debug("GetGameMaxProgress err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
MaxProgress := 0
|
||||
@ -53,10 +56,11 @@ func GetGameMaxProgress(Id int) int {
|
||||
func GetJackpotItem(Mul int) (int, []*item.Item, int, int) {
|
||||
data, err := gamedata.GetData(CATNIP_JACKPOT_CFG_NAME)
|
||||
if err != nil {
|
||||
log.Debug("GetJackpotItem err:%v, Mul=%d", err, Mul)
|
||||
return 0, nil, 0, 0
|
||||
}
|
||||
JackpotType := GetJackpotType(Mul)
|
||||
r := make(map[int]int)
|
||||
r := make(map[int]int, len(data))
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "Type") == JackpotType {
|
||||
r[GoUtil.Int(k)] = 1
|
||||
@ -68,6 +72,7 @@ func GetJackpotItem(Mul int) (int, []*item.Item, int, int) {
|
||||
}
|
||||
itemData, err := gamedata.GetDataByIntKey(CATNIP_JACKPOT_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetJackpotItem get itemData err:%v, Id=%d", err, Id)
|
||||
return 0, nil, 0, 0
|
||||
}
|
||||
return Id, gamedata.GetItemList(itemData, "Items"), gamedata.GetIntValue(itemData, "Growth"), gamedata.GetIntValue(itemData, "FriendItems")
|
||||
@ -76,6 +81,7 @@ func GetJackpotItem(Mul int) (int, []*item.Item, int, int) {
|
||||
func GetJackpotType(Mul int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_MULTIPLIER_CFG_NAME, Mul)
|
||||
if err != nil {
|
||||
log.Debug("GetJackpotType err:%v, Mul=%d", err, Mul)
|
||||
return 0
|
||||
}
|
||||
R := map[int]int{
|
||||
@ -89,6 +95,7 @@ func GetJackpotType(Mul int) int {
|
||||
func GetTemplateId(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_TEMPLATE_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetTemplateId err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Template")
|
||||
@ -98,15 +105,16 @@ func GetProgressReward(Id int, Rewards []int, Progress int) ([]*item.Item, []int
|
||||
TemplateId := GetTemplateId(Id)
|
||||
data, err := gamedata.GetData(CATNIP_GAME_CFG_NAME)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressReward err:%v, Id=%d", err, Id)
|
||||
return nil, nil
|
||||
}
|
||||
Items := []*item.Item{}
|
||||
Ids := []int{}
|
||||
Items := make([]*item.Item, 0, len(data))
|
||||
Ids := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
Id := GoUtil.Int(k)
|
||||
if !GoUtil.InArray(Id, Rewards) && gamedata.GetIntValue(v, "Need") < Progress && gamedata.GetIntValue(v, "Template") == TemplateId {
|
||||
rewardId := GoUtil.Int(k)
|
||||
if !GoUtil.InArray(rewardId, Rewards) && gamedata.GetIntValue(v, "Need") < Progress && gamedata.GetIntValue(v, "Template") == TemplateId {
|
||||
Items = append(Items, gamedata.GetItemList(v, "Items")...)
|
||||
Ids = append(Ids, GoUtil.Int(k))
|
||||
Ids = append(Ids, rewardId)
|
||||
}
|
||||
}
|
||||
return Items, Ids
|
||||
@ -116,6 +124,7 @@ func GetProgressNum(Id int) int {
|
||||
TemplateId := GetTemplateId(Id)
|
||||
data, err := gamedata.GetData(CATNIP_GAME_CFG_NAME)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressNum err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
Num := 0
|
||||
@ -130,6 +139,7 @@ func GetProgressNum(Id int) int {
|
||||
func GetItemCost(Id, Mul int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_TEMPLATE_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetItemCost err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
return item.MutilItem(gamedata.GetItemList(data, "ItemCost"), Mul)
|
||||
@ -138,6 +148,7 @@ func GetItemCost(Id, Mul int) []*item.Item {
|
||||
func GetGrandReward(Id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_TEMPLATE_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetGrandReward err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Reward")
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"server/game/mod/item"
|
||||
GoUtil "server/game_util"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -23,6 +24,7 @@ func init() {
|
||||
func GetGroupId(N int) int {
|
||||
data, err := gamedata.GetData(CFG_CHAMPSHIP_GROUP)
|
||||
if err != nil {
|
||||
log.Debug("GetGroupId err:%v, N=%d", err, N)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -36,6 +38,7 @@ func GetGroupId(N int) int {
|
||||
func GetChessScore(ChessLv int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_CHAMPSHIP_SCORE, ChessLv)
|
||||
if err != nil {
|
||||
log.Debug("GetChessScore err:%v, ChessLv=%d", err, ChessLv)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Score")
|
||||
@ -44,9 +47,10 @@ func GetChessScore(ChessLv int) int {
|
||||
func GetReward(Reward, Score int) (int, []*item.Item) {
|
||||
data, err := gamedata.GetData(CFG_CHAMPSHIP_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetReward err:%v, Reward=%d, Score=%d", err, Reward, Score)
|
||||
return Reward, nil
|
||||
}
|
||||
r := make([]*item.Item, 0)
|
||||
r := make([]*item.Item, 0, len(data))
|
||||
NewReward := Reward
|
||||
for k, v := range data {
|
||||
Id := GoUtil.Int(k)
|
||||
@ -65,6 +69,7 @@ func GetReward(Reward, Score int) (int, []*item.Item) {
|
||||
func GetRewardItems(Reward int) ([]*item.Item, int) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_CHAMPSHIP_JACKPOT, Reward)
|
||||
if err != nil {
|
||||
log.Debug("GetRewardItems err:%v, Reward=%d", err, Reward)
|
||||
return nil, 0
|
||||
}
|
||||
return gamedata.GetItemList(data, "Items"), gamedata.GetIntValue(data, "Score")
|
||||
@ -73,6 +78,7 @@ func GetRewardItems(Reward int) ([]*item.Item, int) {
|
||||
func GetRewardTotalScore(Reward int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_CHAMPSHIP_JACKPOT, Reward)
|
||||
if err != nil {
|
||||
log.Debug("GetRewardTotalScore err:%v, Reward=%d", err, Reward)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Total")
|
||||
@ -81,6 +87,7 @@ func GetRewardTotalScore(Reward int) int {
|
||||
func GetRankReward(Rank int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_CHAMPSHIP_RANK)
|
||||
if err != nil {
|
||||
log.Debug("GetRankReward err:%v, Rank=%d", err, Rank)
|
||||
return nil
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -94,6 +101,7 @@ func GetRankReward(Rank int) []*item.Item {
|
||||
func GetMaxRewardId() int {
|
||||
data, err := gamedata.GetData(CFG_CHAMPSHIP_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetMaxRewardId err:%v", err)
|
||||
return 0
|
||||
}
|
||||
MaxId := 0
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"server/game/mod/item"
|
||||
GoUtil "server/game_util"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
@ -37,6 +38,7 @@ func init() {
|
||||
func GetADReward(ChargeId int) ([]*item.Item, int) {
|
||||
data, err := gamedata.GetData(CFG_CHARGE_AD)
|
||||
if err != nil {
|
||||
log.Debug("GetADReward err:%v, ChargeId=%d", err, ChargeId)
|
||||
return nil, 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -50,6 +52,7 @@ func GetADReward(ChargeId int) ([]*item.Item, int) {
|
||||
func GetWeeklyDiscountDay() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "weekly_discount_day")
|
||||
if err != nil {
|
||||
log.Debug("GetWeeklyDiscountDay err:%v", err)
|
||||
return -1
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -58,6 +61,7 @@ func GetWeeklyDiscountDay() int {
|
||||
func GetMoneyCharge(ChargeId int) float64 {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_CHARGE, ChargeId)
|
||||
if err != nil {
|
||||
log.Debug("GetMoneyCharge err:%v, ChargeId=%d", err, ChargeId)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetFloatValue(data, "Money")
|
||||
@ -66,6 +70,7 @@ func GetMoneyCharge(ChargeId int) float64 {
|
||||
func GetDiamondShopReward(ChargeId int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_DIAMOND_SHOP)
|
||||
if err != nil {
|
||||
log.Debug("GetDiamondShopReward err:%v, ChargeId=%d", err, ChargeId)
|
||||
return nil
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -79,6 +84,7 @@ func GetDiamondShopReward(ChargeId int) []*item.Item {
|
||||
func GetEnergyShopId(ChargeId int) int {
|
||||
data, err := gamedata.GetData(CFG_ENERGY_SHOP)
|
||||
if err != nil {
|
||||
log.Debug("GetEnergyShopId err:%v, ChargeId=%d", err, ChargeId)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -92,11 +98,24 @@ func GetEnergyShopId(ChargeId int) int {
|
||||
func GetWeeklyInfo(Pos int) (int, int) {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "weekly_chess_shop")
|
||||
if err != nil {
|
||||
log.Debug("GetWeeklyInfo err:%v, Pos=%d", err, Pos)
|
||||
return 0, 0
|
||||
}
|
||||
valueData, ok := data["Value"]
|
||||
if !ok {
|
||||
log.Debug("GetWeeklyInfo: Value field not found")
|
||||
return 0, 0
|
||||
}
|
||||
r, ok := valueData.([]interface{})
|
||||
if !ok {
|
||||
log.Debug("GetWeeklyInfo: Value is not []interface{}")
|
||||
return 0, 0
|
||||
}
|
||||
r := data["Value"].([]interface{})
|
||||
for _, v := range r {
|
||||
v1 := v.(map[string]interface{})
|
||||
v1, ok := v.(map[string]interface{})
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
Id := GoUtil.Int(v1["Id"])
|
||||
if Id == Pos {
|
||||
return GoUtil.Int(v1["Discount"]), GoUtil.Int(v1["Limit"])
|
||||
@ -108,12 +127,25 @@ func GetWeeklyInfo(Pos int) (int, int) {
|
||||
func GetWeeklyInfoAll() map[int]gamedata.WeeklyDiscountInfo {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "weekly_chess_shop")
|
||||
if err != nil {
|
||||
log.Debug("GetWeeklyInfoAll err:%v", err)
|
||||
return nil
|
||||
}
|
||||
r := data["Value"].([]interface{})
|
||||
res := make(map[int]gamedata.WeeklyDiscountInfo)
|
||||
valueData, ok := data["Value"]
|
||||
if !ok {
|
||||
log.Debug("GetWeeklyInfoAll: Value field not found")
|
||||
return nil
|
||||
}
|
||||
r, ok := valueData.([]interface{})
|
||||
if !ok {
|
||||
log.Debug("GetWeeklyInfoAll: Value is not []interface{}")
|
||||
return nil
|
||||
}
|
||||
res := make(map[int]gamedata.WeeklyDiscountInfo, len(r))
|
||||
for _, v := range r {
|
||||
v1 := v.(map[string]interface{})
|
||||
v1, ok := v.(map[string]interface{})
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
Id := GoUtil.Int(v1["Id"])
|
||||
res[Id] = gamedata.WeeklyDiscountInfo{
|
||||
Id: GoUtil.Int(v1["Id"]),
|
||||
@ -127,6 +159,7 @@ func GetWeeklyInfoAll() map[int]gamedata.WeeklyDiscountInfo {
|
||||
func GetEnergyShopReward(ChargeId int, First bool) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_ENERGY_SHOP)
|
||||
if err != nil {
|
||||
log.Debug("GetEnergyShopReward err:%v, ChargeId=%d", err, ChargeId)
|
||||
return nil
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -144,6 +177,7 @@ func GetEnergyShopReward(ChargeId int, First bool) []*item.Item {
|
||||
func GetSpecialShopReward(ChargeId int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_SEPCIAL_SHOP)
|
||||
if err != nil {
|
||||
log.Debug("GetSpecialShopReward err:%v, ChargeId=%d", err, ChargeId)
|
||||
return nil
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -157,6 +191,7 @@ func GetSpecialShopReward(ChargeId int) []*item.Item {
|
||||
func GetSpecialShopType(ChargeId int) int {
|
||||
data, err := gamedata.GetData(CFG_SEPCIAL_SHOP)
|
||||
if err != nil {
|
||||
log.Debug("GetSpecialShopType err:%v, ChargeId=%d", err, ChargeId)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -170,6 +205,7 @@ func GetSpecialShopType(ChargeId int) int {
|
||||
func GetFreeShopReward(ChargeId int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_FREE_SHOP, ChargeId)
|
||||
if err != nil {
|
||||
log.Debug("GetFreeShopReward err:%v, ChargeId=%d", err, ChargeId)
|
||||
return nil
|
||||
}
|
||||
Item := gamedata.GetValue(data, "Items")
|
||||
@ -183,9 +219,10 @@ func GetSpecialShopGrade(Money float64, Type int) int {
|
||||
}
|
||||
data, err := gamedata.GetData(CFG_SEPCIAL_SHOP)
|
||||
if err != nil {
|
||||
log.Debug("GetSpecialShopGrade err:%v, Money=%.2f, Type=%d", err, Money, Type)
|
||||
return 0
|
||||
}
|
||||
l := make([]grade, 0)
|
||||
l := make([]grade, 0, len(data))
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "Type") != Type {
|
||||
continue
|
||||
@ -199,8 +236,17 @@ func GetSpecialShopGrade(Money float64, Type int) int {
|
||||
return l[i].money > l[j].money
|
||||
})
|
||||
|
||||
if len(l) == 0 {
|
||||
return 0
|
||||
}
|
||||
maxMoney := 0.0
|
||||
for _, v := range l {
|
||||
if Money <= v.money {
|
||||
if Money >= v.money {
|
||||
maxMoney = max(maxMoney, v.money)
|
||||
}
|
||||
}
|
||||
for _, v := range l {
|
||||
if v.money == maxMoney {
|
||||
return v.id
|
||||
}
|
||||
}
|
||||
@ -210,6 +256,7 @@ func GetSpecialShopGrade(Money float64, Type int) int {
|
||||
func GetUnlockShopLv() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "shop_unlock_lv")
|
||||
if err != nil {
|
||||
log.Debug("GetUnlockShopLv err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -218,6 +265,7 @@ func GetUnlockShopLv() int {
|
||||
func GetSpecialShopCount() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "special_shop_count")
|
||||
if err != nil {
|
||||
log.Debug("GetSpecialShopCount err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -226,6 +274,7 @@ func GetSpecialShopCount() int {
|
||||
func GetAdChargeId() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "ad_charge_id")
|
||||
if err != nil {
|
||||
log.Debug("GetAdChargeId err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -234,6 +283,7 @@ func GetAdChargeId() int {
|
||||
func GetPiggyDuration() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "pig_duration")
|
||||
if err != nil {
|
||||
log.Debug("GetPiggyDuration err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -242,6 +292,7 @@ func GetPiggyDuration() int {
|
||||
func GetPiggyMaxDia() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "pig_max_diamond")
|
||||
if err != nil {
|
||||
log.Debug("GetPiggyMaxDia err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -250,6 +301,7 @@ func GetPiggyMaxDia() int {
|
||||
func GetPiggyRandDia() (int, int) {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "pig_diamond_rand")
|
||||
if err != nil {
|
||||
log.Debug("GetPiggyRandDia err:%v", err)
|
||||
return 0, 0
|
||||
}
|
||||
str := gamedata.GetStringValue(data, "Value")
|
||||
@ -263,6 +315,7 @@ func GetPiggyRandDia() (int, int) {
|
||||
func GetPiggyBankChargeId() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "pig_charge_id")
|
||||
if err != nil {
|
||||
log.Debug("GetPiggyBankChargeId err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -271,6 +324,7 @@ func GetPiggyBankChargeId() int {
|
||||
func GetGiftReward(ChargeId int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_CHARGE_GIFT)
|
||||
if err != nil {
|
||||
log.Debug("GetGiftReward err:%v, ChargeId=%d", err, ChargeId)
|
||||
return nil
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -284,6 +338,7 @@ func GetGiftReward(ChargeId int) []*item.Item {
|
||||
func GetGiftLimit(ChargeId int) int {
|
||||
data, err := gamedata.GetData(CFG_CHARGE_GIFT)
|
||||
if err != nil {
|
||||
log.Debug("GetGiftLimit err:%v, ChargeId=%d", err, ChargeId)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -296,6 +351,7 @@ func GetGiftLimit(ChargeId int) int {
|
||||
func GetGiftId(ChargeId int) int {
|
||||
data, err := gamedata.GetData(CFG_CHARGE_GIFT)
|
||||
if err != nil {
|
||||
log.Debug("GetGiftId err:%v, ChargeId=%d", err, ChargeId)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -309,6 +365,7 @@ func GetGiftId(ChargeId int) int {
|
||||
func GetChargeInfo(ChargeId int) (float64, string) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_CHARGE, ChargeId)
|
||||
if err != nil {
|
||||
log.Debug("GetChargeInfo err:%v, ChargeId=%d", err, ChargeId)
|
||||
return 0, ""
|
||||
}
|
||||
return gamedata.GetFloatValue(data, "Money"), gamedata.GetStringValue(data, "Unit")
|
||||
@ -317,6 +374,7 @@ func GetChargeInfo(ChargeId int) (float64, string) {
|
||||
func GetProduceName(ChargeId int) string {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_CHARGE, ChargeId)
|
||||
if err != nil {
|
||||
log.Debug("GetProduceName err:%v, ChargeId=%d", err, ChargeId)
|
||||
return ""
|
||||
}
|
||||
return gamedata.GetStringValue(data, "Remark")
|
||||
@ -325,6 +383,7 @@ func GetProduceName(ChargeId int) string {
|
||||
func GetWishCount(ItemId int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_CHARGE_WISH, ItemId)
|
||||
if err != nil {
|
||||
log.Debug("GetWishCount err:%v, ItemId=%d", err, ItemId)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Wish")
|
||||
@ -333,6 +392,7 @@ func GetWishCount(ItemId int) int {
|
||||
func GetPetCoinShopReward(ChargeId int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_CHARGE_PETCOIN)
|
||||
if err != nil {
|
||||
log.Debug("GetPetCoinShopReward err:%v, ChargeId=%d", err, ChargeId)
|
||||
return nil
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -346,6 +406,7 @@ func GetPetCoinShopReward(ChargeId int) []*item.Item {
|
||||
func GetWeeklyDiscountStartEnd() (int64, int64) {
|
||||
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "weekly_discount_time")
|
||||
if err != nil {
|
||||
log.Debug("GetWeeklyDiscountStartEnd err:%v", err)
|
||||
return 0, 0
|
||||
}
|
||||
str := gamedata.GetStringValue(data, "Value")
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"server/game/mod/item"
|
||||
GoUtil "server/game_util"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -19,9 +20,10 @@ func init() {
|
||||
func GetJackpotId() []int {
|
||||
data, err := gamedata.GetData(CFG_COLLECT_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetJackpotId err:%v", err)
|
||||
return nil
|
||||
}
|
||||
ret := make([]int, 0)
|
||||
ret := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
ret = append(ret, GoUtil.Int(k))
|
||||
}
|
||||
@ -31,6 +33,7 @@ func GetJackpotId() []int {
|
||||
func GetJackpotItems(Id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_COLLECT_JACKPOT, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetJackpotItems err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Items")
|
||||
@ -39,6 +42,7 @@ func GetJackpotItems(Id int) []*item.Item {
|
||||
func GetRewardNeed(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_COLLECT, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetRewardNeed err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Need")
|
||||
@ -47,6 +51,7 @@ func GetRewardNeed(Id int) int {
|
||||
func GetRewardType(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_COLLECT, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetRewardType err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Type")
|
||||
|
||||
@ -23,16 +23,20 @@ func init() {
|
||||
|
||||
// 获取任务列表
|
||||
func GetTaskList(Lv int) map[int]string {
|
||||
r := make(map[int]string)
|
||||
data, err := gamedata.GetData(DAILY_TASK)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskList get data nil")
|
||||
return r
|
||||
log.Debug("GetTaskList err:%v, Lv=%d", err, Lv)
|
||||
return nil
|
||||
}
|
||||
r := make(map[int]string, len(data))
|
||||
for k, v := range data {
|
||||
lv := gamedata.GetIntValue(v, "Lv")
|
||||
if Lv >= lv {
|
||||
k1, _ := strconv.Atoi(k)
|
||||
k1, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskList parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
r[k1] = gamedata.GetStringValue(v, "Task")
|
||||
}
|
||||
}
|
||||
@ -42,12 +46,16 @@ func GetTaskList(Lv int) map[int]string {
|
||||
func GetTaskActiveId() []int {
|
||||
data, err := gamedata.GetData(DAILY_TASK_ACTIVE)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskActiveId get data nil")
|
||||
return []int{}
|
||||
log.Debug("GetTaskActiveId err:%v", err)
|
||||
return nil
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
Id, _ := strconv.Atoi(k)
|
||||
Id, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskActiveId parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
r = append(r, Id)
|
||||
}
|
||||
return r
|
||||
@ -56,7 +64,7 @@ func GetTaskActiveId() []int {
|
||||
func GetTaskActiveById(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(DAILY_TASK_ACTIVE, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskActiveById get data nil")
|
||||
log.Debug("GetTaskActiveById err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Num")
|
||||
@ -68,16 +76,19 @@ type Jackpot struct {
|
||||
}
|
||||
|
||||
func GetTaskWeekJackpot() map[int]Jackpot {
|
||||
r := make(map[int]Jackpot)
|
||||
|
||||
data, err := gamedata.GetData(DAILY_TASK_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskWeekJackpot get data nil")
|
||||
return r
|
||||
log.Debug("GetTaskWeekJackpot err:%v", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
r := make(map[int]Jackpot, len(data))
|
||||
for k, v := range data {
|
||||
Id, _ := strconv.Atoi(k)
|
||||
Id, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskWeekJackpot parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
isCard := gamedata.GetIntValue(v, "CardPack")
|
||||
Item := item.ParseItem(gamedata.GetValue(v, "Items"))
|
||||
r[Id] = Jackpot{
|
||||
|
||||
@ -25,7 +25,7 @@ func init() {
|
||||
func GetStarCost(AreaId, SortId int) int {
|
||||
data, err := gamedata.GetData(DECORATE_COST)
|
||||
if err != nil {
|
||||
log.Debug("DecorateCost GetStarCost not found")
|
||||
log.Debug("GetStarCost err:%v, AreaId=%d, SortId=%d", err, AreaId, SortId)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -39,21 +39,25 @@ func GetStarCost(AreaId, SortId int) int {
|
||||
func GetAreaId(id int) int {
|
||||
value, err := gamedata.GetDataByIntKey("DecorateCost", id)
|
||||
if err != nil {
|
||||
log.Debug("DecorateCost GetAreaId id:%v not found", id)
|
||||
log.Debug("GetAreaId err:%v, id=%d", err, id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(value["AreaId"])
|
||||
return gamedata.GetIntValue(value, "AreaId")
|
||||
}
|
||||
|
||||
func GetNextAreaId(AreaId, SortId int) int {
|
||||
data, err := gamedata.GetData(DECORATE_COST)
|
||||
if err != nil {
|
||||
log.Debug("DecorateCost GetStarCost not found")
|
||||
log.Debug("GetNextAreaId err:%v, AreaId=%d, SortId=%d", err, AreaId, SortId)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "AreaId") == AreaId && gamedata.GetIntValue(v, "SortId") == SortId {
|
||||
UnionKey, _ := strconv.Atoi(k)
|
||||
UnionKey, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetNextAreaId parse key err:%v, key=%s", err, k)
|
||||
return 0
|
||||
}
|
||||
nextId := UnionKey + 1
|
||||
AreaId = GetAreaId(nextId)
|
||||
return AreaId
|
||||
@ -65,10 +69,10 @@ func GetNextAreaId(AreaId, SortId int) int {
|
||||
func GetAllSortIdByAreaId(AreaId int) []int {
|
||||
data, err := gamedata.GetData(DECORATE_COST)
|
||||
if err != nil {
|
||||
log.Debug("DecorateCost GetAllSortIdByAreaId not found")
|
||||
log.Debug("GetAllSortIdByAreaId err:%v, AreaId=%d", err, AreaId)
|
||||
return nil
|
||||
}
|
||||
var SortIdList []int
|
||||
SortIdList := make([]int, 0, len(data)/5)
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "AreaId") == AreaId {
|
||||
Sort := gamedata.GetIntValue(v, "SortId")
|
||||
@ -84,7 +88,7 @@ func GetAllSortIdByAreaId(AreaId int) []int {
|
||||
func GetProgressReward(Scene, Lv int) []*item.Item {
|
||||
value, err := gamedata.GetData(INDOOR_PROGRESS)
|
||||
if err != nil {
|
||||
log.Debug("IndoorProgress GetProgressReward not found")
|
||||
log.Debug("GetProgressReward err:%v, Scene=%d, Lv=%d", err, Scene, Lv)
|
||||
return nil
|
||||
}
|
||||
for _, v := range value {
|
||||
@ -98,7 +102,7 @@ func GetProgressReward(Scene, Lv int) []*item.Item {
|
||||
func GetDecoarteReward(Scene int, Lv int) []*item.Item {
|
||||
value, err := gamedata.GetData(INDOOR_PROGRESS)
|
||||
if err != nil {
|
||||
log.Debug("IndoorProgress GetDecoarteReward not found")
|
||||
log.Debug("GetDecoarteReward err:%v, Scene=%d, Lv=%d", err, Scene, Lv)
|
||||
return nil
|
||||
}
|
||||
for _, v := range value {
|
||||
@ -112,7 +116,7 @@ func GetDecoarteReward(Scene int, Lv int) []*item.Item {
|
||||
func GetAreaReward(AreaId int) []*item.Item {
|
||||
value, err := gamedata.GetDataByIntKey(DECORATE_AREA, AreaId)
|
||||
if err != nil {
|
||||
log.Debug("IndoorProgress GetDecoarteReward not found")
|
||||
log.Debug("GetAreaReward err:%v, AreaId=%d", err, AreaId)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(value, "Items")
|
||||
@ -132,7 +136,7 @@ func GetOneKeyDecorateUnlockLv() int {
|
||||
func GetDecorateAddEnergy() int {
|
||||
data, err := gamedata.GetDataByKey(DECORATE_CONST, "AddEnergy")
|
||||
if err != nil {
|
||||
log.Debug("GetDecorateAddEnergy not found")
|
||||
log.Debug("GetDecorateAddEnergy err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -141,7 +145,7 @@ func GetDecorateAddEnergy() int {
|
||||
func GetAreaPerPExp(AreaId int) int {
|
||||
data, err := gamedata.GetDataByIntKey(DECORATE_AREA, AreaId)
|
||||
if err != nil {
|
||||
log.Debug("DecorateArea GetAreaPerPExp not found AreaId:%v", AreaId)
|
||||
log.Debug("GetAreaPerPExp err:%v, AreaId=%d", err, AreaId)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "PerPExp")
|
||||
@ -150,7 +154,7 @@ func GetAreaPerPExp(AreaId int) int {
|
||||
func GetDecoratePExp(AreaId, SortId int) int {
|
||||
data, err := gamedata.GetData(DECORATE_COST)
|
||||
if err != nil {
|
||||
log.Debug("DecorateArea GetDecoratePExp not found")
|
||||
log.Debug("GetDecoratePExp err:%v, AreaId=%d, SortId=%d", err, AreaId, SortId)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -164,14 +168,18 @@ func GetDecoratePExp(AreaId, SortId int) int {
|
||||
func GetAllPartId() []int {
|
||||
data, err := gamedata.GetDataByKey(DECORATE_CONST, "AllPartId")
|
||||
if err != nil {
|
||||
log.Debug("DecorateCost GetAllPartId not found")
|
||||
return []int{1505, 1515, 1525, 1535}
|
||||
log.Debug("GetAllPartId err:%v", err)
|
||||
return nil
|
||||
}
|
||||
var PartIdList []int
|
||||
str := gamedata.GetStringValue(data, "Value")
|
||||
r1 := strings.Split(str, "|")
|
||||
PartIdList := make([]int, 0, len(r1))
|
||||
for _, v := range r1 {
|
||||
id, _ := strconv.Atoi(v)
|
||||
id, err := strconv.Atoi(v)
|
||||
if err != nil {
|
||||
log.Debug("GetAllPartId parse id err:%v, v=%s", err, v)
|
||||
continue
|
||||
}
|
||||
PartIdList = append(PartIdList, id)
|
||||
}
|
||||
return PartIdList
|
||||
@ -180,12 +188,16 @@ func GetAllPartId() []int {
|
||||
func GetIdBySenceAndLv(Sence, Lv int) int {
|
||||
data, err := gamedata.GetData(INDOOR_PROGRESS)
|
||||
if err != nil {
|
||||
log.Debug("DecorateArea GetIdBySenceAndLv not found")
|
||||
log.Debug("GetIdBySenceAndLv err:%v, Sence=%d, Lv=%d", err, Sence, Lv)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "Scene") == Sence && gamedata.GetIntValue(v, "Lv") == Lv {
|
||||
id, _ := strconv.Atoi(k)
|
||||
id, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetIdBySenceAndLv parse id err:%v, key=%s", err, k)
|
||||
return 0
|
||||
}
|
||||
return id
|
||||
}
|
||||
}
|
||||
@ -195,16 +207,20 @@ func GetIdBySenceAndLv(Sence, Lv int) int {
|
||||
func GetPartNumByAreaId(AreaId int) map[int]int {
|
||||
data, err := gamedata.GetData(INDOOR_PROGRESS)
|
||||
if err != nil {
|
||||
log.Debug("DecorateArea GetPartNumByAreaId not found AreaId:%v", AreaId)
|
||||
log.Debug("GetPartNumByAreaId err:%v, AreaId=%d", err, AreaId)
|
||||
return nil
|
||||
}
|
||||
res := make(map[int]int)
|
||||
res := make(map[int]int, len(data))
|
||||
for k, v := range data {
|
||||
Sence := gamedata.GetIntValue(v, "Scene")
|
||||
if Sence != AreaId {
|
||||
continue
|
||||
}
|
||||
id, _ := strconv.Atoi(k)
|
||||
id, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetPartNumByAreaId parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
PartNum := gamedata.GetIntValue(v, "Part")
|
||||
if PartNum == 0 {
|
||||
continue
|
||||
@ -217,6 +233,7 @@ func GetPartNumByAreaId(AreaId int) map[int]int {
|
||||
func GetAreaIdByIndoorId(IndoorId int) int {
|
||||
data, err := gamedata.GetDataByIntKey(INDOOR_PROGRESS, IndoorId)
|
||||
if err != nil {
|
||||
log.Debug("GetAreaIdByIndoorId err:%v, IndoorId=%d", err, IndoorId)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Scene")
|
||||
|
||||
@ -3,6 +3,7 @@ package emojiCfg
|
||||
import (
|
||||
GoUtil "server/game_util"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -16,9 +17,10 @@ func init() {
|
||||
func GetInitList() []int {
|
||||
data, err := gamedata.GetData(CFG_EMOJI)
|
||||
if err != nil {
|
||||
log.Debug("GetInitList err:%v", err)
|
||||
return nil
|
||||
}
|
||||
ret := make([]int, 0)
|
||||
ret := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
Init := gamedata.GetIntValue(v, "Init")
|
||||
if Init == 1 {
|
||||
@ -31,9 +33,10 @@ func GetInitList() []int {
|
||||
func GetAllList() []int {
|
||||
data, err := gamedata.GetData(CFG_EMOJI)
|
||||
if err != nil {
|
||||
log.Debug("GetAllList err:%v", err)
|
||||
return nil
|
||||
}
|
||||
ret := make([]int, 0)
|
||||
ret := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
ret = append(ret, GoUtil.Int(k))
|
||||
}
|
||||
@ -43,6 +46,7 @@ func GetAllList() []int {
|
||||
func GetEmojiName(Id int) string {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_EMOJI, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetEmojiName err:%v, Id=%d", err, Id)
|
||||
return ""
|
||||
}
|
||||
return gamedata.GetStringValue(data, "Name")
|
||||
|
||||
@ -3,6 +3,7 @@ package endlessCfg
|
||||
import (
|
||||
"server/game/mod/item"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -15,14 +16,15 @@ func init() {
|
||||
gamedata.InitCfg(CFG_ENDLESS_JACKPOT)
|
||||
}
|
||||
|
||||
func GetDiamond(Money float64) float64 {
|
||||
func GetEnergy(Money float64) float64 {
|
||||
data, err := gamedata.GetData(CFG_ENDLESS)
|
||||
if err != nil {
|
||||
log.Debug("GetEnergy err:%v, Money=%.2f", err, Money)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
if Money == gamedata.GetFloatValue(v, "Money") {
|
||||
return gamedata.GetFloatValue(v, "Diamond")
|
||||
return gamedata.GetFloatValue(v, "Energy")
|
||||
}
|
||||
}
|
||||
return 0
|
||||
@ -31,6 +33,7 @@ func GetDiamond(Money float64) float64 {
|
||||
func NextMoney(Money float64) float64 {
|
||||
data, err := gamedata.GetData(CFG_ENDLESS)
|
||||
if err != nil {
|
||||
log.Debug("NextMoney err:%v, Money=%.2f", err, Money)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -44,6 +47,7 @@ func NextMoney(Money float64) float64 {
|
||||
func GetChargeId(Money float64) int {
|
||||
data, err := gamedata.GetData(CFG_ENDLESS)
|
||||
if err != nil {
|
||||
log.Debug("GetChargeId err:%v, Money=%.2f", err, Money)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -54,27 +58,29 @@ func GetChargeId(Money float64) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetPerDiamond(Id int) float64 {
|
||||
func GetPerEnergy(Id int) float64 {
|
||||
data, err := gamedata.GetData(CFG_ENDLESS_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetPerEnergy err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
if Id == gamedata.GetIntValue(v, "ItemId") {
|
||||
return gamedata.GetFloatValue(v, "Diamond")
|
||||
return gamedata.GetFloatValue(v, "Energy")
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetItemId(Diamond float64, Type, Lv int) []int {
|
||||
func GetItemId(Energy float64, Type, Lv int) []int {
|
||||
data, err := gamedata.GetData(CFG_ENDLESS_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetItemId err:%v, Energy=%.2f, Type=%d, Lv=%d", err, Energy, Type, Lv)
|
||||
return nil
|
||||
}
|
||||
var ItemId []int
|
||||
ItemId := make([]int, 0, len(data))
|
||||
for _, v := range data {
|
||||
if Lv >= gamedata.GetIntValue(v, "Lv") && Diamond >= gamedata.GetFloatValue(v, "Diamond") && Type != gamedata.GetIntValue(v, "Type") && gamedata.GetIntValue(v, "ItemId") != item.ITEM_ENERGY_ID {
|
||||
if Lv >= gamedata.GetIntValue(v, "Lv") && Energy >= gamedata.GetFloatValue(v, "Energy") && Type != gamedata.GetIntValue(v, "Type") && gamedata.GetIntValue(v, "ItemId") != item.ITEM_ENERGY_ID {
|
||||
ItemId = append(ItemId, gamedata.GetIntValue(v, "ItemId"))
|
||||
}
|
||||
}
|
||||
@ -84,6 +90,7 @@ func GetItemId(Diamond float64, Type, Lv int) []int {
|
||||
func GetType(ItemId int) int {
|
||||
data, err := gamedata.GetData(CFG_ENDLESS_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetType err:%v, ItemId=%d", err, ItemId)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -94,14 +101,15 @@ func GetType(ItemId int) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func GeDiamondByItemId(ItemId int) float64 {
|
||||
func GetEnergyByItemId(ItemId int) float64 {
|
||||
data, err := gamedata.GetData(CFG_ENDLESS_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetEnergyByItemId err:%v, ItemId=%d", err, ItemId)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
if ItemId == gamedata.GetIntValue(v, "ItemId") {
|
||||
return gamedata.GetFloatValue(v, "Diamond")
|
||||
return gamedata.GetFloatValue(v, "Energy")
|
||||
}
|
||||
}
|
||||
return 0
|
||||
|
||||
@ -17,15 +17,19 @@ func init() {
|
||||
func GetInitList() []int {
|
||||
data, err := gamedata.GetData(CFG_FACE)
|
||||
if err != nil {
|
||||
log.Debug("GetInitList err: %v", err)
|
||||
log.Debug("GetInitList err:%v", err)
|
||||
return nil
|
||||
}
|
||||
r := make([]int, 0)
|
||||
r := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
IsInit := gamedata.GetIntValue(v, "Init")
|
||||
if IsInit == 1 {
|
||||
k, _ := strconv.Atoi(k)
|
||||
r = append(r, k)
|
||||
id, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetInitList parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
r = append(r, id)
|
||||
}
|
||||
}
|
||||
return r
|
||||
@ -34,7 +38,7 @@ func GetInitList() []int {
|
||||
func CheckExist(Id int) bool {
|
||||
data, err := gamedata.GetData(CFG_FACE)
|
||||
if err != nil {
|
||||
log.Debug("CheckExist err: %v", err)
|
||||
log.Debug("CheckExist err:%v, Id=%d", err, Id)
|
||||
return false
|
||||
}
|
||||
_, ok := data[strconv.Itoa(Id)]
|
||||
@ -44,12 +48,16 @@ func CheckExist(Id int) bool {
|
||||
func GetAllId() []int {
|
||||
data, err := gamedata.GetData(CFG_FACE)
|
||||
if err != nil {
|
||||
log.Debug("GetAllId err: %v", err)
|
||||
log.Debug("GetAllId err:%v", err)
|
||||
return nil
|
||||
}
|
||||
r := make([]int, 0)
|
||||
r := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
Id, _ := strconv.Atoi(k)
|
||||
Id, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetAllId parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
r = append(r, Id)
|
||||
}
|
||||
return r
|
||||
|
||||
@ -1,19 +1,43 @@
|
||||
package friendCfg
|
||||
|
||||
import "server/gamedata"
|
||||
import (
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
)
|
||||
|
||||
const (
|
||||
CFG_NPC_FRIENDS = "NPCFriends"
|
||||
CFG_CONST = "FriendConst"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gamedata.InitCfg(CFG_NPC_FRIENDS)
|
||||
gamedata.InitCfg(CFG_CONST)
|
||||
}
|
||||
|
||||
func IsNpcFriend(Id int) bool {
|
||||
_, err := gamedata.GetDataByIntKey(CFG_NPC_FRIENDS, Id)
|
||||
if err != nil {
|
||||
log.Debug("IsNpcFriend err:%v, Id=%d", err, Id)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func GetFriendSponsorNum() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_CONST, "friend_energy_bonus")
|
||||
if err != nil {
|
||||
log.Debug("GetFriendSponsorNum err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
|
||||
func GetFriendLimitNum() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_CONST, "friend_limit")
|
||||
if err != nil {
|
||||
log.Debug("GetFriendLimitNum err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"server/game/mod/item"
|
||||
GoUtil "server/game_util"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@ -20,11 +21,12 @@ func init() {
|
||||
func GetFirstPass(Id int) map[int]int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_GUESS_COLOR_TEMPLATE, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetFirstPass err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
str := gamedata.GetStringValue(data, "FirstPass")
|
||||
arr := strings.Split(str, "|")
|
||||
ret := make(map[int]int)
|
||||
ret := make(map[int]int, len(arr))
|
||||
for k, v := range arr {
|
||||
ret[k+1] = GoUtil.Int(v)
|
||||
}
|
||||
@ -34,6 +36,7 @@ func GetFirstPass(Id int) map[int]int {
|
||||
func GetLoseItem(Id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_GUESS_COLOR_TEMPLATE, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetLoseItem err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "ItemCost")
|
||||
@ -42,6 +45,7 @@ func GetLoseItem(Id int) []*item.Item {
|
||||
func GetFirstItem(Id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_GUESS_COLOR_TEMPLATE, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetFirstItem err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "FirstItem")
|
||||
@ -50,6 +54,7 @@ func GetFirstItem(Id int) []*item.Item {
|
||||
func GetActivityItemId(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_GUESS_COLOR_TEMPLATE, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetActivityItemId err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "ItemId")
|
||||
@ -58,6 +63,7 @@ func GetActivityItemId(Id int) int {
|
||||
func GetRewardItem(Id int, Type int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_GUESS_COLOR_REWARD)
|
||||
if err != nil {
|
||||
log.Debug("GetRewardItem err:%v, Id=%d, Type=%d", err, Id, Type)
|
||||
return nil
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -76,6 +82,7 @@ func GetRewardItem(Id int, Type int) []*item.Item {
|
||||
func GetPassNum(Id int) int {
|
||||
data, err := gamedata.GetData(CFG_GUESS_COLOR_REWARD)
|
||||
if err != nil {
|
||||
log.Debug("GetPassNum err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -91,6 +98,7 @@ func GetPassNum(Id int) int {
|
||||
func GetWinTime(Id int) int {
|
||||
data, err := gamedata.GetData(CFG_GUESS_COLOR_REWARD)
|
||||
if err != nil {
|
||||
log.Debug("GetWinTime err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
|
||||
@ -17,7 +17,7 @@ func init() {
|
||||
func GetGuideReward(Id int) ([]*item.Item, int) {
|
||||
data, err := gamedata.GetDataByIntKey(GUIDE_REWARD, Id)
|
||||
if err != nil {
|
||||
log.Debug("GuildCfg GetGuildReward Id:%v not found", Id)
|
||||
log.Debug("GetGuideReward err:%v, Id=%d", err, Id)
|
||||
return nil, 0
|
||||
}
|
||||
return item.ParseItem(gamedata.GetValue(data, "Items")), gamedata.GetIntValue(data, "Num")
|
||||
|
||||
@ -23,6 +23,7 @@ func init() {
|
||||
func GetTaskRewardById(Id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(GUIDE_TASK_TASK, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskRewardById err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Items")
|
||||
@ -31,6 +32,7 @@ func GetTaskRewardById(Id int) []*item.Item {
|
||||
func GetTaskById(Id int) string {
|
||||
data, err := gamedata.GetDataByIntKey(GUIDE_TASK_TASK, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskById err:%v, Id=%d", err, Id)
|
||||
return ""
|
||||
}
|
||||
return gamedata.GetStringValue(data, "Task")
|
||||
@ -39,6 +41,7 @@ func GetTaskById(Id int) string {
|
||||
func GetTaskActive(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(GUIDE_TASK_TASK, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskActive err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Active")
|
||||
@ -46,6 +49,7 @@ func GetTaskActive(Id int) int {
|
||||
func GetUnlock(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(GUIDE_TASK_TASK, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetUnlock err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Unlock")
|
||||
@ -54,6 +58,7 @@ func GetUnlock(Id int) int {
|
||||
func GetActiveReward(Id int) ([]*item.Item, int) {
|
||||
data, err := gamedata.GetDataByIntKey(GUIDE_TASK_ACTIVE, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetActiveReward err:%v, Id=%d", err, Id)
|
||||
return nil, 0
|
||||
}
|
||||
return gamedata.GetItemList(data, "Items"), gamedata.GetIntValue(data, "Active")
|
||||
@ -61,6 +66,7 @@ func GetActiveReward(Id int) ([]*item.Item, int) {
|
||||
func GetActiveReward2(reward []int, Active int) []*item.Item {
|
||||
data, err := gamedata.GetData(GUIDE_TASK_ACTIVE)
|
||||
if err != nil {
|
||||
log.Debug("GetActiveReward2 err:%v, Active=%d", err, Active)
|
||||
return nil
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -79,6 +85,7 @@ func GetActiveReward2(reward []int, Active int) []*item.Item {
|
||||
func GetUnlockLv() int {
|
||||
data, err := gamedata.GetDataByKey(GUIDE_TASK_CONST, "UnlockLv")
|
||||
if err != nil {
|
||||
log.Debug("GetUnlockLv err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -87,20 +94,25 @@ func GetUnlockLv() int {
|
||||
func GetDays() int {
|
||||
data, err := gamedata.GetDataByKey(GUIDE_TASK_CONST, "Days")
|
||||
if err != nil {
|
||||
log.Debug("GetDays err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
|
||||
func GetTaskList(Lv int) map[int]string {
|
||||
r := make(map[int]string)
|
||||
data, err := gamedata.GetData(GUIDE_TASK_TASK)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskList get data nil")
|
||||
return r
|
||||
log.Debug("GetTaskList err:%v, Lv=%d", err, Lv)
|
||||
return nil
|
||||
}
|
||||
r := make(map[int]string, len(data))
|
||||
for k, v := range data {
|
||||
k1, _ := strconv.Atoi(k)
|
||||
k1, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Debug("GetTaskList parse id err:%v, key=%s", err, k)
|
||||
continue
|
||||
}
|
||||
r[k1] = gamedata.GetStringValue(v, "Task")
|
||||
}
|
||||
return r
|
||||
|
||||
@ -1,51 +0,0 @@
|
||||
package GuideTaskCfg
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestGuideTaskCfg_NoPanic(t *testing.T) {
|
||||
ids := []int{-1, 0, 1, 999999}
|
||||
for _, id := range ids {
|
||||
t.Run(fmt.Sprintf("Id=%d", id), func(t *testing.T) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
t.Fatalf("unexpected panic: %v", r)
|
||||
}
|
||||
}()
|
||||
_ = GetTaskRewardById(id)
|
||||
_ = GetTaskActive(id)
|
||||
_, _ = GetActiveReward(id)
|
||||
})
|
||||
}
|
||||
_ = GetUnlockLv()
|
||||
_ = GetDays()
|
||||
}
|
||||
|
||||
// 以下 Example 用于文档与编译校验(无固定输出校验)
|
||||
|
||||
func ExampleGetTaskRewardById() {
|
||||
_ = GetTaskRewardById(1)
|
||||
// Output:
|
||||
}
|
||||
|
||||
func ExampleGetTaskActive() {
|
||||
_ = GetTaskActive(1)
|
||||
// Output:
|
||||
}
|
||||
|
||||
func ExampleGetActiveReward() {
|
||||
_, _ = GetActiveReward(1)
|
||||
// Output:
|
||||
}
|
||||
|
||||
func ExampleGetUnlockLv() {
|
||||
_ = GetUnlockLv()
|
||||
// Output:
|
||||
}
|
||||
|
||||
func ExampleGetDays() {
|
||||
_ = GetDays()
|
||||
// Output:
|
||||
}
|
||||
@ -19,7 +19,7 @@ func init() {
|
||||
func GetHandbookReward(Type string) []*item.Item {
|
||||
data, err := gamedata.GetDataByKey(CFG_HANDBOOK, Type)
|
||||
if err != nil {
|
||||
log.Debug("GetHandbookReward err:%v", err)
|
||||
log.Debug("GetHandbookReward err:%v, Type=%s", err, Type)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Items")
|
||||
|
||||
@ -3,6 +3,7 @@ package inviteCfg
|
||||
import (
|
||||
"server/game/mod/item"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -16,8 +17,8 @@ func init() {
|
||||
func GetInviteReward(index int) (int, []*item.Item) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_INVITE, index)
|
||||
if err != nil {
|
||||
log.Debug("GetInviteReward err:%v, index=%d", err, index)
|
||||
return 0, nil
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Need"), gamedata.GetItemList(data, "Items")
|
||||
|
||||
}
|
||||
|
||||
@ -18,32 +18,36 @@ func init() {
|
||||
func GetItemType(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("ItemCfg GetItemType Id:%v not found", Id)
|
||||
log.Debug("GetItemType err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(data["IType"])
|
||||
return gamedata.GetIntValue(data, "IType")
|
||||
}
|
||||
|
||||
func GetItemEffect(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("ItemCfg GetItemEffect Id:%v not found", Id)
|
||||
log.Debug("GetItemEffect err:%v, Id=%d", err, Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(data["Effect"])
|
||||
return gamedata.GetIntValue(data, "Effect")
|
||||
}
|
||||
|
||||
func GetItemEffectList(Id int) []int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("ItemCfg GetItemEffect Id:%v not found", Id)
|
||||
return []int{}
|
||||
log.Debug("GetItemEffectList err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
var res []int
|
||||
str := gamedata.GetStringValue(data, "Effect")
|
||||
a := strings.Split(str, ",")
|
||||
res := make([]int, 0, len(a))
|
||||
for _, v := range a {
|
||||
b, _ := strconv.Atoi(v)
|
||||
b, err := strconv.Atoi(v)
|
||||
if err != nil {
|
||||
log.Debug("GetItemEffectList parse err:%v, v=%s", err, v)
|
||||
continue
|
||||
}
|
||||
res = append(res, b)
|
||||
}
|
||||
return res
|
||||
@ -52,8 +56,9 @@ func GetItemEffectList(Id int) []int {
|
||||
func GetItemName(Id int) (string, string) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("ItemCfg GetItemName Id:%v not found", Id)
|
||||
log.Debug("GetItemName err:%v, Id=%d", err, Id)
|
||||
return "", ""
|
||||
}
|
||||
return languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Name")), languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Name"))
|
||||
name := gamedata.GetStringValue(data, "Name")
|
||||
return languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, name), languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, name)
|
||||
}
|
||||
|
||||
@ -27,6 +27,8 @@ func GetLanguage(lang msg.LANG_TYPE, key string) string {
|
||||
return gamedata.GetStringValue(data, "pt_BR")
|
||||
case msg.LANG_TYPE_LANG_CN:
|
||||
return gamedata.GetStringValue(data, "zh_CN")
|
||||
case msg.LANG_TYPE_LANG_ES_LATAM:
|
||||
return gamedata.GetStringValue(data, "es_LATAM")
|
||||
default:
|
||||
return key
|
||||
}
|
||||
|
||||
@ -54,7 +54,7 @@ func GetLimitedTimeEventCfg() []*gamedata.LimitedTimeEventData {
|
||||
func GetEventName(Id int) string {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetEventName err:%v", err)
|
||||
log.Debug("GetEventName err:%v, Id=%d", err, Id)
|
||||
return ""
|
||||
}
|
||||
return gamedata.GetStringValue(data, "Name")
|
||||
@ -64,7 +64,7 @@ func GetEventName(Id int) string {
|
||||
func GetMeteorAdd(ChessLv int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_METEOR, ChessLv)
|
||||
if err != nil {
|
||||
log.Debug("GetMeteorAdd err:%v", err)
|
||||
log.Debug("GetMeteorAdd err:%v, ChessLv=%d", err, ChessLv)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Add")
|
||||
@ -74,7 +74,7 @@ func GetMeteorAdd(ChessLv int) int {
|
||||
func GetChestReward(Star int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_CHEST)
|
||||
if err != nil {
|
||||
log.Debug("GetChestReward err:%v", err)
|
||||
log.Debug("GetChestReward err:%v, Star=%d", err, Star)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -90,16 +90,17 @@ func GetChestReward(Star int) []*item.Item {
|
||||
}
|
||||
|
||||
// 获取超级订单奖励
|
||||
func GetSuperOrderReward(Star int) []*item.Item {
|
||||
func GetSuperOrderReward(energy int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_ORDER)
|
||||
if err != nil {
|
||||
log.Debug("GetSuperOrderReward err:%v", err)
|
||||
log.Debug("GetSuperOrderReward err:%v, energy=%d", err, energy)
|
||||
return nil
|
||||
}
|
||||
star := energy
|
||||
for _, v := range data {
|
||||
Min := gamedata.GetIntValue(v, "Min")
|
||||
Max := gamedata.GetIntValue(v, "Max")
|
||||
if Star >= Min && Star <= Max {
|
||||
if star >= Min && star <= Max {
|
||||
return gamedata.GetItemList(v, "Items")
|
||||
}
|
||||
}
|
||||
@ -110,7 +111,7 @@ func GetSuperOrderReward(Star int) []*item.Item {
|
||||
func GetSceneDashReward(Sence, Progress int) (int, []*item.Item) {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_SENCE)
|
||||
if err != nil {
|
||||
log.Debug("GetSceneDashReward err:%v", err)
|
||||
log.Debug("GetSceneDashReward err:%v, Sence=%d, Progress=%d", err, Sence, Progress)
|
||||
return 0, nil
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -123,12 +124,12 @@ func GetSceneDashReward(Sence, Progress int) (int, []*item.Item) {
|
||||
|
||||
// 获取场景冲刺奖池
|
||||
func GetSenceJackpotProb() map[int]int {
|
||||
r := make(map[int]int)
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_SENCE_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetSenceJackpotReward err:%v", err)
|
||||
log.Debug("GetSenceJackpotProb err:%v", err)
|
||||
return nil
|
||||
}
|
||||
r := make(map[int]int, len(data))
|
||||
for k, v := range data {
|
||||
Id := GoUtil.Int(k)
|
||||
r[Id] = gamedata.GetIntValue(v, "Prob")
|
||||
@ -140,7 +141,7 @@ func GetSenceJackpotProb() map[int]int {
|
||||
func GetSenceJackpotReward(Id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_SENCE_JACKPOT, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetSenceJackpotReward err:%v", err)
|
||||
log.Debug("GetSenceJackpotReward err:%v, Id=%d", err, Id)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Items")
|
||||
@ -150,7 +151,7 @@ func GetSenceJackpotReward(Id int) []*item.Item {
|
||||
func GetFastProduceReward(Energy int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_FAST)
|
||||
if err != nil {
|
||||
log.Debug("GetSceneDashReward err:%v", err)
|
||||
log.Debug("GetFastProduceReward err:%v, Energy=%d", err, Energy)
|
||||
return nil
|
||||
}
|
||||
if len(data) == 0 {
|
||||
@ -161,7 +162,7 @@ func GetFastProduceReward(Energy int) []*item.Item {
|
||||
Id string
|
||||
Energy float64
|
||||
}
|
||||
sortedList := make([]sortData, 0)
|
||||
sortedList := make([]sortData, 0, len(data))
|
||||
energy := float64(Energy) / 10.0
|
||||
for k, v := range data {
|
||||
dataEnergy := gamedata.GetFloatValue(v, "EnergyValue")
|
||||
@ -180,7 +181,7 @@ func GetFastProduceMaxTimes() int {
|
||||
Max := 0
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_FAST)
|
||||
if err != nil {
|
||||
log.Debug("GetSceneDashReward err:%v", err)
|
||||
log.Debug("GetFastProduceMaxTimes err:%v", err)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -193,7 +194,7 @@ func GetFastProduceMaxTimes() int {
|
||||
func GetProgressMax(Lv, Num int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_BONUS)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressMax err:%v", err)
|
||||
log.Debug("GetProgressMax err:%v, Lv=%d, Num=%d", err, Lv, Num)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -215,7 +216,7 @@ func GetProgressMax(Lv, Num int) int {
|
||||
func GetBonusLv(Lv int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_BONUS)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressMax err:%v", err)
|
||||
log.Debug("GetBonusLv err:%v, Lv=%d", err, Lv)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -232,10 +233,10 @@ func GetBonusLv(Lv int) int {
|
||||
func GetProgressRewardRand(Lv int) map[int]int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressRewardRand err:%v", err)
|
||||
log.Debug("GetProgressRewardRand err:%v, Lv=%d", err, Lv)
|
||||
return nil
|
||||
}
|
||||
r := make(map[int]int)
|
||||
r := make(map[int]int, len(data))
|
||||
for k, v := range data {
|
||||
if Lv >= gamedata.GetIntValue(v, "BonusLv") {
|
||||
Id := GoUtil.Int(k)
|
||||
@ -248,7 +249,7 @@ func GetProgressRewardRand(Lv int) map[int]int {
|
||||
func GetJackpotIdByType(Type int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetJackpotIdByType err:%v", err)
|
||||
log.Debug("GetJackpotIdByType err:%v, Type=%d", err, Type)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -264,7 +265,7 @@ func GetJackpotIdByType(Type int) int {
|
||||
func GetProgressSelectNum(Lv int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_BONUS)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressMax err:%v", err)
|
||||
log.Debug("GetProgressSelectNum err:%v, Lv=%d", err, Lv)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
@ -281,7 +282,7 @@ func GetProgressSelectNum(Lv int) int {
|
||||
func GetProgressReward(RewardId int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_JACKPOT)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressReward err:%v", err)
|
||||
log.Debug("GetProgressReward err:%v, RewardId=%d", err, RewardId)
|
||||
return nil
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -297,7 +298,7 @@ func GetProgressReward(RewardId int) []*item.Item {
|
||||
func GetProgressRewardType(RewardId int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_JACKPOT, RewardId)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressReward err:%v", err)
|
||||
log.Debug("GetProgressRewardType err:%v, RewardId=%d", err, RewardId)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Type")
|
||||
@ -312,6 +313,15 @@ func GetUnlockLv() int {
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
|
||||
func GetCatSaleCD() int64 {
|
||||
data, err := gamedata.GetDataByKey(CFG_LIMITED_TIME_EVENT_CONST, "Event_Cooldown_7days")
|
||||
if err != nil {
|
||||
log.Debug("GetCatSaleCD err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return int64(gamedata.GetIntValue(data, "Value"))
|
||||
}
|
||||
|
||||
func GetFirstEvent() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_LIMITED_TIME_EVENT_CONST, "First_Event")
|
||||
if err != nil {
|
||||
@ -324,7 +334,7 @@ func GetFirstEvent() int {
|
||||
func GetFastCD() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_LIMITED_TIME_EVENT_CONST, "Fast_Cd")
|
||||
if err != nil {
|
||||
log.Debug("GetFirstEvent err:%v", err)
|
||||
log.Debug("GetFastCD err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
@ -356,7 +366,7 @@ func GetThiefProb() int {
|
||||
}
|
||||
value := gamedata.GetStringValue(data, "Value")
|
||||
a1 := strings.Split(value, "|")
|
||||
prob := make(map[int]int)
|
||||
prob := make(map[int]int, len(a1))
|
||||
for _, v := range a1 {
|
||||
a2 := strings.Split(v, ":")
|
||||
prob[GoUtil.Int(a2[0])] = GoUtil.Int(a2[1])
|
||||
@ -369,7 +379,7 @@ func GetThiefProb() int {
|
||||
func GetMoneyCat(Id int) (float64, int) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_MONEY, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetMul err:%v", err)
|
||||
log.Debug("GetMoneyCat err:%v, Id=%d", err, Id)
|
||||
return 0.0, 0
|
||||
}
|
||||
return gamedata.GetFloatValue(data, "Mul"), gamedata.GetIntValue(data, "Cd")
|
||||
@ -378,7 +388,7 @@ func GetMoneyCat(Id int) (float64, int) {
|
||||
func GetMoneyCatMax() int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_MONEY)
|
||||
if err != nil {
|
||||
log.Debug("GetMul err:%v", err)
|
||||
log.Debug("GetMoneyCatMax err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return len(data)
|
||||
@ -387,14 +397,14 @@ func GetMoneyCatMax() int {
|
||||
func GetLuckyCatMaxEarning(Remain int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_LUCKY)
|
||||
if err != nil {
|
||||
log.Debug("GetMul err:%v", err)
|
||||
log.Debug("GetLuckyCatMaxEarning err:%v, Remain=%d", err, Remain)
|
||||
return 0
|
||||
}
|
||||
type d struct {
|
||||
t int
|
||||
e int
|
||||
}
|
||||
l := make([]d, 0)
|
||||
l := make([]d, 0, len(data))
|
||||
for k, v := range data {
|
||||
t := GoUtil.Int(k)
|
||||
e := gamedata.GetIntValue(v, "Earn")
|
||||
@ -414,7 +424,7 @@ func GetLuckyCatMaxEarning(Remain int) int {
|
||||
func GetCatTrickType(Duartion int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_CAT_TRICK)
|
||||
if err != nil {
|
||||
log.Debug("GetCatTrick err:%v", err)
|
||||
log.Debug("GetCatTrickType err:%v, Duartion=%d", err, Duartion)
|
||||
return 1
|
||||
}
|
||||
for k, v := range data {
|
||||
@ -429,7 +439,7 @@ func GetCatTrickType(Duartion int) int {
|
||||
func GetCatTrickDiamond(Type int) (int, int) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_CAT_TRICK, Type)
|
||||
if err != nil {
|
||||
log.Debug("GetCatTrickDiamond err:%v", err)
|
||||
log.Debug("GetCatTrickDiamond err:%v, Type=%d", err, Type)
|
||||
return 0, 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Diamond"), gamedata.GetIntValue(data, "Energy")
|
||||
@ -438,7 +448,7 @@ func GetCatTrickDiamond(Type int) (int, int) {
|
||||
func GetDecorateOffDiscount(AreaId, StepId int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMTTED_TIME_EVENT_DECORATE_OFF)
|
||||
if err != nil {
|
||||
log.Debug("GetDecorateOffDiscount err:%v", err)
|
||||
log.Debug("GetDecorateOffDiscount err:%v, AreaId=%d, StepId=%d", err, AreaId, StepId)
|
||||
return 100
|
||||
}
|
||||
for _, v := range data {
|
||||
|
||||
@ -67,18 +67,18 @@ func GetOne(Id int) (*gamedata.MergeDataRecord, error) {
|
||||
return &gamedata.MergeDataRecord{}, errors.New("not found")
|
||||
}
|
||||
return &gamedata.MergeDataRecord{
|
||||
Id: gamedata.ParseInt(data["Id"]),
|
||||
Lv: gamedata.ParseInt(data["Lv"]),
|
||||
MaxLv: gamedata.ParseInt(data["MaxLv"]),
|
||||
SellType: gamedata.ParseString(data["SellType"]),
|
||||
SellNum: gamedata.ParseInt(data["SellNum"]),
|
||||
SellDiamond: gamedata.ParseInt(data["SellDiamond"]),
|
||||
Color: gamedata.ParseString(data["Color"]),
|
||||
Star: gamedata.ParseInt(data["Star"]),
|
||||
Type: gamedata.ParseString(data["Type"]),
|
||||
Emit_Product: gamedata.ParseString(data["Emit_Product"]),
|
||||
CoolTime: gamedata.ParseInt(data["CoolTime"]),
|
||||
Emit_Type: gamedata.ParseString(data["Emit_Type"]),
|
||||
Id: gamedata.GetIntValue(data, "Id"),
|
||||
Lv: gamedata.GetIntValue(data, "Lv"),
|
||||
MaxLv: gamedata.GetIntValue(data, "MaxLv"),
|
||||
SellType: gamedata.GetStringValue(data, "SellType"),
|
||||
SellNum: gamedata.GetIntValue(data, "SellNum"),
|
||||
SellDiamond: gamedata.GetIntValue(data, "SellDiamond"),
|
||||
Color: gamedata.GetStringValue(data, "Color"),
|
||||
Star: gamedata.GetIntValue(data, "Star"),
|
||||
Type: gamedata.GetStringValue(data, "Type"),
|
||||
Emit_Product: gamedata.GetStringValue(data, "Emit_Product"),
|
||||
CoolTime: gamedata.GetIntValue(data, "CoolTime"),
|
||||
Emit_Type: gamedata.GetStringValue(data, "Emit_Type"),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -89,7 +89,7 @@ func GetStarById(Id int) int {
|
||||
log.Debug("MergeDataCfg GetOne Id:%v not found", Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(data["Star"])
|
||||
return gamedata.GetIntValue(data, "Star")
|
||||
}
|
||||
|
||||
func GetNameById(Id int) string {
|
||||
@ -130,7 +130,7 @@ func GetLvById(Id int) int {
|
||||
//log.Debug("GetLvById GetOne Id:%v not found", Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(data["Lv"])
|
||||
return gamedata.GetIntValue(data, "Lv")
|
||||
}
|
||||
|
||||
// 根据Id获取棋子最大等级
|
||||
@ -140,7 +140,7 @@ func GetMaxLvById(Id int) int {
|
||||
// log.Debug("GetMaxLvById GetOne Id:%v not found", Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(data["MaxLv"])
|
||||
return gamedata.GetIntValue(data, "MaxLv")
|
||||
}
|
||||
|
||||
// 根据Id获取棋子最大等级
|
||||
@ -150,7 +150,7 @@ func GetMaxLvByColor(Color string) int {
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(data["MaxLv"])
|
||||
return gamedata.GetIntValue(data, "MaxLv")
|
||||
}
|
||||
|
||||
// 根据Id获取发射器最小等级
|
||||
@ -204,7 +204,7 @@ func GetTypeById(Id int) string {
|
||||
log.Debug("GetTypeById GetOne Id:%v not found", Id)
|
||||
return ""
|
||||
}
|
||||
return gamedata.ParseString(data["Type"])
|
||||
return gamedata.GetStringValue(data, "Type")
|
||||
}
|
||||
|
||||
// 根据Id获取棋子类型
|
||||
@ -214,7 +214,7 @@ func GetColorById(Id int) string {
|
||||
log.Debug("GetColorById GetOne Id:%v not found", Id)
|
||||
return ""
|
||||
}
|
||||
return gamedata.ParseString(data["Color"])
|
||||
return gamedata.GetStringValue(data, "Color")
|
||||
}
|
||||
|
||||
// 根据Id获取棋子类型
|
||||
@ -234,7 +234,8 @@ func GetEmitProduceType(Id int) []string {
|
||||
log.Debug("GetEmitProduceType GetOne Id:%v not found", Id)
|
||||
return []string{}
|
||||
}
|
||||
return strings.Split(gamedata.ParseString(data["Emit_Product"]), ",")
|
||||
|
||||
return strings.Split(gamedata.GetStringValue(data, "Emit_Product"), ",")
|
||||
}
|
||||
|
||||
// 根据Id获取发射器产出类型
|
||||
@ -244,7 +245,8 @@ func GetEmitProduceChessType(Id int) []string {
|
||||
//log.Debug("GetEmitProduceChessType GetOne Id:%v not found", Id)
|
||||
return []string{}
|
||||
}
|
||||
value := gamedata.ParseString(data["Product_Type"])
|
||||
|
||||
value := gamedata.GetStringValue(data, "Product_Type")
|
||||
if value == "" {
|
||||
return []string{}
|
||||
}
|
||||
@ -258,7 +260,8 @@ func GetEmitId(Id int) string {
|
||||
// log.Debug("GetEmitId GetOne Id:%v not found", Id)
|
||||
return ""
|
||||
}
|
||||
return gamedata.ParseString(data["Emit_ID"])
|
||||
|
||||
return gamedata.GetStringValue(data, "Emit_ID")
|
||||
}
|
||||
|
||||
func GetAllId() []int {
|
||||
@ -266,7 +269,7 @@ func GetAllId() []int {
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
key := make([]int, 0)
|
||||
key := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
key = append(key, GoUtil.Int(k))
|
||||
}
|
||||
@ -279,7 +282,8 @@ func GetEmitType(Id int) string {
|
||||
log.Debug("GetEmitType GetOne Id:%v not found", Id)
|
||||
return ""
|
||||
}
|
||||
return gamedata.ParseString(data["Emit_Type"])
|
||||
|
||||
return gamedata.GetStringValue(data, "Emit_Type")
|
||||
}
|
||||
|
||||
func GetEmitN(EmitSeries string) int {
|
||||
@ -298,7 +302,8 @@ func GetConst(Key string) string {
|
||||
log.Debug("GetConst GetOne Id:%s not found", Key)
|
||||
return ""
|
||||
}
|
||||
return gamedata.ParseString(data["Value"])
|
||||
|
||||
return gamedata.GetStringValue(data, "Value")
|
||||
}
|
||||
|
||||
// 获取常量
|
||||
@ -308,7 +313,7 @@ func GetConstInt(Key string) int {
|
||||
log.Debug("GetConst GetOne Id:%s not found", Key)
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(data["Value"])
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
|
||||
func GetExtraEmitId() map[string]struct{} {
|
||||
@ -339,7 +344,8 @@ func GetSourceChestItem() []*item.Item {
|
||||
log.Debug("GetSourceChestItem GetOne not found")
|
||||
return nil
|
||||
}
|
||||
Str := gamedata.ParseString(data["Value"])
|
||||
|
||||
Str := gamedata.GetStringValue(data, "Value")
|
||||
A1 := strings.Split(Str, "|")
|
||||
var r []*item.Item
|
||||
if len(A1) < 2 {
|
||||
@ -363,7 +369,7 @@ func GetHighSourceChestItem() []*item.Item {
|
||||
log.Debug("GetHighSourceChestItem GetOne not found")
|
||||
return nil
|
||||
}
|
||||
Str := gamedata.ParseString(data["Value"])
|
||||
Str := gamedata.GetStringValue(data, "Value")
|
||||
A1 := strings.Split(Str, "|")
|
||||
var r []*item.Item
|
||||
if len(A1) < 2 {
|
||||
|
||||
@ -65,7 +65,7 @@ func GetPassGem(Id int) []int {
|
||||
}
|
||||
Gem := gamedata.GetStringValue(data, "Gem")
|
||||
strArr := strings.Split(Gem, "|")
|
||||
result := make([]int, 0)
|
||||
result := make([]int, 0, len(strArr))
|
||||
for _, v := range strArr {
|
||||
a, _ := strconv.Atoi(v)
|
||||
result = append(result, a)
|
||||
|
||||
@ -103,11 +103,11 @@ func GetStartOrderInfo(Id int) (int, int) {
|
||||
}
|
||||
|
||||
func GetStartOrderList() []*gamedata.StartOrderData {
|
||||
ret := make([]*gamedata.StartOrderData, 0)
|
||||
data, err := gamedata.GetData(CFG_START_ORDER)
|
||||
if err != nil {
|
||||
return ret
|
||||
return []*gamedata.StartOrderData{}
|
||||
}
|
||||
ret := make([]*gamedata.StartOrderData, 0, len(data))
|
||||
for k, v := range data {
|
||||
OrderId, _ := strconv.Atoi(k)
|
||||
ret = append(ret, &gamedata.StartOrderData{
|
||||
@ -127,11 +127,11 @@ func GetStartOrderList() []*gamedata.StartOrderData {
|
||||
}
|
||||
|
||||
func GetStartOrderByStep(id int) []*gamedata.StartOrderData {
|
||||
ret := make([]*gamedata.StartOrderData, 0)
|
||||
data, err := gamedata.GetData(CFG_START_ORDER)
|
||||
if err != nil {
|
||||
return ret
|
||||
return []*gamedata.StartOrderData{}
|
||||
}
|
||||
ret := make([]*gamedata.StartOrderData, len(data))
|
||||
for k, v := range data {
|
||||
stepVal := gamedata.GetIntValue(v, "step")
|
||||
if int(stepVal) == id {
|
||||
|
||||
@ -53,7 +53,7 @@ func GetNewLevel(Template int, Score int, Reward []int) []int {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
NewReward := make([]int, 0)
|
||||
NewReward := make([]int, 0, len(data))
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "Template") != Template {
|
||||
continue
|
||||
@ -72,7 +72,7 @@ func GetFreeChargeItems(Template int, Reward []int) []*item.Item {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
Items := make([]*item.Item, 0, len(data))
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "Template") != Template {
|
||||
continue
|
||||
@ -90,7 +90,7 @@ func GetLowChargeItems(Template int, Reward []int) []*item.Item {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
Items := make([]*item.Item, 0, len(data))
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "Template") != Template {
|
||||
continue
|
||||
@ -108,7 +108,7 @@ func GetHighChargeItems(Template int, Reward []int) []*item.Item {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
Items := make([]*item.Item, 0, len(data))
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "Template") != Template {
|
||||
continue
|
||||
|
||||
@ -126,11 +126,11 @@ func GetTriggerCd() int {
|
||||
}
|
||||
|
||||
func GetFoodItem() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Food")
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
|
||||
if v == "" {
|
||||
continue
|
||||
@ -142,11 +142,11 @@ func GetFoodItem() []int {
|
||||
}
|
||||
|
||||
func GetCleanItem() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Clean")
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
|
||||
if v == "" {
|
||||
continue
|
||||
@ -157,11 +157,11 @@ func GetCleanItem() []int {
|
||||
return r
|
||||
}
|
||||
func GetToyItem() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Toy")
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
|
||||
if v == "" {
|
||||
continue
|
||||
@ -172,11 +172,11 @@ func GetToyItem() []int {
|
||||
return r
|
||||
}
|
||||
func GetDailyItem() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Daily")
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
|
||||
if v == "" {
|
||||
continue
|
||||
@ -188,11 +188,11 @@ func GetDailyItem() []int {
|
||||
}
|
||||
|
||||
func GetPremiumItem() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "PremiumItem")
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
|
||||
if v == "" {
|
||||
continue
|
||||
@ -278,11 +278,11 @@ func GetInteractPExp(Id int) int {
|
||||
}
|
||||
|
||||
func GetInitDecorate() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_DECORATE)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "Init") == 1 {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
@ -292,11 +292,11 @@ func GetInitDecorate() []int {
|
||||
}
|
||||
|
||||
func GetDecorateList() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_DECORATE)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
}
|
||||
@ -339,11 +339,11 @@ func GetPhysiologyDuration(Id int, Num int) int {
|
||||
}
|
||||
|
||||
func GetPhysiologyTypeList() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_PHYSIOLOGY_TYPE)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
}
|
||||
@ -401,11 +401,11 @@ func IsPlayCat(Id int) bool {
|
||||
}
|
||||
|
||||
func GetInitAirList() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_AIR)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "Init") == 1 {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
@ -415,11 +415,11 @@ func GetInitAirList() []int {
|
||||
}
|
||||
|
||||
func GetAirList() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_AIR)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
}
|
||||
@ -427,11 +427,11 @@ func GetAirList() []int {
|
||||
}
|
||||
|
||||
func GetInitDressList() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_DRESS)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "Init") == 1 {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
@ -441,11 +441,11 @@ func GetInitDressList() []int {
|
||||
}
|
||||
|
||||
func GetDressList() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_DRESS)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
}
|
||||
@ -490,7 +490,7 @@ func GetDailyTask(Type int) map[int]string {
|
||||
return nil
|
||||
}
|
||||
r := make(map[int]string)
|
||||
r1 := make([]int, 0)
|
||||
r1 := make([]int, 0, len(data))
|
||||
r2 := make(map[int]string)
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "Type") == Type {
|
||||
@ -499,7 +499,14 @@ func GetDailyTask(Type int) map[int]string {
|
||||
r1 = append(r1, k1)
|
||||
}
|
||||
}
|
||||
r3 := GoUtil.RandSliceNum(r1, 6)
|
||||
daily_group_num := 0
|
||||
switch Type {
|
||||
case 1:
|
||||
daily_group_num = GetPlayroomTaskDailyNum1()
|
||||
case 2:
|
||||
daily_group_num = GetPlayroomTaskDailyNum2()
|
||||
}
|
||||
r3 := GoUtil.RandSliceNum(r1, daily_group_num)
|
||||
for _, v := range r3 {
|
||||
r2[v] = r[v]
|
||||
}
|
||||
@ -548,11 +555,11 @@ func GetTaskJackpotReward(Id int) []*item.Item {
|
||||
}
|
||||
|
||||
func GetPhysiologyList(MoodType int) []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_PHYSIOLOGY_TYPE)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
r := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "MType") == MoodType {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
@ -565,47 +572,6 @@ func GetInteractIdBath() []int {
|
||||
return []int{11, 12, 13}
|
||||
}
|
||||
|
||||
func GetOrderItem(Star int) map[int][]gamedata.PetOrderItem {
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_ORDERITEM)
|
||||
if err != nil {
|
||||
log.Debug("GetOrderItem err:%v", err)
|
||||
return nil
|
||||
}
|
||||
r := make(map[int][]gamedata.PetOrderItem)
|
||||
for k, v := range data {
|
||||
ItemStar := gamedata.GetIntValue(v, "Star")
|
||||
if ItemStar > 0 && ItemStar > Star {
|
||||
continue
|
||||
}
|
||||
Id := GoUtil.Int(k)
|
||||
Type := gamedata.GetIntValue(v, "Type")
|
||||
if Type == 0 {
|
||||
continue
|
||||
}
|
||||
if _, ok := r[Type]; !ok {
|
||||
r[Type] = make([]gamedata.PetOrderItem, 0)
|
||||
}
|
||||
if Id == 0 {
|
||||
log.Debug("GetOrderItem Id is 0, Type:%v", Type)
|
||||
continue
|
||||
}
|
||||
GradeStr := gamedata.GetStringValue(v, "Grade")
|
||||
Grade := make([]int, 0)
|
||||
for _, v1 := range strings.Split(GradeStr, ",") {
|
||||
v2 := GoUtil.Int(v1)
|
||||
if v2 > 0 {
|
||||
Grade = append(Grade, v2)
|
||||
}
|
||||
}
|
||||
r[Type] = append(r[Type], gamedata.PetOrderItem{
|
||||
Id: Id,
|
||||
Star: ItemStar,
|
||||
Grade: Grade,
|
||||
})
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func GetOrderItemByGrade(Grade int) map[int][]int {
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_ORDERITEM)
|
||||
if err != nil {
|
||||
@ -648,7 +614,7 @@ func GetOrderItemList() []int {
|
||||
log.Debug("GetOrderItemList err:%v", err)
|
||||
return nil
|
||||
}
|
||||
r := make([]int, 0)
|
||||
r := make([]int, 0, len(data))
|
||||
for k := range data {
|
||||
Id := GoUtil.Int(k)
|
||||
if Id == 0 {
|
||||
@ -706,7 +672,7 @@ func GetDailyTaskListById(Id int) []int {
|
||||
return nil
|
||||
}
|
||||
Type := GetDailyTaskType(Id)
|
||||
r := make([]int, 0)
|
||||
r := make([]int, 0, len(data))
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "Type") == Type {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
@ -736,3 +702,21 @@ func GetItemAddPhysiology(Item map[int]int) int {
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func GetPlayroomTaskDailyNum1() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "dailytask_groupnum1")
|
||||
if err != nil {
|
||||
log.Debug("GetPlayroomTaskDailyNum1 err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
|
||||
func GetPlayroomTaskDailyNum2() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "dailytask_groupnum2")
|
||||
if err != nil {
|
||||
log.Debug("GetPlayroomTaskDailyNum2 err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ func GetStartChessList() []int {
|
||||
var ChessList []int
|
||||
for _, v := range data {
|
||||
v1 := v.(map[string]interface{})
|
||||
ChessList = append(ChessList, gamedata.ParseInt(v1["MergeId"]))
|
||||
ChessList = append(ChessList, gamedata.GetIntValue(v1, "MergeId"))
|
||||
}
|
||||
return ChessList
|
||||
}
|
||||
|
||||
@ -151,61 +151,6 @@ func SeriesTransaction(sqlstrs []string, params [][]any) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// 更新数据
|
||||
func FormatUpdateOneAttrRow(u interface{}, tableName string, UpdateAttr string, Exclude string) (err error) {
|
||||
t := reflect.TypeOf(u)
|
||||
len1 := t.Elem().NumField()
|
||||
Fields := make([]string, len1)
|
||||
Values := make([]interface{}, len1)
|
||||
pp := reflect.ValueOf(u)
|
||||
origin := "UPDATE " + tableName + " SET "
|
||||
index := 0
|
||||
var keyValue interface{}
|
||||
for i := 0; i < len1; i++ {
|
||||
field := t.Elem().Field(i)
|
||||
if field.Tag.Get("db") != Exclude {
|
||||
if field.Tag.Get("db") == UpdateAttr {
|
||||
Fields[index] = field.Tag.Get("db") + " = ?"
|
||||
|
||||
ufield := pp.Elem().FieldByName(field.Name)
|
||||
k := ufield.Kind()
|
||||
if k == reflect.String {
|
||||
Values[index] = ufield.String()
|
||||
}
|
||||
if k == reflect.Int32 {
|
||||
Values[index] = ufield.Int()
|
||||
}
|
||||
index++
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
ufield := pp.Elem().FieldByName(field.Name)
|
||||
k := ufield.Kind()
|
||||
if k == reflect.String {
|
||||
keyValue = ufield.String()
|
||||
}
|
||||
if k == reflect.Int32 {
|
||||
keyValue = ufield.Int()
|
||||
}
|
||||
}
|
||||
}
|
||||
Values[index] = keyValue
|
||||
// Values = append(Values, keyValue)
|
||||
origin += strings.Join(Fields, ",")
|
||||
strLen := len(origin)
|
||||
origin = origin[:strLen-1]
|
||||
origin = origin + " WHERE " + Exclude + " = ?"
|
||||
sqlStr := origin
|
||||
_, err = SqlDb.Exec(sqlStr, Values...)
|
||||
if err != nil {
|
||||
log.Debug("table: %s, sql :%s, exec failed, err:%v\n", tableName, sqlStr, err)
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// "UPDATE user SET age = ?, degree = ? WHERE id = ?"
|
||||
func FormatAllMemUpdateDb(u interface{}, tableName string, Exclude string) (err error) {
|
||||
t := reflect.TypeOf(u)
|
||||
@ -381,52 +326,6 @@ func UpdateAccountInfoDeviceToDb(account *Db_Account) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func FormatAllMemLoadDb(u interface{}, tableName string, Exclude string) (err error) {
|
||||
t := reflect.TypeOf(u)
|
||||
len := t.Elem().NumField()
|
||||
Fields := make([]string, len)
|
||||
Values := make([]interface{}, len)
|
||||
pp := reflect.ValueOf(u)
|
||||
origin := "SELECT * FROM " + tableName + " WHERE "
|
||||
index := 0
|
||||
var keyValue interface{}
|
||||
for i := 0; i < len; i++ {
|
||||
field := t.Elem().Field(i)
|
||||
if field.Tag.Get("db") != Exclude {
|
||||
Fields[index] = field.Tag.Get("db") + " = ?"
|
||||
|
||||
ufield := pp.Elem().FieldByName(field.Name)
|
||||
k := ufield.Kind()
|
||||
if k == reflect.String {
|
||||
Values[index] = ufield.String()
|
||||
}
|
||||
if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 {
|
||||
Values[index] = ufield.Int()
|
||||
}
|
||||
index++
|
||||
} else {
|
||||
|
||||
ufield := pp.Elem().FieldByName(field.Name)
|
||||
k := ufield.Kind()
|
||||
if k == reflect.String {
|
||||
keyValue = ufield.String()
|
||||
}
|
||||
if k == reflect.Int32 {
|
||||
keyValue = ufield.Int()
|
||||
}
|
||||
}
|
||||
}
|
||||
Values[index] = keyValue
|
||||
// Values = append(Values, keyValue)
|
||||
origin += strings.Join(Fields, " AND ")
|
||||
sqlStr := origin
|
||||
if err := SqlDb.Get(u, sqlStr, Values...); err != nil {
|
||||
log.Debug("table: %s, sql :%s, exec failed, err:%v\n", tableName, sqlStr, err)
|
||||
return err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func GetServerData(d interface{}, Key string) (err error) {
|
||||
sqlDb := GetDB()
|
||||
if sqlDb == nil {
|
||||
@ -487,103 +386,6 @@ func GetPlayerClientData(d interface{}, Key string) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func InsertData(u interface{}, tableName string) (insertID int64, err error) {
|
||||
t := reflect.TypeOf(u)
|
||||
len := t.Elem().NumField()
|
||||
Fields := make([]string, 0)
|
||||
Fields1 := make([]string, 0)
|
||||
Values := make([]interface{}, 0)
|
||||
pp := reflect.ValueOf(u)
|
||||
origin := "INSERT INTO " + tableName + "("
|
||||
for i := 0; i < len; i++ {
|
||||
field := t.Elem().Field(i)
|
||||
if field.Tag.Get("db") == "id" {
|
||||
continue
|
||||
}
|
||||
|
||||
ufield := pp.Elem().FieldByName(field.Name)
|
||||
k := ufield.Kind()
|
||||
if k == reflect.String && ufield.String() == "" {
|
||||
continue
|
||||
}
|
||||
if (k == reflect.Int32 || k == reflect.Int || k == reflect.Int64) && ufield.Int() == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
if k == reflect.String {
|
||||
Values = append(Values, ufield.String())
|
||||
}
|
||||
if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 {
|
||||
Values = append(Values, ufield.Int())
|
||||
}
|
||||
Fields = append(Fields, field.Tag.Get("db"))
|
||||
Fields1 = append(Fields1, "?")
|
||||
}
|
||||
for i := range Fields {
|
||||
Fields[i] = "`" + Fields[i] + "`"
|
||||
}
|
||||
origin += strings.Join(Fields, ",")
|
||||
origin += ") VALUES("
|
||||
origin += strings.Join(Fields1, ",")
|
||||
origin += ")"
|
||||
sqlStr := origin
|
||||
result, err := SqlDb.Exec(sqlStr, Values...)
|
||||
if err != nil {
|
||||
log.Debug("InsertData exec failed, sql : %s ;err:%v\n", sqlStr, err)
|
||||
return
|
||||
}
|
||||
insertID, err = result.LastInsertId()
|
||||
if err != nil {
|
||||
log.Debug("InsertData exec failed, err:%v\n", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func UpdateData(u interface{}, tableName string, Exclude string) (err error) {
|
||||
t := reflect.TypeOf(u)
|
||||
len1 := t.Elem().NumField()
|
||||
Fields := make([]string, 0)
|
||||
Values := make([]interface{}, 0)
|
||||
pp := reflect.ValueOf(u)
|
||||
origin := "UPDATE " + tableName + " SET "
|
||||
var ExcludeValue interface{}
|
||||
for i := 0; i < len1; i++ {
|
||||
field := t.Elem().Field(i)
|
||||
ufield := pp.Elem().FieldByName(field.Name)
|
||||
k := ufield.Kind()
|
||||
if field.Tag.Get("db") != Exclude && field.Tag.Get("db") != "id" {
|
||||
|
||||
if k == reflect.String {
|
||||
Values = append(Values, ufield.String())
|
||||
}
|
||||
if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 {
|
||||
Values = append(Values, ufield.Int())
|
||||
}
|
||||
Fields = append(Fields, "`"+field.Tag.Get("db")+"` = ?")
|
||||
}
|
||||
if field.Tag.Get("db") == Exclude {
|
||||
if k == reflect.String {
|
||||
ExcludeValue = ufield.String()
|
||||
}
|
||||
if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 {
|
||||
ExcludeValue = append(Values, ufield.Int())
|
||||
}
|
||||
}
|
||||
}
|
||||
Values = append(Values, ExcludeValue)
|
||||
origin += strings.Join(Fields, ",")
|
||||
origin = origin + " WHERE `" + Exclude + "` = ?"
|
||||
sqlStr := origin
|
||||
|
||||
_, err = SqlDb.Exec(sqlStr, Values...)
|
||||
if err != nil {
|
||||
log.Debug("update failed, sql %s err:%v\n", sqlStr, err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func GetServerMailData(data *[]*SqlServerMailStruct) error {
|
||||
sql := "select * from system_mail_info"
|
||||
err := SqlDb.Select(data, sql)
|
||||
@ -630,3 +432,13 @@ func SearchPlayer(key string) ([]*ResPlayerBaseInfo, error) {
|
||||
err := SqlDb.Select(data, sql, "%"+key+"%")
|
||||
return *data, err
|
||||
}
|
||||
|
||||
func GetCommendPlayerFromDb(uid, login int64, level int) ([]int, error) {
|
||||
sqlStr := "SELECT dwUin FROM t_player_baseinfo WHERE dwUin != ? AND logout_time > ? AND level >= ? ORDER BY logout_time DESC LIMIT 1000"
|
||||
var res []int
|
||||
if err := SqlDb.Select(&res, sqlStr, uid, login, level); err != nil {
|
||||
log.Debug("table: %s, sql :%s, exec failed, err:%v\n", "PlayerBaseInfo", sqlStr, err)
|
||||
return nil, err
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
@ -474,24 +474,27 @@ type SqlServerModStruct struct {
|
||||
}
|
||||
|
||||
type SqlServerMailStruct struct {
|
||||
Id int `db:"mail_id"`
|
||||
Title string `db:"title"`
|
||||
Content string `db:"content"`
|
||||
SubTitle string `db:"subTitle"`
|
||||
SubTitleEn string `db:"subTitle_en"`
|
||||
TitleEn string `db:"title_en"`
|
||||
ContentEn string `db:"content_en"`
|
||||
TitlePtBr string `db:"title_ptbr"`
|
||||
SubTitlePtBr string `db:"subTitle_ptbr"`
|
||||
ContentPtBr string `db:"content_ptbr"`
|
||||
Items string `db:"items"`
|
||||
Start_time int64 `db:"start_time"`
|
||||
Register_time int64 `db:"register_time"`
|
||||
End_time int64 `db:"end_time"`
|
||||
Mail_type int `db:"mail_type"`
|
||||
Send_type int `db:"send_type"`
|
||||
To_uids string `db:"to_uids"`
|
||||
CreateTime int64 `db:"create_time"`
|
||||
Id int `db:"mail_id"`
|
||||
Title string `db:"title"`
|
||||
Content string `db:"content"`
|
||||
SubTitle string `db:"subTitle"`
|
||||
SubTitleEn string `db:"subTitle_en"`
|
||||
TitleEn string `db:"title_en"`
|
||||
ContentEn string `db:"content_en"`
|
||||
TitlePtBr string `db:"title_ptbr"`
|
||||
SubTitlePtBr string `db:"subTitle_ptbr"`
|
||||
ContentPtBr string `db:"content_ptbr"`
|
||||
TitleEsLatam string `db:"title_es_latam"`
|
||||
SubTitleEsLatam string `db:"subTitle_es_latam"`
|
||||
ContentEsLatam string `db:"content_es_latam"`
|
||||
Items string `db:"items"`
|
||||
Start_time int64 `db:"start_time"`
|
||||
Register_time int64 `db:"register_time"`
|
||||
End_time int64 `db:"end_time"`
|
||||
Mail_type int `db:"mail_type"`
|
||||
Send_type int `db:"send_type"`
|
||||
To_uids string `db:"to_uids"`
|
||||
CreateTime int64 `db:"create_time"`
|
||||
}
|
||||
|
||||
type SqlChargeOrderStruct struct {
|
||||
|
||||
@ -429,6 +429,14 @@ func (ad *GameLogic) GetResFriendPlayerByUid(Id int) *msg.ResFriendPlayerSimple
|
||||
return nil
|
||||
}
|
||||
}
|
||||
last := &msg.ActLog{}
|
||||
if player.ActLog != nil {
|
||||
last = &msg.ActLog{
|
||||
Type: int32(player.ActLog.Type),
|
||||
Time: player.ActLog.Time,
|
||||
Param: player.ActLog.Param,
|
||||
}
|
||||
}
|
||||
return &msg.ResFriendPlayerSimple{
|
||||
Uid: int64(player.Uid),
|
||||
Name: player.Name,
|
||||
@ -444,6 +452,7 @@ func (ad *GameLogic) GetResFriendPlayerByUid(Id int) *msg.ResFriendPlayerSimple
|
||||
DressSet: GoUtil.MapIntToInt32(player.DressSet),
|
||||
Friend: GoUtil.IntToInt32(player.Friend),
|
||||
Physiology: GoUtil.MapIntToInt32(player.Physiology),
|
||||
Last: last,
|
||||
PetName: player.PetName,
|
||||
}
|
||||
}
|
||||
@ -463,7 +472,6 @@ func G_getGameLogic() *GameLogic {
|
||||
G_GameLogicPtr.RegisterEvent() // 注册事件
|
||||
G_GameLogicPtr.RegisterNetWorkFunc() // 注册客户端接口
|
||||
G_GameLogicPtr.InitActivity() // 初始化活动
|
||||
G_GameLogicPtr.GetVersion() // 获取版本号
|
||||
if conf.Server.ServerType == "center" {
|
||||
G_GameLogicPtr.CreateFriendMgr() //创建好友管理器
|
||||
G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器
|
||||
@ -492,28 +500,6 @@ func (ad *GameLogic) InitServerInfo() {
|
||||
ad.SeverInfo = ServerInfo
|
||||
}
|
||||
|
||||
func (ad *GameLogic) GetVersion() {
|
||||
sqlStr := "SELECT * FROM t_gameserver WHERE id = ?"
|
||||
sqlStruck := db.SqlVersionStruct{}
|
||||
IsHaveDataDb := false
|
||||
sqlStruck.Id = 1
|
||||
G_GameLogicPtr.Version = 0
|
||||
if err := db.SqlDb.Get(&sqlStruck, sqlStr, 1); err != nil {
|
||||
G_GameLogicPtr.Version = 1
|
||||
IsHaveDataDb = false
|
||||
} else {
|
||||
G_GameLogicPtr.Version = sqlStruck.IsClose + 1
|
||||
IsHaveDataDb = true
|
||||
}
|
||||
sqlStruck.IsClose = G_GameLogicPtr.Version
|
||||
|
||||
if IsHaveDataDb {
|
||||
db.FormatAllMemUpdateDb(&sqlStruck, "t_gameserver", "id")
|
||||
} else {
|
||||
db.FormatAllMemInsertDb(&sqlStruck, "t_gameserver")
|
||||
}
|
||||
}
|
||||
|
||||
func (ad *GameLogic) SendServerVersion(a gate.Agent) {
|
||||
res := &msg.ResServerVersion{}
|
||||
res.Version = G_GameLogicPtr.Version
|
||||
@ -748,7 +734,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqFriendTimeLine", ReqFriendTimeLine) // 请求好友时间线
|
||||
RegisterMsgProcessFunc("ReqFriendRecommend", ReqFriendRecommend) // 获取推荐好友
|
||||
RegisterMsgProcessFunc("ReqFriendTLUpvote", ReqFriendTLUpvote) // 请求时间线点赞
|
||||
RegisterMsgProcessFunc("ReqFriendTReward", ReqFriendTReward) // 请求时间线点赞
|
||||
RegisterMsgProcessFunc("ReqFriendTReward", ReqFriendTReward) // 获取时间线奖励
|
||||
RegisterMsgProcessFunc("ReqAddNpc", ReqAddNpc) // 增加npc
|
||||
RegisterMsgProcessFunc("ReqWishApply", ReqWishApply) // 同意好友心愿单请求
|
||||
RegisterMsgProcessFunc("ReqFriendByCode", ReqFriendByCode) // 根据邀请码查询好友
|
||||
@ -861,7 +847,6 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqFriendTreasureEnd", ReqFriendTreasureEnd) // 结束游戏
|
||||
|
||||
// #region 充值
|
||||
RegisterMsgProcessFunc("ReqKafkaLog", ReqKafkaLog) // 客户端日志
|
||||
RegisterMsgProcessFunc("ReqCreateOrderSn", ReqCreateOrderSn) // 创建订单号
|
||||
RegisterMsgProcessFunc("ReqShippingOrder", ReqShippingOrder) // 获取订单号
|
||||
RegisterMsgProcessFunc("ReqChargeReceive", ReqChargeReceive) // 礼包回复邮件
|
||||
|
||||
@ -221,7 +221,7 @@ func (p *Player) GuessColorBackData() {
|
||||
|
||||
Status := p.GetActivityStatus(activity.ACT_TYPE_GUESS_COLOR)
|
||||
GuessColorMod := p.PlayMod.getGuessColorMod()
|
||||
MapList := make([]*msg.GuessColorInfo, 0)
|
||||
MapList := make([]*msg.GuessColorInfo, 0, len(GuessColorMod.MapList))
|
||||
for _, v := range GuessColorMod.MapList {
|
||||
MapList = append(MapList, &msg.GuessColorInfo{
|
||||
Map: v,
|
||||
@ -252,7 +252,7 @@ func (p *Player) RaceBackData() {
|
||||
}
|
||||
Status := p.GetActivityStatus(activity.ACT_TYPE_RACE)
|
||||
RaceMod := p.PlayMod.getRaceMod()
|
||||
Opponent := make([]*msg.Raceopponent, 0)
|
||||
Opponent := make([]*msg.Raceopponent, 0, len(RaceMod.Opponent))
|
||||
for _, v := range RaceMod.Opponent {
|
||||
Opponent = append(Opponent, &msg.Raceopponent{
|
||||
Id: int32(v.Id),
|
||||
@ -352,7 +352,7 @@ func (p *Player) CatnipBackData() {
|
||||
return
|
||||
}
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
GameList := make([]*msg.CatnipGame, 0)
|
||||
GameList := make([]*msg.CatnipGame, 0, len(CatnipMod.Game))
|
||||
for _, v := range CatnipMod.Game {
|
||||
GameInfo := &msg.CatnipGame{
|
||||
Id: int32(v.Id),
|
||||
@ -373,7 +373,6 @@ func (p *Player) CatnipBackData() {
|
||||
GameList = append(GameList, GameInfo)
|
||||
}
|
||||
tmpData := make(map[int]*msg.CatnipInvite)
|
||||
InviteList := make([]*msg.CatnipInvite, 0)
|
||||
for uid, info := range CatnipMod.InviteList {
|
||||
tmpData[uid] = &msg.CatnipInvite{
|
||||
Uid: int64(uid),
|
||||
@ -410,6 +409,7 @@ func (p *Player) CatnipBackData() {
|
||||
invite.Type = 4 // 已参与游戏的好友不显示邀请
|
||||
}
|
||||
}
|
||||
InviteList := make([]*msg.CatnipInvite, 0, len(tmpData))
|
||||
for _, v := range tmpData {
|
||||
ResPlayerSimple := G_getGameLogic().GetResSimplePlayerByUid(int(v.Uid))
|
||||
if ResPlayerSimple != nil {
|
||||
|
||||
@ -166,6 +166,7 @@ func AdminPlayerInfo(args []interface{}) error {
|
||||
res["AreaId"] = player.PlayMod.getDecorateMod().GetAreaId()
|
||||
res["Face"] = player.PlayMod.getFaceMod().SetId
|
||||
res["Charge"] = player.PlayMod.getChargeMod().Charge
|
||||
res["MaxCharge"] = player.PlayMod.getChargeMod().MaxCharge
|
||||
res["Level"] = player.GetPlayerBaseMod().GetLevel()
|
||||
res["Diamond"] = player.GetPlayerBaseMod().GetDiamond()
|
||||
res["Star"] = player.GetPlayerBaseMod().GetStar()
|
||||
@ -185,6 +186,31 @@ func AdminPlayerInfo(args []interface{}) error {
|
||||
res["Code"] = player.PlayMod.getBaseMod().AddCode
|
||||
res["ChessMap"] = player.PlayMod.getChessMod().ChessMap
|
||||
res["ActLog"] = player.PlayMod.getFriendMod().ActivityLog
|
||||
friendList := player.PlayMod.getFriendMod().NewFriendList
|
||||
type friendInfo struct {
|
||||
Uid int64
|
||||
NickName string
|
||||
Avatar int
|
||||
Level int
|
||||
LogoutTime int64
|
||||
LoginTime int64
|
||||
}
|
||||
resFriendList := make([]friendInfo, 0, len(friendList))
|
||||
for v := range friendList {
|
||||
ps := G_GameLogicPtr.GetSimplePlayerByUid(v)
|
||||
if ps == nil {
|
||||
continue
|
||||
}
|
||||
resFriendList = append(resFriendList, friendInfo{
|
||||
Uid: int64(v),
|
||||
NickName: ps.Name,
|
||||
Avatar: ps.Face,
|
||||
Level: ps.Level,
|
||||
LogoutTime: ps.Loginout,
|
||||
LoginTime: ps.Login,
|
||||
})
|
||||
}
|
||||
res["FriendList"] = resFriendList
|
||||
OrderMap := make(map[int]interface{})
|
||||
Index := 0
|
||||
for k, v := range player.PlayMod.getOrderMod().OrderList {
|
||||
|
||||
@ -1,14 +1,17 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
champshipCfg "server/conf/champship"
|
||||
randnameCfg "server/conf/randname"
|
||||
"server/db"
|
||||
"server/game/mod/msg"
|
||||
GoUtil "server/game_util"
|
||||
proto "server/msg"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sort"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -21,6 +24,7 @@ type ChampshipMgr struct {
|
||||
}
|
||||
|
||||
type ChampshipData struct {
|
||||
mu sync.RWMutex
|
||||
AutoId int
|
||||
RobotId int
|
||||
Rank map[int][]*ChampshipRank // 锦标赛排行榜
|
||||
@ -112,41 +116,82 @@ func (c *ChampshipMgr) NotifyAll() (interface{}, error) {
|
||||
|
||||
func (c *ChampshipMgr) ZeroUpdate() (interface{}, error) {
|
||||
log.Debug("ChampshipMgr ZeroUpdate")
|
||||
c.getData().ZeroTime = GoUtil.ZeroTimestamp()
|
||||
c.getData().PreRank = c.getData().Rank
|
||||
c.getData().PreRobot = c.getData().Robot
|
||||
c.getData().PreGroupInfo = c.getData().GroupInfo
|
||||
c.getData().AutoId = 0
|
||||
c.getData().RobotId = 1
|
||||
c.getData().Robot = make(map[int]*ChampshipRobot, 0)
|
||||
c.getData().Rank = make(map[int][]*ChampshipRank, 0)
|
||||
c.getData().GroupInfo = make(map[int]int, 0)
|
||||
data := c.getData()
|
||||
data.mu.Lock()
|
||||
data.ZeroTime = GoUtil.ZeroTimestamp()
|
||||
// 深拷贝 map,避免多个协程持有同一个 map 引用导致并发读写
|
||||
oldRank := make(map[int][]*ChampshipRank, len(data.Rank))
|
||||
for k, v := range data.Rank {
|
||||
oldRank[k] = v
|
||||
}
|
||||
oldRobot := make(map[int]*ChampshipRobot, len(data.Robot))
|
||||
for k, v := range data.Robot {
|
||||
oldRobot[k] = v
|
||||
}
|
||||
oldGroupInfo := make(map[int]int, len(data.GroupInfo))
|
||||
for k, v := range data.GroupInfo {
|
||||
oldGroupInfo[k] = v
|
||||
}
|
||||
|
||||
data.PreRank = oldRank
|
||||
data.PreRobot = oldRobot
|
||||
data.PreGroupInfo = oldGroupInfo
|
||||
data.AutoId = 0
|
||||
data.RobotId = 1
|
||||
data.Robot = make(map[int]*ChampshipRobot, 0)
|
||||
data.Rank = make(map[int][]*ChampshipRank, 0)
|
||||
data.GroupInfo = make(map[int]int, 0)
|
||||
c.update = true
|
||||
// 0点更新排行榜缓存
|
||||
for k := range data.PreGroupInfo {
|
||||
c.SetRankCache(k)
|
||||
}
|
||||
data.mu.Unlock()
|
||||
|
||||
c.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() {
|
||||
c.ZeroUpdate()
|
||||
})
|
||||
c.NotifyPlayer()
|
||||
c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() {
|
||||
c.NotifyAll()
|
||||
})
|
||||
// 在锁外通知玩家,避免在持有锁时调用外部函数
|
||||
go c.NotifyPlayer()
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (c *ChampshipMgr) NotifyPlayer() {
|
||||
List := c.getData().PreRank
|
||||
for _, v := range List {
|
||||
for i := 0; i < 3; i++ {
|
||||
data := c.getData()
|
||||
data.mu.RLock()
|
||||
// 深拷贝需要通知的数据,避免在锁外访问 map
|
||||
notifyList := make([]struct {
|
||||
Uid int
|
||||
Rank int
|
||||
}, 0)
|
||||
for _, v := range data.PreRank {
|
||||
for i := 0; i < 3 && i < len(v); i++ {
|
||||
if v[i].Type == RANK_PLAYER_ROBOT {
|
||||
continue
|
||||
}
|
||||
NotifyChampshipResult(v[i].Uid, i+1)
|
||||
notifyList = append(notifyList, struct {
|
||||
Uid int
|
||||
Rank int
|
||||
}{Uid: v[i].Uid, Rank: i + 1})
|
||||
}
|
||||
}
|
||||
data.mu.RUnlock()
|
||||
|
||||
// 在锁外通知,避免持锁时间过长
|
||||
for _, item := range notifyList {
|
||||
NotifyChampshipResult(item.Uid, item.Rank)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *ChampshipMgr) ai() (interface{}, error) {
|
||||
ChampshipData := c.getData()
|
||||
ChampshipData.mu.Lock()
|
||||
defer ChampshipData.mu.Unlock()
|
||||
Now := GoUtil.Now()
|
||||
uids := make(map[int]struct{})
|
||||
for k, v := range ChampshipData.Rank {
|
||||
Notify := make(map[int]int)
|
||||
for e, r := range v {
|
||||
@ -183,20 +228,30 @@ func (c *ChampshipMgr) ai() (interface{}, error) {
|
||||
continue
|
||||
}
|
||||
if Notify[r.Uid] != e {
|
||||
NotifyPlayer(r.Uid, &msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
})
|
||||
c.SetRankCache(r.Uid)
|
||||
uids[r.Uid] = struct{}{}
|
||||
}
|
||||
}
|
||||
ChampshipData.Rank[k] = v
|
||||
}
|
||||
|
||||
// 在锁外通知玩家,避免在持锁时启动 goroutine 访问可能被并发修改的数据
|
||||
for uid := range uids {
|
||||
go NotifyPlayer(uid, &msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
})
|
||||
}
|
||||
|
||||
c.mDispatr.AfterFunc(time.Duration(60)*time.Second, func() {
|
||||
c.ai()
|
||||
})
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (c *ChampshipMgr) GetPreRankMsg(Uid int) *proto.ResChampshipPreRank {
|
||||
ChampshipData := c.getData()
|
||||
ChampshipData.mu.RLock()
|
||||
defer ChampshipData.mu.RUnlock()
|
||||
GroupId := ChampshipData.PreGroupInfo[Uid]
|
||||
if GroupId == 0 {
|
||||
return &proto.ResChampshipPreRank{}
|
||||
@ -253,6 +308,8 @@ func (c *ChampshipMgr) GetPreRankMsg(Uid int) *proto.ResChampshipPreRank {
|
||||
// TODO 待优化
|
||||
func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank {
|
||||
ChampshipData := c.getData()
|
||||
ChampshipData.mu.RLock()
|
||||
defer ChampshipData.mu.RUnlock()
|
||||
GroupId := ChampshipData.GroupInfo[Uid]
|
||||
if GroupId == 0 {
|
||||
return &proto.ResChampshipRank{}
|
||||
@ -316,6 +373,8 @@ func (c *ChampshipMgr) group() (interface{}, error) {
|
||||
return nil, nil
|
||||
}
|
||||
ChampshipData := c.getData()
|
||||
ChampshipData.mu.Lock()
|
||||
defer ChampshipData.mu.Unlock()
|
||||
if len(ChampshipData.Pool) == 0 { // 未分配玩家池为空
|
||||
return nil, nil
|
||||
}
|
||||
@ -341,8 +400,16 @@ func (c *ChampshipMgr) group() (interface{}, error) {
|
||||
if len(g[i]) == 0 {
|
||||
continue
|
||||
}
|
||||
// 少于10个的元素合并到下一组
|
||||
if len(g[i]) < 10 && i > 1 {
|
||||
g[i-1] = append(g[i-1], g[i]...)
|
||||
continue
|
||||
}
|
||||
// 不被10整除的元素分到下一组
|
||||
if len(g[i])%10 != 0 && i > 1 {
|
||||
remainder := len(g[i]) % 10
|
||||
g[i-1] = append(g[i-1], g[i][len(g[i])-remainder:]...)
|
||||
g[i] = g[i][:len(g[i])-remainder]
|
||||
}
|
||||
ChampshipData.AutoId++
|
||||
StartId := ChampshipData.AutoId
|
||||
@ -354,14 +421,6 @@ func (c *ChampshipMgr) group() (interface{}, error) {
|
||||
Score: UserData.Score,
|
||||
Time: UserData.Time,
|
||||
})
|
||||
sort.Slice(ChampshipData.Rank[ChampshipData.AutoId], func(i, j int) bool { // 排序 从大到小 数值相等按时间排序
|
||||
if ChampshipData.Rank[ChampshipData.AutoId][i].Score > ChampshipData.Rank[ChampshipData.AutoId][j].Score {
|
||||
return true
|
||||
} else if ChampshipData.Rank[ChampshipData.AutoId][i].Score == ChampshipData.Rank[ChampshipData.AutoId][j].Score {
|
||||
return ChampshipData.Rank[ChampshipData.AutoId][i].Time < ChampshipData.Rank[ChampshipData.AutoId][j].Time
|
||||
}
|
||||
return false
|
||||
})
|
||||
if len(ChampshipData.Rank[ChampshipData.AutoId]) == 10 {
|
||||
ChampshipData.AutoId++
|
||||
}
|
||||
@ -377,25 +436,33 @@ func (c *ChampshipMgr) group() (interface{}, error) {
|
||||
Time: v.Time,
|
||||
Type: RANK_PLAYER_ROBOT,
|
||||
})
|
||||
sort.Slice(ChampshipData.Rank[j], func(x, y int) bool { // 排序 从大到小 数值相等按时间排序
|
||||
if ChampshipData.Rank[j][x].Score > ChampshipData.Rank[j][y].Score {
|
||||
return true
|
||||
} else if ChampshipData.Rank[j][x].Score == ChampshipData.Rank[j][y].Score {
|
||||
return ChampshipData.Rank[j][x].Time < ChampshipData.Rank[j][y].Time
|
||||
}
|
||||
return false
|
||||
})
|
||||
ChampshipData.RobotId++
|
||||
}
|
||||
sort.Slice(ChampshipData.Rank[j], func(x, y int) bool { // 排序 从大到小 数值相等按时间排序
|
||||
if ChampshipData.Rank[j][x].Score > ChampshipData.Rank[j][y].Score {
|
||||
return true
|
||||
} else if ChampshipData.Rank[j][x].Score == ChampshipData.Rank[j][y].Score {
|
||||
return ChampshipData.Rank[j][x].Time < ChampshipData.Rank[j][y].Time
|
||||
}
|
||||
return false
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
for k := range ChampshipData.Pool { // 分组完成通知
|
||||
NotifyPlayer(k, &msg.Msg{
|
||||
// 收集需要通知的玩家
|
||||
notifyList := make([]int, 0, len(ChampshipData.Pool))
|
||||
for k := range ChampshipData.Pool {
|
||||
c.SetRankCache(k) // SetRankCache 使用 unsafe 方法,在持有锁时是安全的
|
||||
notifyList = append(notifyList, k)
|
||||
}
|
||||
c.getData().Pool = make(map[int]*GroupInfo) // 清空未分配池
|
||||
|
||||
// 在锁外通知玩家,避免在持有锁时调用外部函数
|
||||
for _, uid := range notifyList {
|
||||
go NotifyPlayer(uid, &msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
})
|
||||
}
|
||||
c.getData().Pool = make(map[int]*GroupInfo) // 清空未分配池
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@ -403,6 +470,8 @@ func (c *ChampshipMgr) group() (interface{}, error) {
|
||||
|
||||
func (c *ChampshipMgr) getGroupId(Uid int) int {
|
||||
ChampshipData := c.getData()
|
||||
ChampshipData.mu.RLock()
|
||||
defer ChampshipData.mu.RUnlock()
|
||||
GroupId, ok := ChampshipData.GroupInfo[Uid]
|
||||
if ok {
|
||||
return GroupId
|
||||
@ -412,9 +481,19 @@ func (c *ChampshipMgr) getGroupId(Uid int) int {
|
||||
|
||||
// 进去榜单
|
||||
func (c *ChampshipMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
ChampshipData := c.getData()
|
||||
data := m.Extra.(CRank)
|
||||
// 在加锁前获取 GroupId,避免在持有写锁时调用会获取读锁的 getGroupId 导致死锁
|
||||
GroupId := c.getGroupId(data.Uid)
|
||||
|
||||
ChampshipData := c.getData()
|
||||
ChampshipData.mu.Lock()
|
||||
defer ChampshipData.mu.Unlock()
|
||||
|
||||
// 再次检查 GroupId,因为可能在等待锁期间被其他协程修改
|
||||
if currentGroupId, ok := ChampshipData.GroupInfo[data.Uid]; ok {
|
||||
GroupId = currentGroupId
|
||||
}
|
||||
|
||||
if GroupId == 0 {
|
||||
ChampshipData.Pool[data.Uid] = &GroupInfo{
|
||||
Uid: data.Uid,
|
||||
@ -458,19 +537,47 @@ func (c *ChampshipMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
}
|
||||
return false
|
||||
})
|
||||
ChampshipData.Rank[GroupId] = RankList
|
||||
|
||||
// 收集需要通知的玩家
|
||||
notifyList := make([]int, 0)
|
||||
for k, v := range RankList {
|
||||
if Notify[v.Uid] != k {
|
||||
NotifyPlayer(v.Uid, &msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
})
|
||||
if Notify[v.Uid] != k && v.Type != RANK_PLAYER_ROBOT {
|
||||
c.SetRankCache(v.Uid)
|
||||
notifyList = append(notifyList, v.Uid)
|
||||
}
|
||||
}
|
||||
|
||||
ChampshipData.Rank[GroupId] = RankList
|
||||
// 在锁外通知玩家
|
||||
for _, uid := range notifyList {
|
||||
go NotifyPlayer(uid, &msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
})
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (c *ChampshipMgr) getMyRank(Uid int) int {
|
||||
ChampshipData := c.getData()
|
||||
ChampshipData.mu.RLock()
|
||||
defer ChampshipData.mu.RUnlock()
|
||||
GroupId := ChampshipData.GroupInfo[Uid]
|
||||
if GroupId == 0 {
|
||||
return 0
|
||||
}
|
||||
RankList, ok := ChampshipData.Rank[GroupId]
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
for k, v := range RankList {
|
||||
if v.Uid == Uid {
|
||||
return k + 1
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (c *ChampshipMgr) unsafe_getMyRank(Uid int) int {
|
||||
ChampshipData := c.getData()
|
||||
GroupId := ChampshipData.GroupInfo[Uid]
|
||||
if GroupId == 0 {
|
||||
@ -489,6 +596,25 @@ func (c *ChampshipMgr) getMyRank(Uid int) int {
|
||||
}
|
||||
|
||||
func (c *ChampshipMgr) getLastMyRank(Uid int) int {
|
||||
ChampshipData := c.getData()
|
||||
ChampshipData.mu.RLock()
|
||||
defer ChampshipData.mu.RUnlock()
|
||||
GroupId := ChampshipData.PreGroupInfo[Uid]
|
||||
if GroupId == 0 {
|
||||
return 0
|
||||
}
|
||||
RankList, ok := ChampshipData.PreRank[GroupId]
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
for k, v := range RankList {
|
||||
if v.Uid == Uid {
|
||||
return k + 1
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
func (c *ChampshipMgr) unsafe_getLastMyRank(Uid int) int {
|
||||
ChampshipData := c.getData()
|
||||
GroupId := ChampshipData.PreGroupInfo[Uid]
|
||||
if GroupId == 0 {
|
||||
@ -717,3 +843,24 @@ func CreateRobot(M float64, GroupId int) *ChampshipRobot {
|
||||
PerScore: PerScore,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *ChampshipMgr) SetRankCache(Uid int) {
|
||||
PreRank := c.unsafe_getLastMyRank(Uid)
|
||||
Rank := c.unsafe_getMyRank(Uid)
|
||||
PreGroupId := c.getData().PreGroupInfo[Uid]
|
||||
GroupId := c.getData().GroupInfo[Uid]
|
||||
key := fmt.Sprintf("champship_rank_cache_%d", Uid)
|
||||
log.Debug("SetRankCache key:%s; data:%s", key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId))
|
||||
db.RedisSetKey(key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId), time.Second*172800)
|
||||
}
|
||||
|
||||
func GetRankCache(Uid int) (int, int, int, int) {
|
||||
key := fmt.Sprintf("champship_rank_cache_%d", Uid)
|
||||
data, err := db.RedisGetKey(key)
|
||||
if err != nil || data == "" {
|
||||
return 0, 0, 0, 0
|
||||
}
|
||||
var PreRank, Rank, PreGroupId, GroupId int
|
||||
fmt.Sscanf(data, "%d_%d_%d_%d", &PreRank, &Rank, &PreGroupId, &GroupId)
|
||||
return PreRank, Rank, PreGroupId, GroupId
|
||||
}
|
||||
|
||||
@ -39,7 +39,7 @@ func (p *Player) GetVisitorPlayer() int {
|
||||
if FriendMod.CheckFriend(k) {
|
||||
PlayerList = append(PlayerList, sortData{k, v.Time})
|
||||
} else {
|
||||
PlayerList2 = append(PlayerList, sortData{k, v.Time})
|
||||
PlayerList2 = append(PlayerList2, sortData{k, v.Time})
|
||||
}
|
||||
}
|
||||
if len(PlayerList) != 0 {
|
||||
@ -68,7 +68,7 @@ func (p *Player) GetVisitorPlayer() int {
|
||||
if ps == nil {
|
||||
continue
|
||||
}
|
||||
if GoUtil.Now()-ps.Loginout > 86400 { // 24小时内登录过
|
||||
if Now-ps.Loginout > 86400 { // 24小时内登录过
|
||||
continue
|
||||
}
|
||||
if ps.Loginout > recentLoginTime {
|
||||
@ -79,17 +79,20 @@ func (p *Player) GetVisitorPlayer() int {
|
||||
if recentFriendUid != 0 {
|
||||
return recentFriendUid
|
||||
}
|
||||
PlayerList3 := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER)
|
||||
uids, err := db.GetCommendPlayerFromDb(p.M_DwUin, GoUtil.Now()-86400, 15)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
PlayerList4 := make([]int, 0)
|
||||
for _, v := range PlayerList3 {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
for _, Uid := range uids {
|
||||
if Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
||||
if PlayerSimpleData.Level < 15 {
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||
if PlayerSimpleData == nil {
|
||||
continue
|
||||
}
|
||||
PlayerList4 = append(PlayerList4, v.Uid)
|
||||
PlayerList4 = append(PlayerList4, Uid)
|
||||
}
|
||||
L := GoUtil.RandSliceNum(PlayerList4, 1)
|
||||
if len(L) == 0 {
|
||||
@ -99,37 +102,105 @@ func (p *Player) GetVisitorPlayer() int {
|
||||
}
|
||||
|
||||
func GetRecommendPlayer(p *Player, Num int) []int {
|
||||
PlayerList := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER)
|
||||
PlayerList1 := make([]int, 0)
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
for _, v := range PlayerList {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckSendApply(v.Uid) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckFriend(v.Uid) {
|
||||
continue
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
||||
if GoUtil.Now()-PlayerSimpleData.Loginout > 86400 {
|
||||
continue
|
||||
}
|
||||
if PlayerSimpleData.Level < 4 {
|
||||
continue
|
||||
}
|
||||
PlayerList1 = append(PlayerList1, v.Uid)
|
||||
uids, err := db.GetCommendPlayerFromDb(p.M_DwUin, GoUtil.Now()-259200, 4)
|
||||
if err != nil {
|
||||
log.Debug("GetCommendPlayerFromDb err:%v, uid=%d", err, p.M_DwUin)
|
||||
return nil
|
||||
}
|
||||
if len(PlayerList1) == 0 {
|
||||
for _, v := range PlayerList {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
PlayerList1 := make([]int, 0, len(uids))
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
for _, Uid := range uids {
|
||||
if Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckSendApply(Uid) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckAddBefore(Uid) {
|
||||
continue
|
||||
}
|
||||
PlayerList1 = append(PlayerList1, Uid)
|
||||
}
|
||||
// 按照时间门槛筛选用户
|
||||
filterByTime := func(excludeSeconds int64) []int {
|
||||
now := GoUtil.Now()
|
||||
result := make([]int, 0, len(PlayerList1))
|
||||
for _, Uid := range PlayerList1 {
|
||||
recommendTime := FriendMod.GetRecommendTime(Uid)
|
||||
if recommendTime == 0 || recommendTime <= now-excludeSeconds {
|
||||
result = append(result, Uid)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
// 排查7日内推荐过的用户
|
||||
candidateList := filterByTime(604800)
|
||||
// 用户数低于5则放宽到3日
|
||||
if len(candidateList) < 5 {
|
||||
candidateList = filterByTime(259200)
|
||||
}
|
||||
// 用户数低于5则放宽到2日
|
||||
if len(candidateList) < 5 {
|
||||
candidateList = filterByTime(172800)
|
||||
}
|
||||
|
||||
if len(candidateList) == 0 {
|
||||
candidateList = append(candidateList, PlayerList1...)
|
||||
}
|
||||
|
||||
if len(candidateList) == 0 {
|
||||
candidateList = make([]int, 0, len(uids))
|
||||
for _, Uid := range uids {
|
||||
if Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
PlayerList1 = append(PlayerList1, v.Uid)
|
||||
candidateList = append(candidateList, Uid)
|
||||
}
|
||||
}
|
||||
return GoUtil.RandSliceNum(PlayerList1, Num)
|
||||
baseList := make([]*PlayerSimpleData, 0, len(candidateList))
|
||||
for _, uid := range candidateList {
|
||||
ps := G_GameLogicPtr.GetSimplePlayerByUid(uid)
|
||||
if ps != nil {
|
||||
baseList = append(baseList, ps)
|
||||
}
|
||||
}
|
||||
if len(baseList) == 0 {
|
||||
return nil
|
||||
}
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
level := BaseMod.GetLevel()
|
||||
diffLimit := 10
|
||||
filtered := make([]int, 0, len(baseList))
|
||||
breakNum := 100
|
||||
for {
|
||||
if breakNum <= 0 {
|
||||
break
|
||||
}
|
||||
breakNum--
|
||||
filtered = filtered[:0]
|
||||
for _, ps := range baseList {
|
||||
if ps == nil {
|
||||
continue
|
||||
}
|
||||
diff := level - ps.Level
|
||||
if diff < 0 {
|
||||
diff = -diff
|
||||
}
|
||||
if diff <= diffLimit {
|
||||
filtered = append(filtered, ps.Uid)
|
||||
}
|
||||
}
|
||||
if len(filtered) >= 5 || len(baseList) == 0 {
|
||||
break
|
||||
}
|
||||
diffLimit++
|
||||
}
|
||||
candidateList = filtered
|
||||
recommendList := GoUtil.RandSliceNum(candidateList, Num)
|
||||
for _, Uid := range recommendList {
|
||||
FriendMod.AddRecommend(Uid)
|
||||
}
|
||||
return recommendList
|
||||
}
|
||||
|
||||
func GetUidByFaceBook(Fb string) (int, error) {
|
||||
|
||||
@ -134,7 +134,7 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
player.PlayMod.getSevenLoginMod().Active = num
|
||||
case "pay":
|
||||
ChargeId, _ := strconv.Atoi(arg[1])
|
||||
player.Kafka("pay", map[string]interface{}{
|
||||
player.TeLog("pay", map[string]interface{}{
|
||||
"ProductId": ChargeId,
|
||||
"AppId": conf.Server.AppID,
|
||||
"Uid": player.M_DwUin,
|
||||
@ -252,12 +252,27 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
}
|
||||
player.PushClientRes(LimitedTimeEventMod.ProgressBackData())
|
||||
case "champshipGroup":
|
||||
G_GameLogicPtr.ChampshipMgrSend(&MsgMod.Msg{
|
||||
Type: MsgMod.HANDLE_TYPE_CHAMPSHIP_GROUP,
|
||||
SendMsgToCenterAsync(&MsgMod.Msg{
|
||||
HandleType: MsgMod.HANDLE_MOD_CHAMPSHIP_GROUP,
|
||||
})
|
||||
case "clearRank":
|
||||
case "inrank":
|
||||
ChampshipMod := player.PlayMod.getChampshipMod()
|
||||
num, _ := strconv.Atoi(arg[1])
|
||||
G_GameLogicPtr.RankMgr.ClearRank(num)
|
||||
Score := float64(num)
|
||||
// 更新排行榜
|
||||
m := &MsgMod.Msg{
|
||||
Type: MsgMod.HANDLE_TYPE_CHAMPSHIP_INRANK,
|
||||
SendT: GoUtil.Now(),
|
||||
Extra: CRank{
|
||||
Uid: int(player.M_DwUin),
|
||||
Score: Score,
|
||||
H: ChampshipMod.GetH(),
|
||||
N: ChampshipMod.GetN(),
|
||||
},
|
||||
End: GoUtil.ZeroTimestamp() + 86400, // 第二天零点删除
|
||||
HandleType: MsgMod.HANDLE_MDO_CHAMPSHIP_INRANK,
|
||||
}
|
||||
SendMsgToCenterAsync(m)
|
||||
case "resetUserInfo":
|
||||
Rank := G_GameLogicPtr.RankMgr.getRank(RANK_TYPE_USER)
|
||||
for _, v := range Rank {
|
||||
@ -281,6 +296,17 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
HandbookMod.SetHandbook(v)
|
||||
HandbookMod.BookList[v] = handbook.STATUS_REWARD
|
||||
}
|
||||
case "setLogin":
|
||||
Id, _ := strconv.Atoi(arg[1])
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
BaseMod.LoginTime = int64(Id)
|
||||
case "setLogout":
|
||||
Id, _ := strconv.Atoi(arg[1])
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
BaseMod.LogoutTime = int64(Id)
|
||||
case "setRegister":
|
||||
Id, _ := strconv.Atoi(arg[1])
|
||||
player.PlayerBaseMod.Data.Rolecreatetime = int32(Id)
|
||||
case "handbookReward":
|
||||
HandbookMod := player.PlayMod.getHandbookMod()
|
||||
for _, v := range mergeDataCfg.GetAllId() {
|
||||
@ -467,25 +493,6 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
EndTime: EndTime,
|
||||
Num: int32(Times),
|
||||
})
|
||||
case "sendMail":
|
||||
MailMod := player.PlayMod.getMailMod()
|
||||
title := `MMM圣诞节奖励`
|
||||
content := `测试`
|
||||
MailMod.Send(title, "副标题", content, title, "副标题", content, []*item.Item{
|
||||
{
|
||||
Id: item.ITEM_DIAMOND_ID,
|
||||
Num: 10,
|
||||
},
|
||||
{
|
||||
Id: item.ITEM_ENERGY_ID,
|
||||
Num: 10,
|
||||
},
|
||||
{
|
||||
Id: item.ITEM_STAR_ID,
|
||||
Num: 10,
|
||||
},
|
||||
}, 2)
|
||||
player.PushClientRes(MailMod.BackData())
|
||||
case "resetNpc":
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
FriendMod.Npc = []int{}
|
||||
@ -587,6 +594,22 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
|
||||
LimitedTimeEventMod.AddEvent(Id, Cd)
|
||||
player.PushClientRes(LimitedTimeEventMod.BackData())
|
||||
case "debugMsg":
|
||||
to, _ := strconv.Atoi(arg[1])
|
||||
num, _ := strconv.Atoi(arg[1])
|
||||
for i := 0; i < num; i++ {
|
||||
uid := 100100000 + i
|
||||
if uid == int(player.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
SendMsgToCenterAsync(&MsgMod.Msg{
|
||||
From: uid,
|
||||
To: to,
|
||||
Type: MsgMod.HANDLE_TYPE_APPLY,
|
||||
SendT: GoUtil.Now(),
|
||||
HandleType: MsgMod.HANDLE_MOD_PLAYER_MSG,
|
||||
})
|
||||
}
|
||||
default:
|
||||
return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg)
|
||||
}
|
||||
|
||||
@ -1,260 +0,0 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"runtime"
|
||||
kafkaMiddleware "server/middleware/kafka"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
Login_log = 1
|
||||
LoginOut_log = 2
|
||||
Event_log = 3
|
||||
)
|
||||
const (
|
||||
PLAYROOM_LOST = "playroom_lost"
|
||||
// 增大缓冲:针对 ~1000 条/s,保留足够秒数的缓冲(可按需调整)
|
||||
LOG_LENGTH = 100000
|
||||
WORKER_COUNT = 500
|
||||
)
|
||||
|
||||
type LogMgr struct {
|
||||
// 将切片改为带缓冲通道
|
||||
L chan *Log
|
||||
Lock sync.Mutex
|
||||
wg sync.WaitGroup
|
||||
stopOnce sync.Once
|
||||
closing bool
|
||||
}
|
||||
|
||||
type Log struct {
|
||||
Uid int64
|
||||
AppId int
|
||||
ServerId int
|
||||
EventName string
|
||||
Param map[string]interface{}
|
||||
TimeStamp int64
|
||||
}
|
||||
|
||||
func (L *LogMgr) InitManager() {
|
||||
// 初始化通道
|
||||
L.L = make(chan *Log, LOG_LENGTH)
|
||||
|
||||
// 动态协程池参数
|
||||
maxWorkers := WORKER_COUNT
|
||||
if cpuWorkers := runtime.NumCPU() * 2; cpuWorkers > maxWorkers {
|
||||
maxWorkers = cpuWorkers
|
||||
}
|
||||
minWorkers := 100
|
||||
idleTimeout := 500 * time.Millisecond
|
||||
|
||||
var activeWorkers int32
|
||||
|
||||
// worker 启动函数
|
||||
spawnWorker := func() {
|
||||
L.wg.Add(1)
|
||||
atomic.AddInt32(&activeWorkers, 1)
|
||||
go func() {
|
||||
defer L.wg.Done()
|
||||
defer atomic.AddInt32(&activeWorkers, -1)
|
||||
|
||||
for {
|
||||
// 首先阻塞等待一个任务(若 channel 关闭则退出)
|
||||
v, ok := <-L.L
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// 处理消息(与原来逻辑一致)
|
||||
value, _ := json.Marshal(v)
|
||||
if kafkaMiddleware.KafkaMod == nil {
|
||||
// 尝试非阻塞重入,否则丢弃最旧再试一次
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
}
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
} else {
|
||||
if err := kafkaMiddleware.SendMsg([]byte(v.EventName), value); err != nil {
|
||||
log.Debug("kafka log send err:%s", err.Error())
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
}
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
|
||||
// 快速循环处理后续可用任务,若超时则退出该 worker(回收)
|
||||
timer := time.NewTimer(idleTimeout)
|
||||
for {
|
||||
select {
|
||||
case v, ok := <-L.L:
|
||||
if !ok {
|
||||
if !timer.Stop() {
|
||||
<-timer.C
|
||||
}
|
||||
return
|
||||
}
|
||||
// 处理消息
|
||||
value, _ := json.Marshal(v)
|
||||
if kafkaMiddleware.KafkaMod == nil {
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
}
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
} else {
|
||||
if err := kafkaMiddleware.SendMsg([]byte(v.EventName), value); err != nil {
|
||||
log.Debug("kafka log send err:%s", err.Error())
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
}
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
// 重置定时器以继续快速处理
|
||||
if !timer.Stop() {
|
||||
<-timer.C
|
||||
}
|
||||
timer.Reset(idleTimeout)
|
||||
case <-timer.C:
|
||||
timer.Stop()
|
||||
// 空闲超时,退出该 worker
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// 启动初始最小 worker 数量
|
||||
for i := 0; i < minWorkers; i++ {
|
||||
spawnWorker()
|
||||
}
|
||||
|
||||
// 监督器:动态根据队列长度扩展 worker,但不超过 maxWorkers
|
||||
go func() {
|
||||
ticker := time.NewTicker(200 * time.Millisecond)
|
||||
defer ticker.Stop()
|
||||
for range ticker.C {
|
||||
L.Lock.Lock()
|
||||
closing := L.closing
|
||||
L.Lock.Unlock()
|
||||
if closing {
|
||||
return
|
||||
}
|
||||
backlog := len(L.L)
|
||||
active := int(atomic.LoadInt32(&activeWorkers))
|
||||
if backlog > active && active < maxWorkers {
|
||||
toSpawn := backlog - active
|
||||
remain := maxWorkers - active
|
||||
if toSpawn > remain {
|
||||
toSpawn = remain
|
||||
}
|
||||
for i := 0; i < toSpawn; i++ {
|
||||
spawnWorker()
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func (L *LogMgr) AddLog(logs *Log) {
|
||||
return
|
||||
// 复制结构体和 Param map,避免并发修改导致 json.Marshal 时 panic
|
||||
copyLog := *logs
|
||||
|
||||
// 安全地复制 map,使用 defer recover 防止并发迭代时的 panic
|
||||
if logs.Param != nil {
|
||||
func() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
// 发生 panic 时使用空 map
|
||||
log.Debug("AddLog: concurrent map read/write detected, using empty map")
|
||||
copyLog.Param = make(map[string]interface{})
|
||||
}
|
||||
}()
|
||||
newParam := make(map[string]interface{}, len(logs.Param))
|
||||
for k, v := range logs.Param {
|
||||
newParam[k] = v
|
||||
}
|
||||
copyLog.Param = newParam
|
||||
}()
|
||||
}
|
||||
|
||||
// 如果已经开始关闭,直接丢弃
|
||||
L.Lock.Lock()
|
||||
if L.closing {
|
||||
L.Lock.Unlock()
|
||||
return
|
||||
}
|
||||
// 非阻塞入队:若通道满则先丢弃最旧一条再入队,避免阻塞调用者
|
||||
select {
|
||||
case L.L <- ©Log:
|
||||
L.Lock.Unlock()
|
||||
return
|
||||
default:
|
||||
// 丢弃最旧一条以腾出空间(若有)
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
// 再尝试入队一次
|
||||
select {
|
||||
case L.L <- ©Log:
|
||||
default:
|
||||
// 放不下就直接丢弃
|
||||
}
|
||||
L.Lock.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
func (L *LogMgr) Close() {
|
||||
L.stopOnce.Do(func() {
|
||||
L.Lock.Lock()
|
||||
// 标记为正在关闭,阻止后续入队
|
||||
L.closing = true
|
||||
// 关闭通道,通知所有 worker 退出(workers 会消费完所有已入队的消息)
|
||||
close(L.L)
|
||||
L.Lock.Unlock()
|
||||
// 等待所有 worker 处理完
|
||||
L.wg.Wait()
|
||||
})
|
||||
}
|
||||
@ -47,8 +47,14 @@ func (p *Player) HandleMsg(m *msg.Msg) {
|
||||
p.Recover(backup) //还原Player的数据
|
||||
return
|
||||
}
|
||||
p.ProcessTrigger()
|
||||
p.SendClientRes()
|
||||
|
||||
// 处理在线消息
|
||||
if m.H == msg.MSG_TYPE_ONLINE {
|
||||
p.ProcessTrigger()
|
||||
p.SendClientRes()
|
||||
} else {
|
||||
p.Msg = make([]PlayerMsg, 0)
|
||||
}
|
||||
}
|
||||
|
||||
// 消息处理
|
||||
@ -56,7 +62,11 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
switch m.Type {
|
||||
case msg.HANDLE_TYPE_APPLY: // 好友申请
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.AddFriendApply(m.From)
|
||||
ok := FriendMod.AddFriendApply(m.From)
|
||||
// 已申请
|
||||
if ok {
|
||||
return nil
|
||||
}
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT)
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
@ -73,10 +83,10 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
Type: friend.FRIEND_NOTIFY_AGREE,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
p.PlayroomBackData()
|
||||
// PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
// BaseMod := p.PlayMod.getBaseMod()
|
||||
// PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
// p.PlayroomBackData()
|
||||
p.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": m.From,
|
||||
"add_type": "接受申请",
|
||||
@ -128,10 +138,6 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
return nil
|
||||
}
|
||||
FriendMod.AddFriend(m.From)
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
p.PlayroomBackData()
|
||||
p.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": m.From,
|
||||
"add_type": "发起申请",
|
||||
@ -333,7 +339,7 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.Interact(m.From, friend.INTERACT_TYPE_VISIT, m.SendT)
|
||||
p.UpdateUserInfo()
|
||||
p.Kafka(PLAYROOM_LOST, map[string]interface{}{"uid": m.From, "item": Items})
|
||||
p.TeLog("playroom_lost", map[string]interface{}{"uid": m.From, "item": Items})
|
||||
p.PushClientRes(PlayroomMod.NotifyLose())
|
||||
case msg.HANDLE_TYPE_PLAYROOM_GAME:
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
@ -374,9 +380,16 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
mt, mc, mt_en, mc_en := mailCfg.GetChargeSendMail(PlayerSimpleData.Name)
|
||||
Items := p.ChargeItem(C.ChargeId)
|
||||
MailId := MailMod.Send(mt, "", mc, mt_en, "", mc_en, Items, mail.MAIL_TYPE_GIFT)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_CHARGE_SEND, fmt.Sprintf("%d", MailId), m.SendT)
|
||||
p.PushClientRes(MailMod.NotifyMail(MailId))
|
||||
mailId := MailMod.SendMail(&mail.MailStruct{
|
||||
Title: mt,
|
||||
Content: mc,
|
||||
TitleEn: mt_en,
|
||||
ContentEn: mc_en,
|
||||
Items: Items,
|
||||
Type: mail.MAIL_TYPE_GIFT,
|
||||
})
|
||||
p.AddLog(m.From, friend.LOG_TYPE_CHARGE_SEND, fmt.Sprintf("%d", mailId), m.SendT)
|
||||
p.PushClientRes(MailMod.NotifyMail(mailId))
|
||||
case msg.HANDLE_TYPE_CHARGE_RECEIVE: // 收到好友的感谢信
|
||||
Content, ok := m.Extra.(string)
|
||||
if !ok {
|
||||
@ -385,9 +398,15 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
mt, mc, mt_en, mc_en := mailCfg.GetChargeReceiveMail(PlayerSimpleData.Name, Content)
|
||||
MailId := MailMod.Send(mt, "", mc, mt_en, "", mc_en, nil, mail.MAIL_TYPE_NORMAL)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_CHARGE_RECEIVE, fmt.Sprintf("%d", MailId), m.SendT)
|
||||
p.PushClientRes(MailMod.NotifyMail(MailId))
|
||||
mailId := MailMod.SendMail(&mail.MailStruct{
|
||||
Title: mt,
|
||||
Content: mc,
|
||||
TitleEn: mt_en,
|
||||
ContentEn: mc_en,
|
||||
Type: mail.MAIL_TYPE_NORMAL,
|
||||
})
|
||||
p.AddLog(m.From, friend.LOG_TYPE_CHARGE_RECEIVE, fmt.Sprintf("%d", mailId), m.SendT)
|
||||
p.PushClientRes(MailMod.NotifyMail(mailId))
|
||||
case msg.HANDLE_TYPE_WISHLIST_SEND: // 发送愿望单请求
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.AddWishApply(int64(m.From))
|
||||
@ -503,6 +522,8 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
}
|
||||
case msg.HANDLE_TYPE_FRIEND_SPONSOER:
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_SPONSOR_GET, "", m.SendT)
|
||||
case msg.SERVER_PLAYER_SYNC_LOGOUT_MSG:
|
||||
p.LoginBackData()
|
||||
default:
|
||||
log.Debug("uid : %d, handle msg type : %d not exist", p.M_DwUin, m.Type)
|
||||
}
|
||||
@ -1091,7 +1112,7 @@ func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.It
|
||||
}
|
||||
|
||||
func ExcludeCardStar(CardList []int) []int {
|
||||
StarList := make([]int, 0)
|
||||
StarList := make([]int, 0, len(CardList))
|
||||
for _, v := range CardList {
|
||||
Star := cardCfg.GetStarById(v)
|
||||
if Star < 2 || Star > 4 {
|
||||
@ -1219,6 +1240,10 @@ func (p *Player) AddHighOrder() {
|
||||
}
|
||||
|
||||
// 高级产物订单
|
||||
/**
|
||||
当玩家生成了两个一样的最高等级产物,自动生成一个订单收掉它们。
|
||||
注意:当现有订单(无论是自动或固定订单)中已有两个或三个最高等级产物订单的时候,不执行此逻辑
|
||||
*/
|
||||
func (p *Player) AddHighOrder2() {
|
||||
OrderMod := p.PlayMod.getOrderMod()
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
@ -1237,18 +1262,18 @@ func (p *Player) AddHighOrder2() {
|
||||
ChessMap[v]++
|
||||
}
|
||||
for ChessId, Num := range ChessMap {
|
||||
if Num < 3 {
|
||||
if Num < 2 {
|
||||
continue
|
||||
}
|
||||
add := true
|
||||
for _, v := range OrderMod.GetOrderList() {
|
||||
if GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId, ChessId}) {
|
||||
if GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId}) || GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId, ChessId}) {
|
||||
add = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if add {
|
||||
OrderMod.AddExtraOrder([]int{ChessId, ChessId, ChessId})
|
||||
OrderMod.AddExtraOrder([]int{ChessId, ChessId})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,6 +132,7 @@ func FixBug() {
|
||||
// 先更新 PlayerList(需要加锁)
|
||||
messageMgrData.mu.Lock()
|
||||
defer messageMgrData.mu.Unlock()
|
||||
now := GoUtil.Now()
|
||||
for k, v := range messageMgrData.MessageList {
|
||||
if k < 100000 {
|
||||
delete(messageMgrData.MessageList, k)
|
||||
@ -139,11 +140,14 @@ func FixBug() {
|
||||
}
|
||||
// 反向遍历以安全删除元素
|
||||
for i := len(v.Messages) - 1; i >= 0; i-- {
|
||||
if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY {
|
||||
if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY || (v.Messages[i].End != 0 && v.Messages[i].End < now) {
|
||||
// 删除消息
|
||||
v.Messages = append(v.Messages[:i], v.Messages[i+1:]...)
|
||||
}
|
||||
}
|
||||
if len(v.Messages) == 0 {
|
||||
delete(messageMgrData.MessageList, k)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -175,6 +179,7 @@ func (m *MessageMgr) CenterRegister() {
|
||||
m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_INFO, MessageHandlerFunc(ChampshipRankInfoHandler))
|
||||
m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_LIST, MessageHandlerFunc(ChampshipRankListHandler))
|
||||
m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_PRE_RANK, MessageHandlerFunc(ChampshipRankPreHandler))
|
||||
m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_GROUP, MessageHandlerFunc(ChampshipGroupHandler))
|
||||
}
|
||||
}
|
||||
|
||||
@ -222,6 +227,11 @@ func NotifyAllPlayerMsg(m *msg.Msg) {
|
||||
}
|
||||
}
|
||||
|
||||
func ChampshipGroupHandler(data *msg.Msg) (interface{}, error) {
|
||||
G_GameLogicPtr.ChampshipMgr.group()
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func ChampshipInRankHandler(data *msg.Msg) (interface{}, error) {
|
||||
G_GameLogicPtr.ChampshipMgr.inRank(data)
|
||||
return nil, nil
|
||||
@ -289,16 +299,32 @@ func PlayerLoginHandler(data *msg.Msg) (interface{}, error) {
|
||||
messages := getMessge(int64(data.From))
|
||||
messages.mu.Lock()
|
||||
// 复制消息列表,避免在锁内发送消息
|
||||
// 过滤过期消息
|
||||
now := GoUtil.Now()
|
||||
validMessages := make([]*msg.Msg, 0, len(messages.Messages))
|
||||
for _, message := range messages.Messages {
|
||||
if message.End == 0 || message.End >= now {
|
||||
validMessages = append(validMessages, message)
|
||||
}
|
||||
}
|
||||
messages.Messages = validMessages
|
||||
messagesToSend := make([]*msg.Msg, len(messages.Messages))
|
||||
copy(messagesToSend, messages.Messages)
|
||||
messages.mu.Unlock()
|
||||
|
||||
ReplyPlayerMsgASync(data, nil)
|
||||
// 在锁外发送离线消息
|
||||
for _, message := range messagesToSend {
|
||||
message.H = msg.MSG_TYPE_OFFLINE // 标记为离线消息
|
||||
SendMsgToNodeAsync(message, node)
|
||||
}
|
||||
SendMsgToNodeAsync(&msg.Msg{
|
||||
From: data.From,
|
||||
To: data.From,
|
||||
Type: msg.SERVER_PLAYER_SYNC_LOGOUT_MSG,
|
||||
HandleType: msg.HANDLE_MOD_PLAYER_MSG,
|
||||
Extra: len(messagesToSend),
|
||||
}, node) // 发送离线消息处理完成通知
|
||||
log.Debug("[Middleware] Player sync logout message player id: %v, len: %d", data.From, len(messagesToSend))
|
||||
ReplyPlayerMsgASync(data, nil)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@ -372,7 +398,7 @@ func PlayerMsgHandler(data *msg.Msg) (interface{}, error) {
|
||||
if p == nil || p.stop {
|
||||
return nil, nil
|
||||
}
|
||||
p.Send(data.Clone())
|
||||
go p.Send(data.Clone())
|
||||
// 处理完后发送消费消息
|
||||
if data.HandleType == msg.HANDLE_MOD_PLAYER_MSG {
|
||||
data.HandleType = msg.HANDLE_MOD_COMSUME_MSG
|
||||
@ -810,6 +836,9 @@ func SendPlayerMsgSync(m *msg.Msg) (interface{}, error) {
|
||||
}
|
||||
|
||||
func FriendMgrSend(m1 *msg.Msg) error {
|
||||
if m1.SendT == 0 {
|
||||
m1.SendT = GoUtil.Now()
|
||||
}
|
||||
SendPlayerMsgAsync(m1)
|
||||
return nil
|
||||
}
|
||||
@ -862,7 +891,24 @@ func saveMessage(m *msg.Msg) error {
|
||||
messages := getMessgeUnsafe(int64(m.To))
|
||||
messages.mu.Lock()
|
||||
defer messages.mu.Unlock()
|
||||
for _, msgItem := range messages.Messages {
|
||||
if msgItem == nil {
|
||||
continue
|
||||
}
|
||||
if msgItem.UniKey == m.UniKey {
|
||||
// 已存在相同消息,直接返回
|
||||
return nil
|
||||
}
|
||||
}
|
||||
// 添加消息
|
||||
messages.Messages = append(messages.Messages, m)
|
||||
// 添加消息
|
||||
messages.Messages = append(messages.Messages, m)
|
||||
// 设置上限为2000条,超过则丢弃最早的消息
|
||||
if len(messages.Messages) > 2000 {
|
||||
excess := len(messages.Messages) - 2000
|
||||
messages.Messages = messages.Messages[excess:]
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -920,5 +966,12 @@ func deleteMessage(m *msg.Msg) error {
|
||||
messages.Messages[len(messages.Messages)-1] = nil // 清除最后一个元素的引用
|
||||
messages.Messages = messages.Messages[:len(messages.Messages)-1]
|
||||
}
|
||||
if len(messages.Messages) == 0 {
|
||||
// 如果消息列表为空,则删除该玩家的消息列表
|
||||
messageMgrData := getMessageData()
|
||||
messageMgrData.mu.Lock()
|
||||
defer messageMgrData.mu.Unlock()
|
||||
delete(messageMgrData.MessageList, int64(m.To))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -66,30 +66,26 @@ func (a *Activity) getGIftVar(key int) *Gift {
|
||||
if Var == nil {
|
||||
Var = &Gift{}
|
||||
a.SetVar(key, Var)
|
||||
return Var.(*Gift)
|
||||
}
|
||||
return Var.(*Gift)
|
||||
}
|
||||
|
||||
func (a *Activity) setGiftVar(key int, Var *Gift) {
|
||||
a.SetVar(key, Var)
|
||||
gift, ok := Var.(*Gift)
|
||||
if !ok {
|
||||
// 类型不匹配,重置为新的 Gift 对象
|
||||
gift = &Gift{}
|
||||
a.SetVar(key, gift)
|
||||
}
|
||||
return gift
|
||||
}
|
||||
|
||||
func (a *Activity) GetActivityStatus(data *gamedata.ActivityData) int {
|
||||
switch data.AType {
|
||||
case ACT_ATYPE_NORMAL:
|
||||
if data.AType == ACT_ATYPE_NORMAL {
|
||||
return ACT_STATUS_START
|
||||
case ACT_ATYPE_LIMIT_GIFT:
|
||||
}
|
||||
|
||||
if data.AType == ACT_ATYPE_LIMIT_GIFT {
|
||||
Var := a.getGIftVar(data.Id)
|
||||
switch data.Type {
|
||||
case ACT_TYPE_ADD_GIFT:
|
||||
Var := a.getGIftVar(data.Id)
|
||||
if Var.Reward {
|
||||
return ACT_STATUS_NOT_START
|
||||
}
|
||||
if Var.Buy {
|
||||
return ACT_STATUS_END
|
||||
}
|
||||
case ACT_TYPE_SUPER_GIFT:
|
||||
Var := a.getGIftVar(data.Id)
|
||||
case ACT_TYPE_ADD_GIFT, ACT_TYPE_SUPER_GIFT:
|
||||
if Var.Reward {
|
||||
return ACT_STATUS_NOT_START
|
||||
}
|
||||
@ -97,13 +93,12 @@ func (a *Activity) GetActivityStatus(data *gamedata.ActivityData) int {
|
||||
return ACT_STATUS_END
|
||||
}
|
||||
default:
|
||||
Var := a.getGIftVar(data.Id)
|
||||
if Var.Buy {
|
||||
return ACT_STATUS_NOT_START
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return ACT_STATUS_START
|
||||
}
|
||||
|
||||
@ -117,5 +112,5 @@ func (a *Activity) GetReward(ActId int) ([]*item.Item, error) {
|
||||
}
|
||||
Var.Reward = true
|
||||
Var.RewardTime = GoUtil.Now()
|
||||
return activityCfg.GetAcitivityRewardItems(ActId), nil
|
||||
return activityCfg.GetActivityRewardItems(ActId), nil
|
||||
}
|
||||
|
||||
@ -15,5 +15,5 @@ func (a *Activity) Fire(Id int) ([]*item.Item, error) {
|
||||
}
|
||||
Var.Buy = true
|
||||
Var.Time = GoUtil.Now()
|
||||
return activityCfg.GetAcitivityGiftItems(Id), nil
|
||||
return activityCfg.GetActivityGiftItems(Id), nil
|
||||
}
|
||||
|
||||
@ -32,6 +32,7 @@ func (a *AvatarMod) InitData() {
|
||||
a.Init = true
|
||||
a.List = make(map[int]*Avatar)
|
||||
InitId := avatarCfg.GetInitList()
|
||||
a.List = make(map[int]*Avatar, len(InitId))
|
||||
for _, v := range InitId {
|
||||
a.List[v] = &Avatar{
|
||||
AddTime: now,
|
||||
@ -61,16 +62,21 @@ func (a *AvatarMod) Unlock(Id, Time int) error {
|
||||
v.Ts += int64(Time)
|
||||
return nil
|
||||
}
|
||||
|
||||
now := GoUtil.Now()
|
||||
ts := int64(0)
|
||||
if Time > 0 {
|
||||
ts = now + int64(Time)
|
||||
}
|
||||
a.List[Id] = &Avatar{
|
||||
Ts: now + int64(Time),
|
||||
Ts: ts,
|
||||
AddTime: now,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *AvatarMod) BackData() []*msg.AvatarInfo {
|
||||
l := make([]*msg.AvatarInfo, 0)
|
||||
l := make([]*msg.AvatarInfo, 0, len(a.List))
|
||||
for k, v := range a.List {
|
||||
l = append(l, &msg.AvatarInfo{
|
||||
Id: int32(k),
|
||||
|
||||
@ -61,7 +61,6 @@ func (b *Base) InitData(Uid int, Ip string) {
|
||||
if b.NickName == "" {
|
||||
b.NickName = fmt.Sprintf("Player_%d", Uid)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (b *Base) Login() int64 {
|
||||
@ -69,9 +68,9 @@ func (b *Base) Login() int64 {
|
||||
if !GoUtil.IsSameDay(b.LoginTime, Now) {
|
||||
b.LoginDay += 1
|
||||
}
|
||||
logoutDuration := Now - b.LogoutTime
|
||||
if b.LogoutTime == 0 {
|
||||
logoutDuration = 0
|
||||
logoutDuration := int64(0)
|
||||
if b.LogoutTime != 0 {
|
||||
logoutDuration = Now - b.LogoutTime
|
||||
}
|
||||
b.LoginTime = Now
|
||||
b.LogoutTime = 0
|
||||
@ -195,7 +194,6 @@ func (b *Base) SetExp(Exp int) {
|
||||
|
||||
func (b *Base) SetEnergy(Energy int) {
|
||||
b.Energy = Energy
|
||||
|
||||
}
|
||||
|
||||
func (b *Base) SetStar(Star int) {
|
||||
@ -227,10 +225,6 @@ func (b *Base) SetLang(lang msg.LANG_TYPE) {
|
||||
}
|
||||
|
||||
func (b *Base) BuyEnergy(Energy int) ([]*item.Item, int, int) {
|
||||
// if !b.IsFirstBuy {
|
||||
// b.IsFirstBuy = true
|
||||
// return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: 100}}, 100, 0
|
||||
// }
|
||||
b.EnergyBuy += 1
|
||||
Mul := baseCfg.GetEnergyByMul(b.EnergyBuy)
|
||||
Diamond := int(float64(Energy) / Mul)
|
||||
@ -269,11 +263,15 @@ func (b *Base) GetEnergyByAD() ([]*item.Item, error) {
|
||||
return nil, fmt.Errorf("energy ad is max")
|
||||
}
|
||||
b.EnergyAD += 1
|
||||
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: 25}}, nil
|
||||
return baseCfg.GetEnergyByADNum(), nil
|
||||
}
|
||||
|
||||
func (b *Base) FormatEnergyMul(Energy int) {
|
||||
for {
|
||||
if b.EnergyMul <= 0 {
|
||||
b.EnergyMul = 0
|
||||
return
|
||||
}
|
||||
EnergyLimit := baseCfg.GetLimitEnergyMul(b.Level)
|
||||
if EnergyLimit == 0 {
|
||||
return
|
||||
@ -282,10 +280,6 @@ func (b *Base) FormatEnergyMul(Energy int) {
|
||||
return
|
||||
}
|
||||
b.EnergyMul--
|
||||
if b.EnergyMul < 0 {
|
||||
b.EnergyMul = 0
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -224,7 +224,7 @@ func (c *CardMod) BackData() *msg.ResCardInfo {
|
||||
}
|
||||
cardList = append(cardList, &msg.Card{Id: int32(k), Count: int32(v)})
|
||||
}
|
||||
ReqUid := make([]int64, 0)
|
||||
ReqUid := make([]int64, 0, len(c.ReqFriend))
|
||||
for _, v := range c.ReqFriend {
|
||||
if v.EndTime < GoUtil.Now() {
|
||||
delete(c.ReqFriend, v.BUid)
|
||||
@ -232,7 +232,7 @@ func (c *CardMod) BackData() *msg.ResCardInfo {
|
||||
}
|
||||
ReqUid = append(ReqUid, int64(v.BUid))
|
||||
}
|
||||
ExUid := make([]int64, 0)
|
||||
ExUid := make([]int64, 0, len(c.ExCard))
|
||||
for k, v := range c.ExCard {
|
||||
if v.EndTime < GoUtil.Now() {
|
||||
delete(c.ExCard, k)
|
||||
@ -514,7 +514,7 @@ func (c *CardMod) NotifyCard() *msg.ResNotifyCard {
|
||||
}
|
||||
|
||||
func (c *CardMod) NotifyTimes() *msg.ResNotifyCardTimes {
|
||||
ReqUid := make([]int64, 0)
|
||||
ReqUid := make([]int64, 0, len(c.ReqFriend))
|
||||
for k, v := range c.ReqFriend {
|
||||
if v.EndTime < GoUtil.Now() {
|
||||
delete(c.ReqFriend, k)
|
||||
@ -522,7 +522,7 @@ func (c *CardMod) NotifyTimes() *msg.ResNotifyCardTimes {
|
||||
}
|
||||
ReqUid = append(ReqUid, int64(k))
|
||||
}
|
||||
ExUid := make([]int64, 0)
|
||||
ExUid := make([]int64, 0, len(c.ExCard))
|
||||
for k, v := range c.ExCard {
|
||||
if v.EndTime < GoUtil.Now() {
|
||||
delete(c.ExCard, k)
|
||||
@ -590,7 +590,7 @@ func (c *CardMod) SeasonFirstReward() ([]*item.Item, error) {
|
||||
}
|
||||
|
||||
func (c *CardMod) GetCardList() []int {
|
||||
cardList := make([]int, 0)
|
||||
cardList := make([]int, 0, len(c.CardList))
|
||||
for k, v := range c.CardList {
|
||||
if v > 0 {
|
||||
cardList = append(cardList, k)
|
||||
|
||||
@ -20,42 +20,3 @@ func GetChessDiamond(Lv, Type int) int {
|
||||
}
|
||||
return max(1, d)
|
||||
}
|
||||
|
||||
// func getChessMainRand(Color string) []*Rand {
|
||||
// r := make([]*Rand, 0)
|
||||
// for i := 6; i <= 10; i++ {
|
||||
// Diamond := int(math.Pow(2, float64(i-1)) / 2.5)
|
||||
// ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color)
|
||||
// if ChessId == 0 {
|
||||
// continue
|
||||
// }
|
||||
// r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond})
|
||||
// }
|
||||
// return r
|
||||
// }
|
||||
|
||||
// func getChessSecondaryRand(Color string) []*Rand {
|
||||
// r := make([]*Rand, 0)
|
||||
// for i := 5; i <= 9; i++ {
|
||||
// Diamond := int((math.Pow(2, float64(i-1)) / 2.5) * 2)
|
||||
// ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color)
|
||||
// if ChessId == 0 {
|
||||
// continue
|
||||
// }
|
||||
// r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond})
|
||||
// }
|
||||
// return r
|
||||
// }
|
||||
|
||||
// func getChessSubRand(Color string) []*Rand {
|
||||
// r := make([]*Rand, 0)
|
||||
// for i := 5; i <= 9; i++ {
|
||||
// Diamond := int(math.Pow(2, float64(i-1))/2.5 + 6.4)
|
||||
// ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color)
|
||||
// if ChessId == 0 {
|
||||
// continue
|
||||
// }
|
||||
// r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond})
|
||||
// }
|
||||
// return r
|
||||
// }
|
||||
|
||||
@ -149,7 +149,7 @@ func (cb *ChessBorad) ComposeChess(id int) (int, error) {
|
||||
return 0, errors.New("已达最大等级")
|
||||
}
|
||||
count := 0
|
||||
newList := make([]int, 0)
|
||||
newList := make([]int, 0, len(cb.ChessList))
|
||||
for _, chess := range cb.ChessList {
|
||||
if chess == id && count < 2 {
|
||||
count++
|
||||
@ -457,17 +457,17 @@ func (cb *ChessBorad) BackData() *msg.ResPlayerChessInfo {
|
||||
Count: int32(v.Num),
|
||||
})
|
||||
}
|
||||
Re := make([]string, 0)
|
||||
Re := make([]string, 0, len(cb.Retire))
|
||||
for k, v := range cb.Retire {
|
||||
if v == EMIT_RETIRE_END {
|
||||
Re = append(Re, k)
|
||||
}
|
||||
}
|
||||
Ho := make([]int32, 0)
|
||||
Ho := make([]int32, 0, len(cb.Honor))
|
||||
for k := range cb.Honor {
|
||||
Ho = append(Ho, int32(k))
|
||||
}
|
||||
Rw := make([]string, 0)
|
||||
Rw := make([]string, 0, len(cb.RetireReward))
|
||||
for k, v := range cb.RetireReward {
|
||||
if v == true {
|
||||
Rw = append(Rw, k)
|
||||
@ -633,7 +633,7 @@ func (cb *ChessBorad) RetireOrder(EmitType string) error {
|
||||
if cb.Retire[EmitType] != 1 {
|
||||
return errors.New("chess has not been retired")
|
||||
}
|
||||
chess := make([]int, 0)
|
||||
chess := make([]int, 0, len(cb.ChessMap))
|
||||
EmitProduct := mergeDataCfg.GetEmitOrderProduce(EmitType)
|
||||
for k, v := range cb.ChessMap {
|
||||
arr := strings.Split(k, "@")
|
||||
|
||||
@ -39,12 +39,12 @@ func (c *Collect) GetReward(Id, Num int) ([]*item.Item, error) {
|
||||
// 判断是否已领取
|
||||
for _, v := range c.Reward {
|
||||
if v == Id {
|
||||
return nil, fmt.Errorf("已领取")
|
||||
return nil, fmt.Errorf("id : %d;已领取", Id)
|
||||
}
|
||||
}
|
||||
Need := collectCfg.GetRewardNeed(Id)
|
||||
if Num < Need {
|
||||
return nil, fmt.Errorf("收集数量不足")
|
||||
return nil, fmt.Errorf("id : %d;收集数量不足 %d", Id, Need)
|
||||
}
|
||||
// 领取奖励
|
||||
c.Reward = append(c.Reward, Id)
|
||||
|
||||
@ -79,7 +79,7 @@ func (e *EmojiMod) GetEmojiSet() map[int32]int32 {
|
||||
}
|
||||
|
||||
func (e *EmojiMod) BackData() []*msg.EmojiInfo {
|
||||
l := make([]*msg.EmojiInfo, 0)
|
||||
l := make([]*msg.EmojiInfo, 0, len(e.List))
|
||||
for k, v := range e.List {
|
||||
l = append(l, &msg.EmojiInfo{
|
||||
Id: int32(k),
|
||||
|
||||
@ -2,9 +2,11 @@ package endless
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
endlessCfg "server/conf/endless"
|
||||
"server/game/mod/item"
|
||||
"server/msg"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type EndlessMod struct {
|
||||
@ -39,14 +41,23 @@ func (e *EndlessMod) ZeroUpdate(MaxMoney float64, Lv int) {
|
||||
FirstMoney := 0.0
|
||||
if MaxMoney > 0 {
|
||||
m := MaxMoney / 10
|
||||
GradeList := []float64{1.99, 3.99, 5.99, 9.99}
|
||||
for i := 0; i < len(GradeList); i++ {
|
||||
if m < GradeList[i] {
|
||||
FirstMoney = GradeList[i]
|
||||
break
|
||||
}
|
||||
GradeList := []float64{1.99, 3.99, 5.99, 7.99, 9.99}
|
||||
type duch struct {
|
||||
Grade float64
|
||||
Num float64
|
||||
}
|
||||
|
||||
duchList := make([]duch, 0, len(GradeList))
|
||||
for _, v := range GradeList {
|
||||
duchList = append(duchList, duch{
|
||||
Grade: v,
|
||||
Num: math.Abs(v - m),
|
||||
})
|
||||
}
|
||||
// 按照Num升序排序
|
||||
sort.Slice(duchList, func(i, j int) bool {
|
||||
return duchList[i].Num < duchList[j].Num
|
||||
})
|
||||
FirstMoney = duchList[0].Grade
|
||||
if FirstMoney == 0 {
|
||||
FirstMoney = 9.99
|
||||
}
|
||||
|
||||
@ -1,50 +1,56 @@
|
||||
package endless
|
||||
|
||||
import (
|
||||
"math"
|
||||
endlessCfg "server/conf/endless"
|
||||
"server/game/mod/item"
|
||||
Util "server/game_util"
|
||||
)
|
||||
|
||||
// 初始化奖励
|
||||
func InitReward(Diamond float64, Order, Lv int) []*item.Item {
|
||||
func InitReward(Energy float64, Order, Lv int) []*item.Item {
|
||||
numRand := map[int]int{1: 30, 2: 60, 3: 10}
|
||||
Num := Util.RandMap(numRand)
|
||||
PerDiamond := endlessCfg.GetPerDiamond(item.ITEM_ENERGY_ID)
|
||||
|
||||
PerEnergy := endlessCfg.GetPerEnergy(item.ITEM_ENERGY_ID)
|
||||
getNum := func(energy, preEnergy float64) int {
|
||||
num := int(energy / preEnergy)
|
||||
num = int(math.Round(float64(num)/5.0) * 5)
|
||||
return max(num, 5) // 最少5个能量
|
||||
}
|
||||
if Num == 1 {
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(float64(Diamond)/PerDiamond))}
|
||||
ItemNum := getNum(Energy, PerEnergy)
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, ItemNum)}
|
||||
}
|
||||
|
||||
if Num == 2 {
|
||||
ItemId := endlessCfg.GetItemId(Diamond, 0, Lv)
|
||||
ItemId := endlessCfg.GetItemId(Energy, 0, Lv)
|
||||
if len(ItemId) == 0 {
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(Diamond/PerDiamond))}
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, getNum(Energy, PerEnergy))}
|
||||
}
|
||||
RandItem := Util.RandSlice(ItemId)
|
||||
ItemDiamond := endlessCfg.GeDiamondByItemId(RandItem)
|
||||
LastDiamond := Diamond - ItemDiamond
|
||||
ItemNum := int(LastDiamond / PerDiamond)
|
||||
ItemEnergy := endlessCfg.GetEnergyByItemId(RandItem)
|
||||
LastEnergy := Energy - ItemEnergy
|
||||
ItemNum := getNum(LastEnergy, PerEnergy)
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, ItemNum), item.NewItem(RandItem, 1)}
|
||||
}
|
||||
if Num == 3 {
|
||||
ItemId := endlessCfg.GetItemId(Diamond, 0, Lv)
|
||||
ItemId := endlessCfg.GetItemId(Energy, 0, Lv)
|
||||
if len(ItemId) == 0 {
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(Diamond/PerDiamond))}
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, getNum(Energy, PerEnergy))}
|
||||
}
|
||||
RandItem1 := Util.RandSlice(ItemId)
|
||||
Type := endlessCfg.GetType(RandItem1)
|
||||
ItemDiamond := endlessCfg.GeDiamondByItemId(RandItem1)
|
||||
LastDiamond := Diamond - ItemDiamond
|
||||
ItemId = endlessCfg.GetItemId(LastDiamond, Type, Lv)
|
||||
ItemEnergy := endlessCfg.GetEnergyByItemId(RandItem1)
|
||||
LastEnergy := Energy - ItemEnergy
|
||||
ItemId = endlessCfg.GetItemId(LastEnergy, Type, Lv)
|
||||
if len(ItemId) == 0 {
|
||||
ItemNum := int(LastDiamond / PerDiamond)
|
||||
ItemNum := getNum(LastEnergy, PerEnergy)
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, ItemNum), item.NewItem(RandItem1, 1)}
|
||||
}
|
||||
RandItem2 := Util.RandSlice(ItemId)
|
||||
ItemDiamond = endlessCfg.GeDiamondByItemId(RandItem2)
|
||||
LastDiamond = LastDiamond - ItemDiamond
|
||||
ItemNum := int(LastDiamond / PerDiamond)
|
||||
ItemEnergy = endlessCfg.GetEnergyByItemId(RandItem2)
|
||||
LastEnergy = LastEnergy - ItemEnergy
|
||||
ItemNum := getNum(LastEnergy, PerEnergy)
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, ItemNum), item.NewItem(RandItem1, 1), item.NewItem(RandItem2, 1)}
|
||||
}
|
||||
|
||||
@ -53,7 +59,7 @@ func InitReward(Diamond float64, Order, Lv int) []*item.Item {
|
||||
|
||||
// 初始化档次奖励
|
||||
func initGrade(Money float64, Auto, Lv int) (map[int]*Endless, int) {
|
||||
Diamond := endlessCfg.GetDiamond(Money)
|
||||
Energy := endlessCfg.GetEnergy(Money)
|
||||
Per := []float64{0.5, 0.3, 0.2, 0.1}
|
||||
result := make(map[int]*Endless)
|
||||
for i := 1; i < 5; i++ {
|
||||
@ -71,7 +77,7 @@ func initGrade(Money float64, Auto, Lv int) (map[int]*Endless, int) {
|
||||
result[Auto] = &Endless{
|
||||
ChargeId: Charge,
|
||||
Type: Type,
|
||||
Items: InitReward(Diamond*Per[i-1], i, Lv),
|
||||
Items: InitReward(Energy*Per[i-1], i, Lv),
|
||||
}
|
||||
Auto++
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ func (a *FaceMod) Unlock(Id, Time int) error {
|
||||
}
|
||||
|
||||
func (f *FaceMod) BackData() []*msg.FaceInfo {
|
||||
l := make([]*msg.FaceInfo, 0)
|
||||
l := make([]*msg.FaceInfo, 0, len(f.List))
|
||||
for k, v := range f.List {
|
||||
l = append(l, &msg.FaceInfo{
|
||||
Id: int32(k),
|
||||
|
||||
@ -25,6 +25,13 @@ type FriendMod struct {
|
||||
ActivityLog []*ActLogInfo // 活动日志
|
||||
ReplyList []*ReplyInfo // 好友回复列表
|
||||
DailySponsor int // 好友赞助次数
|
||||
RecommendList map[int]*Recommend
|
||||
DailyGetApply int // 每日获得申请次数
|
||||
}
|
||||
|
||||
type Recommend struct {
|
||||
Uid int
|
||||
Time int64
|
||||
}
|
||||
|
||||
type ReplyInfo struct {
|
||||
@ -54,6 +61,7 @@ type BubbleInfo struct {
|
||||
|
||||
type FriendInfo struct {
|
||||
AddTime int64
|
||||
DelTime int64
|
||||
Interact []*Interact // 拜访记录
|
||||
}
|
||||
|
||||
@ -205,10 +213,14 @@ func (f *FriendMod) InitData() {
|
||||
}
|
||||
}
|
||||
}
|
||||
if f.RecommendList == nil {
|
||||
f.RecommendList = make(map[int]*Recommend)
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FriendMod) ZeroUpdate() {
|
||||
f.DailySponsor = f.GetDailySponsorLimit()
|
||||
f.DailyGetApply = 0
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetNpc() []int {
|
||||
@ -276,6 +288,7 @@ func (f *FriendMod) GetAddTime(id int) int64 {
|
||||
func (f *FriendMod) AddFriend(id int) {
|
||||
f.NewFriendList[id] = &FriendInfo{
|
||||
AddTime: GoUtil.Now(),
|
||||
DelTime: 0,
|
||||
}
|
||||
delete(f.ApplyList, id)
|
||||
}
|
||||
@ -297,12 +310,19 @@ func (f *FriendMod) DelCardInfo(Id string) {
|
||||
}
|
||||
|
||||
func (f *FriendMod) DelFriend(id int) {
|
||||
delete(f.NewFriendList, id)
|
||||
f.NewFriendList[id].DelTime = GoUtil.Now()
|
||||
}
|
||||
|
||||
func (f *FriendMod) CheckFriend(Uid int) bool {
|
||||
_, ok := f.NewFriendList[Uid]
|
||||
return ok
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
return f.NewFriendList[Uid].DelTime == 0
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetFriendLen() int {
|
||||
return len(f.GetFriendList())
|
||||
}
|
||||
|
||||
func (f *FriendMod) RefuseApply(id int) {
|
||||
@ -315,30 +335,51 @@ func (f *FriendMod) CheckApply(id int) bool {
|
||||
return ok
|
||||
}
|
||||
func (f *FriendMod) GetFriendNum() int {
|
||||
return len(f.NewFriendList)
|
||||
i := 0
|
||||
for _, v := range f.NewFriendList {
|
||||
if v.DelTime == 0 {
|
||||
i++
|
||||
}
|
||||
}
|
||||
return i
|
||||
}
|
||||
func (f *FriendMod) GetFriendList() map[int]*FriendInfo {
|
||||
return f.NewFriendList
|
||||
res := make(map[int]*FriendInfo)
|
||||
for k, v := range f.NewFriendList {
|
||||
if v.DelTime == 0 {
|
||||
res[k] = v
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetSimpleFriendList() []int {
|
||||
rs := make([]int, 0, len(f.NewFriendList))
|
||||
for k := range f.NewFriendList {
|
||||
for k, v := range f.NewFriendList {
|
||||
if v.DelTime != 0 {
|
||||
continue
|
||||
}
|
||||
rs = append(rs, k)
|
||||
}
|
||||
return rs
|
||||
}
|
||||
func (f *FriendMod) CheckAddBefore(uid int) bool {
|
||||
_, ok := f.NewFriendList[uid]
|
||||
return ok
|
||||
}
|
||||
|
||||
// 收到申请
|
||||
func (f *FriendMod) AddFriendApply(Uid int) {
|
||||
func (f *FriendMod) AddFriendApply(Uid int) bool {
|
||||
if f.DailyGetApply >= 30 {
|
||||
return true
|
||||
}
|
||||
f.ApplyList[Uid] = GoUtil.Now()
|
||||
f.DailyGetApply++
|
||||
return false
|
||||
}
|
||||
|
||||
// 发送申请
|
||||
func (f *FriendMod) AddSendApply(Uid int) bool {
|
||||
if _, ok := f.SendApply[Uid]; ok {
|
||||
return true
|
||||
}
|
||||
f.SendApply[Uid] = GoUtil.Now()
|
||||
return false
|
||||
}
|
||||
@ -348,6 +389,13 @@ func (f *FriendMod) CheckSendApply(Id int) bool {
|
||||
return ok
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetSendApplyTime(Id int) int64 {
|
||||
if t, ok := f.SendApply[Id]; ok {
|
||||
return t
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (f *FriendMod) AgreeApply(UId int) {
|
||||
f.AddFriend(UId)
|
||||
delete(f.SendApply, UId)
|
||||
@ -559,5 +607,26 @@ func (f *FriendMod) GetSponsorReward() ([]*item.Item, error) {
|
||||
return nil, fmt.Errorf("no sponsor left")
|
||||
}
|
||||
f.DailySponsor--
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, 25)}, nil
|
||||
itemNum := friendCfg.GetFriendSponsorNum()
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, itemNum)}, nil
|
||||
}
|
||||
|
||||
func (f *FriendMod) AddRecommend(Uid int) {
|
||||
for _, v := range f.RecommendList {
|
||||
if v.Uid == Uid {
|
||||
v.Time = GoUtil.Now()
|
||||
return
|
||||
}
|
||||
}
|
||||
f.RecommendList[Uid] = &Recommend{
|
||||
Uid: Uid,
|
||||
Time: GoUtil.Now(),
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetRecommendTime(uid int) int64 {
|
||||
if recommend, ok := f.RecommendList[uid]; ok {
|
||||
return recommend.Time
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
@ -175,7 +175,7 @@ func Merge(Item1, Item2 []*Item) []*Item {
|
||||
for _, v := range Item2 {
|
||||
l[v.Id] += v.Num
|
||||
}
|
||||
res := make([]*Item, 0)
|
||||
res := make([]*Item, 0, len(l))
|
||||
for k, v := range l {
|
||||
res = append(res, &Item{
|
||||
Id: k,
|
||||
@ -188,7 +188,7 @@ func MutilItem(i []*Item, num int) []*Item {
|
||||
if i == nil {
|
||||
return nil
|
||||
}
|
||||
res := make([]*Item, 0)
|
||||
res := make([]*Item, 0, len(i))
|
||||
for _, v := range i {
|
||||
res = append(res, &Item{
|
||||
Id: v.Id,
|
||||
@ -202,7 +202,7 @@ func MutilItemFloat(i []*Item, num float64) []*Item {
|
||||
if i == nil {
|
||||
return nil
|
||||
}
|
||||
res := make([]*Item, 0)
|
||||
res := make([]*Item, 0, len(i))
|
||||
for _, v := range i {
|
||||
res = append(res, &Item{
|
||||
Id: v.Id,
|
||||
|
||||
@ -49,7 +49,8 @@ type LimitedTimeEventMod struct {
|
||||
BonusNum int
|
||||
First bool
|
||||
FirstReward bool
|
||||
CatDaySale bool // 是否参与猫咪大甩卖活动
|
||||
CatDaySale bool // 是否参与猫咪大甩卖活动
|
||||
LastCatDaySale int64 // 上次开启猫咪大甩卖时间
|
||||
}
|
||||
|
||||
type LTEInfo struct {
|
||||
@ -205,6 +206,9 @@ func (l *LimitedTimeEventMod) Trigger(Lv int) (int, []int, []int) {
|
||||
// 增加限时事件
|
||||
func (l *LimitedTimeEventMod) AddEvent(EventId, Duration int) int64 {
|
||||
v, ok := l.EventList[EventId]
|
||||
if EventId == EVENT_TYPE_CAT_DAY_SALE {
|
||||
l.LastCatDaySale = GoUtil.Now()
|
||||
}
|
||||
if ok && v.StartT+v.Remian > GoUtil.Now() {
|
||||
// 事件未过期
|
||||
v.Remian += int64(Duration)
|
||||
@ -270,36 +274,15 @@ func (l *LimitedTimeEventMod) ProgressBackData() *msg.ResLimitEventProgress {
|
||||
|
||||
// 获取流星雨奖励
|
||||
func (l *LimitedTimeEventMod) GetMeteorReward(MergeList, EmitList []int) []*item.Item {
|
||||
eneryg := 0
|
||||
for _, v := range MergeList {
|
||||
ChessLv := mergeDataCfg.GetLvById(v)
|
||||
Color := mergeDataCfg.GetColorById(v)
|
||||
EmitId := order.GetEmitByColor(EmitList, Color)
|
||||
if EmitId == 0 {
|
||||
continue
|
||||
}
|
||||
NewChessLv := mergeDataCfg.DynamicLevRev(ChessLv, EmitId, Color)
|
||||
eneryg += int(math.Pow(2, float64(NewChessLv)))
|
||||
}
|
||||
|
||||
NewStar := int(max(math.Ceil(float64(eneryg)/0.36*0.1), 1))
|
||||
energy := order.GetVirtualEnergy(MergeList, EmitList)
|
||||
NewStar := int(max(math.Ceil(float64(energy)/0.36*0.1), 1))
|
||||
return []*item.Item{{Id: item.ITEM_STAR_ID, Num: NewStar}}
|
||||
}
|
||||
|
||||
// 获取宝箱雨奖励
|
||||
func (l *LimitedTimeEventMod) GetChestReward(MergeList, EmitList []int) []*item.Item {
|
||||
eneryg := 0
|
||||
for _, v := range MergeList {
|
||||
ChessLv := mergeDataCfg.GetLvById(v)
|
||||
Color := mergeDataCfg.GetColorById(v)
|
||||
EmitId := order.GetEmitByColor(EmitList, Color)
|
||||
if EmitId == 0 {
|
||||
continue
|
||||
}
|
||||
NewChessLv := mergeDataCfg.DynamicLevRev(ChessLv, EmitId, Color)
|
||||
eneryg += int(math.Pow(2, float64(NewChessLv-1)))
|
||||
}
|
||||
star := math.Ceil(float64(eneryg) / 10 / 2.5)
|
||||
energy := order.GetVirtualEnergy(MergeList, EmitList)
|
||||
star := math.Ceil(float64(energy) / 10 / 2.5)
|
||||
return []*item.Item{item.NewItem(item.ITEM_DIAMOND_ID, int(star))}
|
||||
}
|
||||
|
||||
@ -377,6 +360,10 @@ func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item.
|
||||
if Energy < limitedTimeEventCfg.GetHighRollerNeedEnergy() {
|
||||
delete(RandMap, limitedTimeEventCfg.GetJackpotIdByType(EVENT_TYPE_HIGH_ROLLER))
|
||||
}
|
||||
if GoUtil.Now()-l.LastCatDaySale < limitedTimeEventCfg.GetCatSaleCD() {
|
||||
// 参与猫咪大甩卖活动时,猫咪大甩卖事件不进池子
|
||||
delete(RandMap, limitedTimeEventCfg.GetJackpotIdByType(EVENT_TYPE_CAT_DAY_SALE))
|
||||
}
|
||||
n := 0
|
||||
r := make([]int, 0)
|
||||
LastOption := l.LastOption
|
||||
|
||||
@ -36,6 +36,10 @@ type MailInfo struct {
|
||||
TitlePtBr string
|
||||
SubTitlePtBr string
|
||||
ContentPtBr string
|
||||
// 西班牙语 拉丁美洲
|
||||
TitleEsLatam string
|
||||
SubTitleEsLatam string
|
||||
ContentEsLatam string
|
||||
|
||||
Items []*item.Item // 邮件道具
|
||||
Type int //邮件类型
|
||||
@ -63,6 +67,11 @@ type MailStruct struct {
|
||||
SubTitlePtBr string
|
||||
ContentPtBr string
|
||||
|
||||
// 西班牙语 拉丁美洲
|
||||
TitleEsLatam string
|
||||
SubTitleEsLatam string
|
||||
ContentEsLatam string
|
||||
|
||||
Items []*item.Item
|
||||
Type int
|
||||
}
|
||||
@ -81,30 +90,16 @@ func (m *MailMod) SendMail(mail *MailStruct) int {
|
||||
SubTitleEn: mail.SubTitleEn,
|
||||
ContentEn: mail.ContentEn,
|
||||
|
||||
TitlePtBr: mail.TitlePtBr,
|
||||
SubTitlePtBr: mail.SubTitlePtBr,
|
||||
ContentPtBr: mail.ContentPtBr,
|
||||
Items: mail.Items,
|
||||
Send: GoUtil.Now(),
|
||||
Type: mail.Type,
|
||||
Status: MAIL_STATUS_IDLE,
|
||||
}
|
||||
return m.AutoId
|
||||
}
|
||||
|
||||
// 发送邮件
|
||||
func (m *MailMod) Send(Title, SubTitle, Content, TitleEn, SubTitleEn, ContentEn string, Items []*item.Item, t int) int {
|
||||
m.AutoId++
|
||||
m.List[m.AutoId] = &MailInfo{
|
||||
Title: Title,
|
||||
SubTitle: SubTitle,
|
||||
Content: Content,
|
||||
TitleEn: TitleEn,
|
||||
SubTitleEn: SubTitleEn,
|
||||
ContentEn: ContentEn,
|
||||
Items: Items,
|
||||
Send: GoUtil.Now(),
|
||||
Type: t,
|
||||
TitlePtBr: mail.TitlePtBr,
|
||||
SubTitlePtBr: mail.SubTitlePtBr,
|
||||
ContentPtBr: mail.ContentPtBr,
|
||||
TitleEsLatam: mail.TitleEsLatam,
|
||||
SubTitleEsLatam: mail.SubTitleEsLatam,
|
||||
ContentEsLatam: mail.ContentEsLatam,
|
||||
Items: mail.Items,
|
||||
Send: GoUtil.Now(),
|
||||
Type: mail.Type,
|
||||
Status: MAIL_STATUS_IDLE,
|
||||
}
|
||||
return m.AutoId
|
||||
}
|
||||
@ -167,10 +162,13 @@ func (m *MailMod) BackData() *msg.ResMailList {
|
||||
TitlePtBr: v.TitlePtBr,
|
||||
SubTitlePtBr: v.SubTitlePtBr,
|
||||
ContentPtBr: v.ContentPtBr,
|
||||
TitleEsLa: v.TitleEsLatam,
|
||||
SubTitleEsLa: v.SubTitleEsLatam,
|
||||
ContentEsLa: v.ContentEsLatam,
|
||||
Type: int32(v.Type),
|
||||
Items: item.ItemToMsg(v.Items),
|
||||
Status: int32(v.Status),
|
||||
Time: int32(v.Send),
|
||||
Type: int32(v.Type),
|
||||
}
|
||||
}
|
||||
return res
|
||||
@ -192,10 +190,13 @@ func (m *MailMod) NotifyMail(Id int) *msg.MailNotify {
|
||||
SubTitlePtBr: mailInfo.SubTitlePtBr,
|
||||
ContentPtBr: mailInfo.ContentPtBr,
|
||||
|
||||
Type: int32(mailInfo.Type),
|
||||
Items: item.ItemToMsg(mailInfo.Items),
|
||||
Status: int32(mailInfo.Status),
|
||||
Time: int32(mailInfo.Send),
|
||||
TitleEsLa: mailInfo.TitleEsLatam,
|
||||
SubTitleEsLa: mailInfo.SubTitleEsLatam,
|
||||
ContentEsLa: mailInfo.ContentEsLatam,
|
||||
Type: int32(mailInfo.Type),
|
||||
Items: item.ItemToMsg(mailInfo.Items),
|
||||
Status: int32(mailInfo.Status),
|
||||
Time: int32(mailInfo.Send),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,6 +31,10 @@ const (
|
||||
var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE}
|
||||
var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE}
|
||||
|
||||
const (
|
||||
MSG_TYPE_ONLINE = 0 // 在线消息
|
||||
MSG_TYPE_OFFLINE = 1 // 离线消息
|
||||
)
|
||||
const (
|
||||
HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息
|
||||
HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息
|
||||
@ -48,6 +52,7 @@ const (
|
||||
HANDLE_MOD_CHAMPSHIP_RANK_INFO = 20014 // 锦标赛排名信息
|
||||
HANDLE_MOD_CHAMPSHIP_RANK_LIST = 20015 // 锦标赛排行榜
|
||||
HANDLE_MOD_CHAMPSHIP_PRE_RANK = 20016 // 锦标赛上期排名
|
||||
HANDLE_MOD_CHAMPSHIP_GROUP = 20017 // 锦标赛分组
|
||||
)
|
||||
|
||||
const (
|
||||
@ -146,7 +151,8 @@ const (
|
||||
HANDLE_TYPE_CATNIP_SEND_EMOJI // 发送猫薄荷表情
|
||||
HANDLE_TYPE_CHAMPSHIP_MY_RANK // 锦标赛我的排名
|
||||
|
||||
HANDLE_TYPE_LOGIN // 玩家登录处理
|
||||
HANDLE_TYPE_LOGIN // 玩家登录处理
|
||||
SERVER_PLAYER_SYNC_LOGOUT_MSG // 玩家处理完离线消息
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@ -2,7 +2,6 @@ package order
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
limitedTimeEventCfg "server/conf/limited_time_event"
|
||||
mergeDataCfg "server/conf/merge_data"
|
||||
orderCfg "server/conf/order"
|
||||
"server/game/mod/item"
|
||||
@ -118,12 +117,7 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) {
|
||||
for _, v := range v.MergeId {
|
||||
Star += mergeDataCfg.GetStarById(v)
|
||||
}
|
||||
if v.Type == Super_type {
|
||||
Items := limitedTimeEventCfg.GetSuperOrderReward(Star)
|
||||
ItemList = append(ItemList, Items...)
|
||||
} else {
|
||||
ItemList = v.Items
|
||||
}
|
||||
ItemList = v.Items
|
||||
if v.Type == Guide_type {
|
||||
return nil, v.MergeId, v.Type, 0, nil
|
||||
}
|
||||
@ -452,14 +446,18 @@ func (o *OrderMod) CreateSuperOrder(lv int, Emit []int, EnergyMul int) error {
|
||||
}
|
||||
randNum := 0
|
||||
mergeList := make([]int, 0)
|
||||
OrderDiff := DIFF_LOW
|
||||
// 忽视上一个订单的难度,生成此订单时,难度默认为50%概率的中难度、50%概率的高难度
|
||||
OrderDiff := DIFF_MID
|
||||
if GoUtil.RandNum(1, 100) <= 50 {
|
||||
OrderDiff = DIFF_HIGH
|
||||
}
|
||||
var err error
|
||||
for {
|
||||
if randNum > 50 {
|
||||
break
|
||||
}
|
||||
randNum++
|
||||
mergeList, OrderDiff, err = randSuperOrderChess(o, lv, Emit, EnergyMul)
|
||||
mergeList, OrderDiff, err = randSuperOrderChess(o, lv, Emit, EnergyMul, OrderDiff)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
@ -411,8 +411,23 @@ func GetEmitByColor(Emit []int, color string) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetVirtualEnergy(MergeList, EmitList []int) int {
|
||||
eneryg := 0
|
||||
for _, v := range MergeList {
|
||||
ChessLv := mergeDataCfg.GetLvById(v)
|
||||
Color := mergeDataCfg.GetColorById(v)
|
||||
EmitId := GetEmitByColor(EmitList, Color)
|
||||
if EmitId == 0 {
|
||||
continue
|
||||
}
|
||||
NewChessLv := mergeDataCfg.DynamicLevRev(ChessLv, EmitId, Color)
|
||||
eneryg += int(math.Pow(2, float64(NewChessLv-1)))
|
||||
}
|
||||
return eneryg
|
||||
}
|
||||
|
||||
// 随机生成超级订单棋子
|
||||
func randSuperOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int, error) {
|
||||
func randSuperOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderDiff int) ([]int, int, error) {
|
||||
initReflectChess(Emit, EnergyMul)
|
||||
filterPool(o)
|
||||
OrderN, err := userCfg.GetOrderNByLv(lv)
|
||||
@ -425,7 +440,6 @@ func randSuperOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int,
|
||||
}
|
||||
// 生成订单难度和棋子数量
|
||||
ChessNum := GoUtil.RandMap(RandChessNum)
|
||||
OrderDiff := DIFF_HIGH
|
||||
ChessDiff := getChessDiff(ChessNum, OrderDiff, OrderN)
|
||||
mergeList := make([]int, 0, len(ChessDiff))
|
||||
// 根据订单棋子难度生成棋子
|
||||
|
||||
@ -707,6 +707,18 @@ func (p *PlayroomMod) GetTaskReward(Type int) (int, []*item.Item, error) {
|
||||
if GoUtil.InArray(Type, p.DailyTaskReward) {
|
||||
return 0, nil, fmt.Errorf("GetTaskReward Type is already in DailyTaskReward")
|
||||
}
|
||||
finish := 0
|
||||
for _, v := range p.DailyTask {
|
||||
if v.Status >= quest.QUEST_STATUS_FINISH {
|
||||
finish++
|
||||
}
|
||||
}
|
||||
if Type == DAILY_TASK_TYPE_ONE && finish < playroomCfg.GetPlayroomTaskDailyNum1() {
|
||||
return 0, nil, fmt.Errorf("GetTaskReward Type is DAILY_TASK_TYPE_ONE but finish is %d", finish)
|
||||
}
|
||||
if Type == DAILY_TASK_TYPE_TWO && finish < playroomCfg.GetPlayroomTaskDailyNum1()+playroomCfg.GetPlayroomTaskDailyNum2() {
|
||||
return 0, nil, fmt.Errorf("GetTaskReward Type is DAILY_TASK_TYPE_TWO but finish is %d", finish)
|
||||
}
|
||||
p.DailyTaskReward = append(p.DailyTaskReward, Type)
|
||||
Id := 0
|
||||
var Items []*item.Item
|
||||
@ -988,7 +1000,7 @@ func (p *PlayroomMod) PlayroomDressSet(DressSet map[int]int) ([]int, map[int]int
|
||||
if dressInfo.EndTime < GoUtil.Now() && dressInfo.EndTime != 0 {
|
||||
return nil, nil, fmt.Errorf("dress timeout")
|
||||
}
|
||||
if p.DressSet[Type] == 0 && Id != 0 {
|
||||
if p.DressSet[Type] != Id && Id != 0 {
|
||||
Part = append(Part, Type)
|
||||
}
|
||||
}
|
||||
@ -1049,35 +1061,6 @@ func (p *PlayroomMod) GetPetAir() map[int]*PetAirInfo {
|
||||
return p.NewPetAir
|
||||
}
|
||||
|
||||
// RoomPoint Get Set
|
||||
func (p *PlayroomMod) GetRoomPoint() int {
|
||||
return p.RoomPoint
|
||||
}
|
||||
func (p *PlayroomMod) SetRoomPoint(Point int) {
|
||||
p.RoomPoint = Point
|
||||
}
|
||||
func (p *PlayroomMod) AddRoomPointInvite(lv int) {
|
||||
if lv < ROOM_POINT_UNLOCK_LV {
|
||||
return
|
||||
}
|
||||
Point := playroomCfg.GetRoomPointInvite()
|
||||
p.RoomPoint += Point
|
||||
if p.RoomPoint < 0 {
|
||||
p.RoomPoint = 0
|
||||
}
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) AddRoomPointAdd(lv int) {
|
||||
if lv < ROOM_POINT_UNLOCK_LV {
|
||||
return
|
||||
}
|
||||
Point := playroomCfg.GetRoomPointAdd()
|
||||
p.RoomPoint += Point
|
||||
if p.RoomPoint < 0 {
|
||||
p.RoomPoint = 0
|
||||
}
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) BackDataTask() []*msg.DailyTask {
|
||||
DailyTask := make([]*msg.DailyTask, 0)
|
||||
for k, v := range p.DailyTask {
|
||||
|
||||
@ -15,29 +15,31 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
TRIGGER_LABEL_MERGELVTIME = "MergeLvTime"
|
||||
TRIGGER_LABEL_FINISHORDER = "FinishOrder"
|
||||
TRIGGER_LABEL_ENERGY = "Energy"
|
||||
TRIGGER_LABEL_STAR = "Star" // 收集宠物币
|
||||
TRIGGER_LABEL_DIAMOND = "Diamond" // 消耗钻石
|
||||
TRIGGER_LABEL_MERGETIME = "MergeTime"
|
||||
TRIGGER_LABEL_STOKECAT = "StokeCat"
|
||||
TRIGGER_LABEL_TAKECAT = "TakeCat"
|
||||
TRIGGER_LABEL_PLAYCAT = "PlayCat"
|
||||
TRIGGER_LABEL_FEEDCAT = "FeedCat"
|
||||
TRIGGER_LABEL_CLEANCAT = "CleanCat"
|
||||
TRIGGER_LABEL_UPLV = "UpLv" // 升级
|
||||
TRIGGER_LABEL_LOGIN = "Login" // 登录
|
||||
TRIGGER_LABEL_GUIDE_LOGIN = "GuideLogin" // 新手任务登录
|
||||
TRIGGER_LABEL_INTERACT = "Interact" // 互动
|
||||
TRIGGER_LABEL_PETDRESS = "PetDress" // 宠物换装
|
||||
TRIGGER_LABEL_VISITROOM = "VisitRoom" // 参观房间
|
||||
TRIGGER_LABEL_PETTREASURE = "PetTreasure" // 宠物寻宝
|
||||
TRIGGER_LABEL_ROOMDEC = "RoomDec" // 房间装饰
|
||||
TRIGGER_LABEL_PETWORK = "PetWork" // 宠物工作
|
||||
TRIGGER_LABEL_DECORATE = "Decorate" // 装饰
|
||||
TRIGGER_LABEL_PURCHASE = "Purchase" // 购买任意物品
|
||||
TRIGGER_LABEL_BUBBLE = "Bubble" // 使用钻石打开气泡
|
||||
TRIGGER_LABEL_MERGELVTIME = "MergeLvTime"
|
||||
TRIGGER_LABEL_FINISHORDER = "FinishOrder"
|
||||
TRIGGER_LABEL_ENERGY = "Energy"
|
||||
TRIGGER_LABEL_STAR = "Star" // 收集宠物币
|
||||
TRIGGER_LABEL_DIAMOND = "Diamond" // 消耗钻石
|
||||
TRIGGER_LABEL_MERGETIME = "MergeTime"
|
||||
TRIGGER_LABEL_STOKECAT = "StokeCat"
|
||||
TRIGGER_LABEL_TAKECAT = "TakeCat"
|
||||
TRIGGER_LABEL_PLAYCAT = "PlayCat"
|
||||
TRIGGER_LABEL_FEEDCAT = "FeedCat"
|
||||
TRIGGER_LABEL_CLEANCAT = "CleanCat"
|
||||
TRIGGER_LABEL_UPLV = "UpLv" // 升级
|
||||
TRIGGER_LABEL_LOGIN = "Login" // 登录
|
||||
TRIGGER_LABEL_GUIDE_LOGIN = "GuideLogin" // 新手任务登录
|
||||
TRIGGER_LABEL_INTERACT = "Interact" // 互动
|
||||
TRIGGER_LABEL_PETDRESS = "PetDress" // 宠物换装
|
||||
TRIGGER_LABEL_VISITROOM = "VisitRoom" // 参观房间
|
||||
TRIGGER_LABEL_PETTREASURE = "PetTreasure" // 宠物寻宝
|
||||
TRIGGER_LABEL_ROOMDEC = "RoomDec" // 房间装饰
|
||||
TRIGGER_LABEL_PETWORK = "PetWork" // 宠物工作
|
||||
TRIGGER_LABEL_DECORATE = "Decorate" // 装饰
|
||||
TRIGGER_LABEL_PURCHASE = "Purchase" // 购买任意物品
|
||||
TRIGGER_LABEL_BUBBLE = "Bubble" // 使用钻石打开气泡
|
||||
TRIGGER_LABEL_PLAYROOM_UPVOTE = "PlayRoomUpvote" // 给房间点赞
|
||||
TRIGGER_LABEL_PLAYROOM_GAME = "PlayRoomGame" // 玩房间小游戏
|
||||
)
|
||||
|
||||
type QuestProgress struct {
|
||||
@ -107,10 +109,15 @@ func TriggerQuestProgress(q *QuestProgress, Tr *Trigger) bool {
|
||||
if len(q.A) == 0 {
|
||||
return false
|
||||
}
|
||||
DressType := GoUtil.Int(q.A[0])
|
||||
Ids := Tr.A[0].([]int)
|
||||
if GoUtil.InArray(DressType, Ids) {
|
||||
q.Num += 1
|
||||
if len(Tr.A) == 0 {
|
||||
return false
|
||||
}
|
||||
Ids := GoUtil.IntSliceInterface(q.A)
|
||||
arg := GoUtil.IntSlice(Tr.A[0])
|
||||
for _, t := range arg {
|
||||
if GoUtil.InArray(t, Ids) {
|
||||
q.Num += 1
|
||||
}
|
||||
}
|
||||
default:
|
||||
q.Num += 1
|
||||
|
||||
@ -108,7 +108,7 @@ func (r *RaceMod) GetReward() ([]*item.Item, error) {
|
||||
}
|
||||
|
||||
func randOpponents(OpponentNum int) []*Opponent {
|
||||
Opponent := make([]*Opponent, 0)
|
||||
Opponent := make([]*Opponent, 0, OpponentNum-1)
|
||||
names := randnameCfg.GetRandNames(OpponentNum)
|
||||
for i := 1; i < OpponentNum; i++ {
|
||||
Opponent = append(Opponent, randOpponent(i, names[i]))
|
||||
|
||||
@ -50,7 +50,7 @@ func randReward(RewardData *gamedata.SevenLoginRewardData, LastType int, jackpot
|
||||
Item1 := []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(Num))}
|
||||
// 奖励2
|
||||
|
||||
NewJackpot := make([]*gamedata.SevenLoginJackpotData, 0)
|
||||
NewJackpot := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot))
|
||||
for _, v := range jackpot {
|
||||
if v.Diamond <= RemainDiamond && v.Type != LastType && v.Type != JACKPOT_CARD_TYPE {
|
||||
NewJackpot = append(NewJackpot, v)
|
||||
@ -65,7 +65,7 @@ func randReward(RewardData *gamedata.SevenLoginRewardData, LastType int, jackpot
|
||||
RemainDiamond -= 5
|
||||
}
|
||||
if GoUtil.InArray(RewardData.Id, CardPackIds) {
|
||||
CardJackpot := make([]*gamedata.SevenLoginJackpotData, 0)
|
||||
CardJackpot := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot))
|
||||
for _, v := range jackpot {
|
||||
if v.Diamond <= RemainDiamond && v.Type == JACKPOT_CARD_TYPE {
|
||||
CardJackpot = append(CardJackpot, v)
|
||||
@ -88,7 +88,7 @@ func randReward(RewardData *gamedata.SevenLoginRewardData, LastType int, jackpot
|
||||
Item3 := make([]*item.Item, 0)
|
||||
if RewardData.RewardNum == 3 {
|
||||
RemainDiamond += 5
|
||||
NewJackpot3 := make([]*gamedata.SevenLoginJackpotData, 0)
|
||||
NewJackpot3 := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot))
|
||||
for _, v := range jackpot {
|
||||
if v.Diamond <= RemainDiamond && v.Type != LastType && v.Type != Item2Type {
|
||||
NewJackpot3 = append(NewJackpot3, v)
|
||||
|
||||
@ -1,9 +1,14 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"server/game/mod/base"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/charge"
|
||||
"server/game/mod/chess"
|
||||
"server/game/mod/decorate"
|
||||
"server/game/mod/endless"
|
||||
limitedTimeEvent "server/game/mod/limited_time_event"
|
||||
"server/game/mod/playroom"
|
||||
)
|
||||
|
||||
func (p *Player) GetChessMod() *chess.ChessBorad {
|
||||
@ -17,3 +22,23 @@ func (p *Player) GetDecorateMod() *decorate.Decorate {
|
||||
func (p *Player) GetLimitEventMod() *limitedTimeEvent.LimitedTimeEventMod {
|
||||
return p.PlayMod.getLimitedTimeEventMod()
|
||||
}
|
||||
|
||||
func (p *Player) GetCardMod() *card.CardMod {
|
||||
return p.PlayMod.getCardMod()
|
||||
}
|
||||
|
||||
func (p *Player) GetPlayroomMod() *playroom.PlayroomMod {
|
||||
return p.PlayMod.getPlayroomMod()
|
||||
}
|
||||
|
||||
func (p *Player) GetEndlessMod() *endless.EndlessMod {
|
||||
return p.PlayMod.getEndlessMod()
|
||||
}
|
||||
|
||||
func (p *Player) GetBaseMod() *base.Base {
|
||||
return p.PlayMod.getBaseMod()
|
||||
}
|
||||
|
||||
func (p *Player) GetChargeMod() *charge.ChargeMod {
|
||||
return p.PlayMod.getChargeMod()
|
||||
}
|
||||
|
||||
@ -5,7 +5,6 @@ import (
|
||||
playroomCfg "server/conf/playroom"
|
||||
"server/game/mod/item"
|
||||
limitedTimeEvent "server/game/mod/limited_time_event"
|
||||
"server/game/mod/msg"
|
||||
GoUtil "server/game_util"
|
||||
proto "server/msg"
|
||||
)
|
||||
@ -25,10 +24,13 @@ func (p *Player) PlayroomBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
r.Status = int32(PlayroomMod.Status)
|
||||
r.Items = item.ItemToMsg(PlayroomMod.Reward)
|
||||
Opponent := make([]*proto.RoomOpponent, 0)
|
||||
FriendList := make([]*proto.FriendRoom, 0)
|
||||
|
||||
// 预分配切片容量,避免动态扩容
|
||||
visitorCount := len(PlayroomMod.Visitor)
|
||||
Opponent := make([]*proto.RoomOpponent, 0, visitorCount)
|
||||
FriendList := make([]*proto.FriendRoom, 0, len(FriendMod.GetFriendList()))
|
||||
if PlayroomMod.Target == 0 {
|
||||
PlayroomMod.Target = p.GetVisitorPlayer()
|
||||
PlayroomMod.SetTarget(p.GetVisitorPlayer())
|
||||
}
|
||||
TargerRoom := &proto.FriendRoom{}
|
||||
if PlayroomMod.Target != 0 {
|
||||
@ -75,8 +77,11 @@ func (p *Player) PlayroomBackData() {
|
||||
r.Opponent = Opponent
|
||||
r.Friend = FriendList
|
||||
r.Target = TargerRoom
|
||||
Collect := make([]*proto.PlayroomCollectInfo, 0)
|
||||
for _, v := range PlayroomMod.GetCollect() {
|
||||
|
||||
// 预分配装饰品切片容量
|
||||
collectList := PlayroomMod.GetCollect()
|
||||
Collect := make([]*proto.PlayroomCollectInfo, 0, len(collectList))
|
||||
for _, v := range collectList {
|
||||
Collect = append(Collect, &proto.PlayroomCollectInfo{
|
||||
Id: int32(v.Id),
|
||||
AddTime: v.AddTime,
|
||||
@ -99,14 +104,16 @@ func (p *Player) PlayroomBackData() {
|
||||
})
|
||||
Dress[int32(v.Part)] = PlayroomDress
|
||||
}
|
||||
ChipMessage := make([]*proto.ChipInfo, 0)
|
||||
// 预分配芯片列表容量
|
||||
ChipMessage := make([]*proto.ChipInfo, 0, len(PlayroomMod.ChipList))
|
||||
for _, v := range PlayroomMod.ChipList {
|
||||
ChipMessage = append(ChipMessage, &proto.ChipInfo{
|
||||
Uid: int64(v.Uid),
|
||||
EmojiId: int32(v.Emoji),
|
||||
})
|
||||
}
|
||||
AdWatch := make([]*proto.AdItem, 0)
|
||||
// 预分配广告列表容量
|
||||
AdWatch := make([]*proto.AdItem, 0, len(PlayroomMod.ADItem))
|
||||
for k, v := range PlayroomMod.ADItem {
|
||||
AdWatch = append(AdWatch, &proto.AdItem{
|
||||
Watch: int32(v.Watch),
|
||||
@ -117,8 +124,10 @@ func (p *Player) PlayroomBackData() {
|
||||
|
||||
r.Dress = Dress
|
||||
r.DressSet = GoUtil.MapIntToInt32(PlayroomMod.GetDressSet())
|
||||
PetAir := make([]*proto.PlayroomAirInfo, 0)
|
||||
for _, v := range PlayroomMod.GetPetAir() {
|
||||
// 预分配宠物空气列表容量
|
||||
petAirList := PlayroomMod.GetPetAir()
|
||||
PetAir := make([]*proto.PlayroomAirInfo, 0, len(petAirList))
|
||||
for _, v := range petAirList {
|
||||
PetAir = append(PetAir, &proto.PlayroomAirInfo{
|
||||
Id: int32(v.Id),
|
||||
AddTime: int64(v.AddTime),
|
||||
@ -295,29 +304,23 @@ func (p *Player) ChargeBackData() {
|
||||
|
||||
func (p *Player) BackChampship() {
|
||||
ChampshipMod := p.PlayMod.getChampshipMod()
|
||||
MyRank, MyPreRank := p.GetChampshipRank()
|
||||
p.PushClientRes(ChampshipMod.BackData(MyRank, MyPreRank))
|
||||
rank, preRank := p.GetChampshipRank()
|
||||
p.PushClientRes(ChampshipMod.BackData(rank, preRank))
|
||||
}
|
||||
|
||||
// 获取冠军赛排名 redis缓存
|
||||
func (p *Player) GetChampshipRank() (int, int) {
|
||||
MyRank := 0
|
||||
MyPreRank := 0
|
||||
res, _ := SendMsgToCenterSync(&msg.Msg{
|
||||
From: int(p.M_DwUin),
|
||||
HandleType: msg.HANDLE_MOD_CHAMPSHIP_RANK_INFO,
|
||||
})
|
||||
if res != nil {
|
||||
MyRank = res.Extra.([]int)[0]
|
||||
MyPreRank = res.Extra.([]int)[1]
|
||||
}
|
||||
return MyRank, MyPreRank
|
||||
preRank, rank, _, _ := GetRankCache(int(p.M_DwUin))
|
||||
return rank, preRank
|
||||
}
|
||||
|
||||
// 返回好友信息
|
||||
func (p *Player) FriendListBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var fl []*proto.ResPlayerSimple
|
||||
for k, v := range FriendMod.GetFriendList() {
|
||||
friendList := FriendMod.GetFriendList()
|
||||
// 预分配切片容量
|
||||
fl := make([]*proto.ResPlayerSimple, 0, len(friendList))
|
||||
for k, v := range friendList {
|
||||
if k == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
@ -328,7 +331,8 @@ func (p *Player) FriendListBackData() {
|
||||
fl = append(fl, ps)
|
||||
}
|
||||
}
|
||||
ReqFriendList := make([]int64, 0)
|
||||
// 预分配申请列表容量
|
||||
ReqFriendList := make([]int64, 0, len(FriendMod.SendApply))
|
||||
for k := range FriendMod.SendApply {
|
||||
ReqFriendList = append(ReqFriendList, int64(k))
|
||||
}
|
||||
@ -342,7 +346,8 @@ func (p *Player) FriendListBackData() {
|
||||
|
||||
func (p *Player) FriendApplyBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var al []*proto.ResFriendApplyInfo
|
||||
// 预分配切片容量
|
||||
al := make([]*proto.ResFriendApplyInfo, 0, len(FriendMod.ApplyList))
|
||||
for k, v := range FriendMod.ApplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(k)
|
||||
if ps != nil {
|
||||
@ -359,7 +364,8 @@ func (p *Player) FriendApplyBackData() {
|
||||
|
||||
func (p *Player) FriendLogBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var log []*proto.ResFriendLog
|
||||
// 预分配切片容量
|
||||
log := make([]*proto.ResFriendLog, 0, len(FriendMod.Log))
|
||||
for _, v := range FriendMod.Log {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
if ps == nil {
|
||||
@ -376,7 +382,8 @@ func (p *Player) FriendLogBackData() {
|
||||
Upvote: v.Upvote,
|
||||
})
|
||||
}
|
||||
var reply []*proto.ResFriendReply
|
||||
// 预分配回复列表容量
|
||||
reply := make([]*proto.ResFriendReply, 0, len(FriendMod.ReplyList))
|
||||
for _, v := range FriendMod.ReplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
if ps == nil {
|
||||
@ -402,7 +409,8 @@ func (p *Player) FriendLogBackData() {
|
||||
|
||||
func (p *Player) FriendCardBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var msgList []*proto.ResFriendCard
|
||||
// 预分配切片容量
|
||||
msgList := make([]*proto.ResFriendCard, 0, len(FriendMod.Card))
|
||||
for _, v := range FriendMod.Card {
|
||||
m := GetCardInfoMsg(v)
|
||||
msgList = append(msgList, m)
|
||||
|
||||
@ -1081,10 +1081,6 @@ func (p *Player) TeLog(Type string, Param map[string]interface{}) {
|
||||
go ga.GAlogEvent(Type, BaseMod.Account, "", Param)
|
||||
}
|
||||
|
||||
func (p *Player) Kafka(Type string, Param map[string]interface{}) {
|
||||
|
||||
}
|
||||
|
||||
// 初始化活动
|
||||
func (p *Player) initAcitivity() {
|
||||
p.activity = make(map[int]*ActivityInfo)
|
||||
@ -1198,27 +1194,28 @@ func (p *Player) GetIp() string {
|
||||
return p.GetAgent().RemoteAddr().String()
|
||||
}
|
||||
|
||||
// TODO func_exec_add 需要优化成令牌桶算法,目前的实现可能存在性能问题
|
||||
func (p *Player) func_exec_add() error {
|
||||
now := time.Now().Unix()
|
||||
|
||||
|
||||
// 如果是新的一秒,重置计数
|
||||
if now != int64(p.func_time) {
|
||||
p.func_time = int(now)
|
||||
p.args["func_exec_count"] = 1
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
// 获取当前秒内的调用次数
|
||||
count := 0
|
||||
if v, ok := p.args["func_exec_count"]; ok {
|
||||
count = GoUtil.Int(v)
|
||||
}
|
||||
|
||||
|
||||
// 检查是否超过限制
|
||||
if count >= 20 {
|
||||
return errors.New("func_exec_add: call limit exceeded (20 times per second)")
|
||||
}
|
||||
|
||||
|
||||
// 增加计数
|
||||
p.args["func_exec_count"] = count + 1
|
||||
return nil
|
||||
@ -1240,9 +1237,10 @@ func (p *Player) DispatcherHandle() {
|
||||
case msg := <-p.msgChan:
|
||||
if msg != nil {
|
||||
p.wg.Done()
|
||||
log.Debug("player %d recive msg %v", p.M_DwUin, msg)
|
||||
now := time.Now()
|
||||
// 直接在当前 goroutine 中处理,避免创建过多 goroutine
|
||||
p.HandleMsg(msg.Clone())
|
||||
log.Debug("player %d recive msg %v;handle time %v", p.M_DwUin, msg, time.Since(now))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,9 +41,17 @@ import (
|
||||
sevenLogin "server/game/mod/seven_login"
|
||||
Var "server/game/mod/var"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
// buffer 对象池,复用 bytes.Buffer 减少内存分配
|
||||
var bufferPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
return bytes.NewBuffer(make([]byte, 0, 128*1024))
|
||||
},
|
||||
}
|
||||
|
||||
type PlayerData struct {
|
||||
Name string
|
||||
IsHaveDataDb bool
|
||||
@ -238,10 +246,12 @@ func (p *PlayerMod) ClearData(player *Player) {
|
||||
}
|
||||
if p.is_update && !p.IsBlackList() {
|
||||
//序列化模块
|
||||
var buf bytes.Buffer
|
||||
encode := gob.NewEncoder(&buf)
|
||||
buf := bufferPool.Get().(*bytes.Buffer)
|
||||
buf.Reset() // 清空之前的数据
|
||||
encode := gob.NewEncoder(buf)
|
||||
err := encode.Encode(p.mod_list)
|
||||
if err != nil {
|
||||
bufferPool.Put(buf) // 即使出错也要归还
|
||||
log.Debug("uid: %d, SaveData, playmod error %v", player.M_DwUin, err)
|
||||
return
|
||||
}
|
||||
@ -254,22 +264,33 @@ func (p *PlayerMod) ClearData(player *Player) {
|
||||
|
||||
err = db.SavePlayerModData(modData)
|
||||
if err != nil {
|
||||
bufferPool.Put(buf) // 即使出错也要归还
|
||||
log.Debug("uid: %d, SaveData, playmod error %v", player.M_DwUin, err)
|
||||
return
|
||||
}
|
||||
p.is_update = false
|
||||
bufferPool.Put(buf) // 归还到对象池
|
||||
}
|
||||
}
|
||||
|
||||
func (p *PlayerMod) BackUp(B *PlayerBackUp) {
|
||||
var buf bytes.Buffer
|
||||
encode := gob.NewEncoder(&buf)
|
||||
// 从对象池获取 buffer,复用以减少内存分配
|
||||
buf := bufferPool.Get().(*bytes.Buffer)
|
||||
buf.Reset() // 清空之前的数据
|
||||
|
||||
encode := gob.NewEncoder(buf)
|
||||
err := encode.Encode(p.mod_list)
|
||||
if err != nil {
|
||||
log.Debug("Backup, playmod error %v", err)
|
||||
bufferPool.Put(buf) // 即使出错也要归还
|
||||
return
|
||||
}
|
||||
B.PlayMod = buf.Bytes()
|
||||
|
||||
// 复制数据,因为 buf 会被放回池中
|
||||
B.PlayMod = append([]byte(nil), buf.Bytes()...)
|
||||
|
||||
// 归还到对象池供下次使用
|
||||
bufferPool.Put(buf)
|
||||
}
|
||||
|
||||
func (p *PlayerMod) Recover(B *PlayerBackUp) {
|
||||
|
||||
@ -98,29 +98,6 @@ func (r *RankMgr) getRank(RankType int) []*Rank {
|
||||
return []*Rank{}
|
||||
}
|
||||
|
||||
func (r *RankMgr) getAllRank(RankType int) []*Rank {
|
||||
if v, ok := r.getData().List[RankType]; ok {
|
||||
return v
|
||||
}
|
||||
return []*Rank{}
|
||||
}
|
||||
|
||||
func (r *RankMgr) getMyRank(Uid, RankType int) (int, float64) {
|
||||
if d, ok := r.getData().List[RankType]; ok {
|
||||
for k, v := range d {
|
||||
if v.Uid == Uid {
|
||||
return k + 1, v.Score
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0, 0.0
|
||||
}
|
||||
|
||||
// 设置榜单数据
|
||||
func (r *RankMgr) setRank(RankType int, data []*Rank) {
|
||||
r.getData().List[RankType] = data
|
||||
}
|
||||
|
||||
// 获取排行榜信息
|
||||
func (r *RankMgr) getRankInfo(m *msg.Msg) (interface{}, error) {
|
||||
data := m.Extra.(RankMsg)
|
||||
@ -132,12 +109,10 @@ func (r *RankMgr) getRankInfo(m *msg.Msg) (interface{}, error) {
|
||||
if data.RankType == RANK_TYPE_USER {
|
||||
return r.getRedisCountryRankInfo(m)
|
||||
}
|
||||
rankList := r.getRank(data.RankType)
|
||||
MyRank, MyScore := r.getMyRank(m.From, data.RankType)
|
||||
return &RankInfo{
|
||||
List: rankList,
|
||||
MyRank: MyRank,
|
||||
MyScore: MyScore,
|
||||
List: []*Rank{},
|
||||
MyRank: 0,
|
||||
MyScore: 0,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -193,32 +168,6 @@ func (r *RankMgr) getRedisRankInfo(m *msg.Msg) (interface{}, error) {
|
||||
// 进入排行榜
|
||||
func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
data := m.Extra.(RankMsg)
|
||||
rankList := r.getRank(data.RankType)
|
||||
inRank := false
|
||||
for _, v := range rankList {
|
||||
if v.Uid == data.Uid {
|
||||
if v.Score < data.Score {
|
||||
v.Score = data.Score
|
||||
v.Time = m.SendT
|
||||
inRank = true
|
||||
break
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
|
||||
if !inRank {
|
||||
rankList = append(rankList, &Rank{Uid: data.Uid, Score: data.Score, Time: m.SendT})
|
||||
}
|
||||
sort.Slice(rankList, func(i, j int) bool { // 排序 从大到小 数值相等按时间排序
|
||||
if rankList[i].Score > rankList[j].Score {
|
||||
return true
|
||||
} else if rankList[i].Score == rankList[j].Score {
|
||||
return rankList[i].Time < rankList[j].Time
|
||||
}
|
||||
return false
|
||||
})
|
||||
r.setRank(data.RankType, rankList)
|
||||
if data.RankType == RANK_TYPE_USER {
|
||||
// 全球玩家排行榜
|
||||
Uid := strconv.Itoa(data.Uid)
|
||||
@ -234,11 +183,3 @@ func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
r.update = true
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (r *RankMgr) ClearRank(RankType int) {
|
||||
// if RankType == RANK_TYPE_GLOBAL {
|
||||
// db.RedisDel(RANK_USER)
|
||||
// return
|
||||
// }
|
||||
r.setRank(RankType, []*Rank{})
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ import (
|
||||
collectCfg "server/conf/collect"
|
||||
decorateCfg "server/conf/decorate"
|
||||
emojiCfg "server/conf/emoji"
|
||||
friendCfg "server/conf/friend"
|
||||
GuideTaskCfg "server/conf/guide_task"
|
||||
handbookCfg "server/conf/handbook"
|
||||
limitedTimeEventCfg "server/conf/limited_time_event"
|
||||
@ -102,12 +103,6 @@ func ReqFriendPlayerSimple(player *Player, buf []byte) error {
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
PlayerSimpleData.AddTime = FriendMod.GetAddTime(Uid)
|
||||
PlayerSimpleData.Interact = FriendMod.GetInteractTime(Uid)
|
||||
LastActLog := FriendMod.GetActLogLast()
|
||||
PlayerSimpleData.Last = &msg.ActLog{
|
||||
Type: int32(LastActLog.Type),
|
||||
Time: LastActLog.Time,
|
||||
Param: LastActLog.Param,
|
||||
}
|
||||
player.PushClientRes(PlayerSimpleData)
|
||||
return nil
|
||||
}
|
||||
@ -282,6 +277,11 @@ func ReqRewardOrder(player *Player, buf []byte) error {
|
||||
if OrderType == order.Pet_type {
|
||||
Item = player.FormatPetOrderItem(Item)
|
||||
}
|
||||
if OrderType == order.Super_type {
|
||||
virtualEnergy := order.GetVirtualEnergy(mergeList, ChessMod.GetStarEmitList())
|
||||
superOrderItem := limitedTimeEventCfg.GetSuperOrderReward(virtualEnergy)
|
||||
Item = item.Merge(Item, superOrderItem)
|
||||
}
|
||||
ActItem := player.GetActivityItem(GoUtil.Int32ToInt(req.ActType))
|
||||
Item = item.Merge(Item, ActItem)
|
||||
if !OrderMod.CheckSuperOrder() {
|
||||
@ -1862,13 +1862,24 @@ func ReqApplyFriend(player *Player, buf []byte) error {
|
||||
})
|
||||
return fmt.Errorf("already friend")
|
||||
}
|
||||
// if FriendMod.AddSendApply(Uid) {
|
||||
// player.SendErrClienRes(&msg.ResApplyFriend{
|
||||
// Code: msg.RES_CODE_FAIL,
|
||||
// Msg: "already apply",
|
||||
// })
|
||||
// return fmt.Errorf("already apply")
|
||||
// }
|
||||
// 好友人数到达上限(2000人)时,玩家将无法再发送好友申请
|
||||
if FriendMod.GetFriendLen() >= friendCfg.GetFriendLimitNum() {
|
||||
player.SendErrClienRes(&msg.ResApplyFriend{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "friend list full",
|
||||
})
|
||||
return fmt.Errorf("friend list full")
|
||||
}
|
||||
// 对于任何玩家而言,向自己在24小时内已从任意途径发送过好友申请的玩家再次发送好友申请时,该次申请不会被发出
|
||||
sendApplyTime := FriendMod.GetSendApplyTime(Uid)
|
||||
if sendApplyTime != 0 && GoUtil.Now()-sendApplyTime < 86400 {
|
||||
player.PushClientRes(&msg.ResApplyFriend{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Uid: req.Uid,
|
||||
Msg: "already applied",
|
||||
})
|
||||
return fmt.Errorf("already applied")
|
||||
}
|
||||
if req.Type == 1 {
|
||||
Items, err := FriendMod.GetSponsorReward()
|
||||
if err != nil {
|
||||
@ -1911,10 +1922,6 @@ func ReqApplyFriend(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
})
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel())
|
||||
player.PlayroomBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -1934,15 +1941,19 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
|
||||
})
|
||||
return fmt.Errorf("apply uid not exist")
|
||||
}
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HADNLE_TYPE_AGREE,
|
||||
From: int(player.M_DwUin),
|
||||
To: Uid,
|
||||
SendT: GoUtil.Now(),
|
||||
// 好友人数到达上限(2000人)时,玩家将无法再同意好友申请
|
||||
if FriendMod.GetFriendLen() >= friendCfg.GetFriendLimitNum() {
|
||||
player.SendErrClienRes(&msg.ResAgreeFriend{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "friend list full",
|
||||
})
|
||||
return fmt.Errorf("friend list full")
|
||||
}
|
||||
// 新好友才可以打招呼
|
||||
if !FriendMod.CheckAddBefore(Uid) {
|
||||
FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+24*3600, nil)
|
||||
}
|
||||
FriendMgrSend(m)
|
||||
FriendMod.AddFriend(Uid)
|
||||
FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+24*3600, nil)
|
||||
player.PushClientRes(&msg.ResAgreeFriend{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
@ -1953,12 +1964,15 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
|
||||
"add_type": "接受申请",
|
||||
})
|
||||
player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now())
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HADNLE_TYPE_AGREE,
|
||||
From: int(player.M_DwUin),
|
||||
To: Uid,
|
||||
SendT: GoUtil.Now(),
|
||||
}
|
||||
FriendMgrSend(m)
|
||||
player.FriendApplyBackData()
|
||||
player.FriendLogBackData()
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
player.PlayroomBackData()
|
||||
player.PlayMod.save()
|
||||
return nil
|
||||
}
|
||||
@ -2520,7 +2534,11 @@ func ReqGetFriendCard(player *Player, buf []byte) error {
|
||||
}
|
||||
FriendMod.DelCardInfo(req.Id)
|
||||
player.AddCard(CardInfo.CardId)
|
||||
player.AddLog(CardInfo.AUid, friend.LOG_TYPE_CARD_SEND_ACCEPT, fmt.Sprintf("%d", CardInfo.CardId), GoUtil.Now())
|
||||
uid := CardInfo.AUid
|
||||
if CardInfo.Type == card.TYPE_CARD_GIVE {
|
||||
uid = CardInfo.BUid
|
||||
}
|
||||
player.AddLog(uid, friend.LOG_TYPE_CARD_SEND_ACCEPT, fmt.Sprintf("%d", CardInfo.CardId), GoUtil.Now())
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResGetFriendCard{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -2961,17 +2979,6 @@ func ReqCreateOrderSn(player *Player, buf []byte) error {
|
||||
// 订单发货
|
||||
func ReqShippingOrder(player *Player, buf []byte) error {
|
||||
return nil
|
||||
req := &msg.ReqShippingOrder{}
|
||||
err := proto.Unmarshal(buf, req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
go player.TriggerShippingOrder(req)
|
||||
player.PushClientRes(&msg.ResShippingOrder{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
// 锦标赛
|
||||
@ -3370,10 +3377,6 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error {
|
||||
Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND,
|
||||
SendT: GoUtil.Now(),
|
||||
})
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
player.PlayroomBackData()
|
||||
player.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": req.Id,
|
||||
"add_type": "邀请注册",
|
||||
@ -3414,10 +3417,6 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error {
|
||||
Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND,
|
||||
SendT: GoUtil.Now(),
|
||||
})
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
player.PlayroomBackData()
|
||||
player.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": req.Id,
|
||||
"add_type": "邀请注册",
|
||||
@ -3969,6 +3968,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
|
||||
"is_chip": true,
|
||||
"item_list": Items,
|
||||
})
|
||||
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PLAYROOM_GAME})
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_VISIT_GAME_PRIZE_1, "")
|
||||
player.UpdateUserInfo()
|
||||
@ -4132,7 +4132,7 @@ func ReqPlayroomFlip(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.Kafka("playroom_flip", map[string]interface{}{
|
||||
player.TeLog("playroom_flip", map[string]interface{}{
|
||||
"CardID": CardId,
|
||||
"Id": req.Id,
|
||||
})
|
||||
@ -4282,6 +4282,7 @@ func ReqPlayroomUpvote(player *Player, buf []byte) error {
|
||||
Type: MsqMod.HANDLE_TYPE_PLAYROOM_KISS,
|
||||
SendT: GoUtil.Now(),
|
||||
})
|
||||
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PLAYROOM_UPVOTE})
|
||||
player.AddPlayroomUpvote(int(req.Id))
|
||||
player.SetPlayroomKiss(1, int(req.Id))
|
||||
player.TeLog("visit_like", map[string]interface{}{
|
||||
@ -4686,7 +4687,7 @@ func ReqKafkaLog(player *Player, buf []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
player.Kafka(req.Event, map[string]interface{}{
|
||||
player.TeLog(req.Event, map[string]interface{}{
|
||||
"From": "Client",
|
||||
"data": req.Data,
|
||||
})
|
||||
@ -4779,9 +4780,9 @@ func ReqCollect(player *Player, buf []byte) error {
|
||||
case collect.COLLECT_TYPE_EMOJI:
|
||||
AreaType = "emoji"
|
||||
Num = player.PlayMod.getEmojiMod().GetEmojiNum()
|
||||
case collect.COLLECT_TYPE_FACE:
|
||||
case collect.COLLECT_TYPE_FACE: // 增加默认头像1个
|
||||
AreaType = "face"
|
||||
Num = player.PlayMod.getFaceMod().GetFaceNum()
|
||||
Num = player.PlayMod.getFaceMod().GetFaceNum() + 1
|
||||
case collect.COLLECT_TYPE_AVATAR:
|
||||
AreaType = "avatar"
|
||||
Num = player.PlayMod.getAvatarMod().GetAvatarNum()
|
||||
@ -5046,11 +5047,6 @@ func ReqAddNpc(player *Player, buf []byte) error {
|
||||
}
|
||||
player.PlayMod.save()
|
||||
player.FriendListBackData()
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel())
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
player.PlayroomBackData()
|
||||
player.TeLog("add_npc", map[string]interface{}{
|
||||
"NpcId": int(req.NpcId),
|
||||
})
|
||||
|
||||
@ -30,7 +30,7 @@ const (
|
||||
func (player *Player) MailTrigger(Tr *quest.Trigger) bool {
|
||||
MailMod := player.PlayMod.getMailMod()
|
||||
TriggerMail := mailCfg.GetTriggerMail()
|
||||
t := make([]*mailCfg.TriggerMail, 0)
|
||||
t := make([]*mailCfg.TriggerMail, 0, len(TriggerMail))
|
||||
for _, v := range TriggerMail {
|
||||
if GoUtil.InArray(v.Id, MailMod.TriggerMail) {
|
||||
continue
|
||||
|
||||
@ -59,12 +59,31 @@ func (f *VarMgr) Init() {
|
||||
if f.getData().ZeroTime == GoUtil.ZeroTimestamp() {
|
||||
f.ZeroUpdate()
|
||||
}
|
||||
|
||||
f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() {
|
||||
f.ZeroUpdate()
|
||||
})
|
||||
}
|
||||
|
||||
func (f *VarMgr) fixbug() {
|
||||
data := f.getData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
for k, v := range data.NewUseVar {
|
||||
if v != nil {
|
||||
del := true
|
||||
for _, ved := range v {
|
||||
if ved.D.(int) != 0 {
|
||||
del = false
|
||||
}
|
||||
}
|
||||
if del {
|
||||
delete(data.NewUseVar, k)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (f *VarMgr) version() {
|
||||
switch v := f.getData().Version; v {
|
||||
case 0:
|
||||
@ -84,6 +103,10 @@ func (f *VarMgr) version() {
|
||||
}
|
||||
}
|
||||
f.getData().Version = 1
|
||||
case 1:
|
||||
// future version update
|
||||
f.fixbug() // 修复用户变量冗余数据
|
||||
f.getData().Version = 2
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,7 +171,7 @@ func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData {
|
||||
varData := f.getData().NewUseVar[uid]
|
||||
if varData == nil {
|
||||
varData = make(map[string]*VarExpireData)
|
||||
f.getData().NewUseVar[uid] = varData
|
||||
//f.getData().NewUseVar[uid] = varData
|
||||
}
|
||||
ved, ok := varData[key]
|
||||
if !ok {
|
||||
@ -165,19 +188,6 @@ func (f *VarMgr) SetVar(key string, value interface{}) {
|
||||
SaveCacheVarData(key, f.getData().NewVar[key])
|
||||
}
|
||||
|
||||
func (f *VarMgr) GetVar(key string) *VarExpireData {
|
||||
if v, ok := f.getData().NewVar[key]; ok {
|
||||
return v
|
||||
}
|
||||
data := &VarExpireData{}
|
||||
f.getData().NewVar[key] = data
|
||||
return data
|
||||
}
|
||||
|
||||
func (f *VarMgr) DelVar(key string) {
|
||||
delete(f.getData().Var, key)
|
||||
}
|
||||
|
||||
func (f *VarMgr) getData() *VarData {
|
||||
return f.data.(*VarData)
|
||||
}
|
||||
@ -227,6 +237,8 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
|
||||
func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
data := getVarData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
userVar := &VarExpireData{}
|
||||
if v, ok := m.Extra.(msg.VarData); ok {
|
||||
if varData, ok := data.NewUseVar[m.From]; ok {
|
||||
|
||||
@ -14,9 +14,16 @@ import (
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
var bufferPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
return bytes.NewBuffer(make([]byte, 0, 128*1024))
|
||||
},
|
||||
}
|
||||
|
||||
// 实例化一个通过字符串映射函数切片的map
|
||||
var eventByName = make(map[string][]*EventObj)
|
||||
|
||||
@ -219,12 +226,15 @@ func String(a interface{}) string {
|
||||
}
|
||||
|
||||
func GobMarshal(data interface{}) ([]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
encode := gob.NewEncoder(&buf)
|
||||
buf := bufferPool.Get().(*bytes.Buffer)
|
||||
buf.Reset() // 清空之前的数据
|
||||
encode := gob.NewEncoder(buf)
|
||||
err := encode.Encode(data)
|
||||
if err != nil {
|
||||
bufferPool.Put(buf) // 即使出错也要归还
|
||||
return nil, err
|
||||
}
|
||||
bufferPool.Put(buf) // 归还到对象池
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
|
||||
@ -95,3 +95,14 @@ func DiffMap(a, b map[int]int) map[int]int {
|
||||
}
|
||||
return diff
|
||||
}
|
||||
|
||||
func GetMapIntValueByKey(m interface{}, key string) int {
|
||||
mi, ok := m.(map[string]interface{})
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
if v, ok := mi[key]; ok {
|
||||
return Int(v)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package GoUtil
|
||||
|
||||
import "math/rand"
|
||||
|
||||
func RandNum(start int, end int) int {
|
||||
if start > end {
|
||||
return 0
|
||||
@ -7,5 +9,5 @@ func RandNum(start int, end int) int {
|
||||
if start == end {
|
||||
return start
|
||||
}
|
||||
return start + GetRand().Intn(end-start+1)
|
||||
return start + rand.Intn(end-start+1)
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package GoUtil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"reflect"
|
||||
"server/game/mod/item"
|
||||
"sort"
|
||||
@ -21,6 +22,15 @@ func IntSlice(d interface{}) []int {
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func IntSliceInterface(d []interface{}) []int {
|
||||
result := make([]int, 0, len(d))
|
||||
for _, v := range d {
|
||||
num := Int(v)
|
||||
result = append(result, num)
|
||||
}
|
||||
return result
|
||||
}
|
||||
func IntToInt32(d []int) []int32 {
|
||||
r := make([]int32, 0, len(d))
|
||||
for _, d := range d {
|
||||
@ -51,7 +61,7 @@ func RandPopSlice(slice []int) ([]int, int) {
|
||||
if slen == 0 {
|
||||
return slice, -1
|
||||
}
|
||||
Id := GetRand().Intn(slen)
|
||||
Id := rand.Intn(slen)
|
||||
Val := slice[Id]
|
||||
Slice2 := append(slice[0:Id], slice[Id+1:]...)
|
||||
return Slice2, Val
|
||||
@ -62,7 +72,7 @@ func RandSlice(slice []int) int {
|
||||
if slen == 0 {
|
||||
return 0
|
||||
}
|
||||
Id := GetRand().Intn(slen)
|
||||
Id := rand.Intn(slen)
|
||||
return slice[Id]
|
||||
}
|
||||
|
||||
@ -71,7 +81,7 @@ func RandItem(slice []*item.Item) *item.Item {
|
||||
if slen == 0 {
|
||||
return nil
|
||||
}
|
||||
Id := GetRand().Intn(slen)
|
||||
Id := rand.Intn(slen)
|
||||
return slice[Id]
|
||||
}
|
||||
|
||||
@ -84,7 +94,7 @@ func RandSliceNum(s []int, num int) []int {
|
||||
}
|
||||
|
||||
for i := 0; i < num; i++ {
|
||||
Id := GetRand().Intn(len(slice))
|
||||
Id := rand.Intn(len(slice))
|
||||
r = append(r, slice[Id])
|
||||
slice = append(slice[0:Id], slice[Id+1:]...)
|
||||
}
|
||||
@ -100,7 +110,7 @@ func RandSliceNum2(s []interface{}, num int) []interface{} {
|
||||
}
|
||||
|
||||
for i := 0; i < num; i++ {
|
||||
Id := GetRand().Intn(len(slice))
|
||||
Id := rand.Intn(len(slice))
|
||||
r = append(r, slice[Id])
|
||||
slice = append(slice[0:Id], slice[Id+1:]...)
|
||||
}
|
||||
@ -116,7 +126,7 @@ func RandSliceNumNonAdjacent(s []int, num int) []int {
|
||||
sort.Ints(slice)
|
||||
result := make([]int, 0, num)
|
||||
for len(result) < num {
|
||||
Id := GetRand().Intn(len(slice))
|
||||
Id := rand.Intn(len(slice))
|
||||
result = append(result, slice[Id])
|
||||
slice = SubAdjacentElemSlice(slice, Id)
|
||||
}
|
||||
@ -138,7 +148,7 @@ func RandStringSlice(slice []string) string {
|
||||
if slen == 0 {
|
||||
return ""
|
||||
}
|
||||
Id := GetRand().Intn(slen)
|
||||
Id := rand.Intn(slen)
|
||||
return slice[Id]
|
||||
}
|
||||
|
||||
@ -335,7 +345,7 @@ func PopStringArray(s []string) (string, []string) {
|
||||
|
||||
func ShuffleStringArray(s []string) []string {
|
||||
r := make([]string, len(s))
|
||||
perm := GetRand().Perm(len(s))
|
||||
perm := rand.Perm(len(s))
|
||||
for i, v := range perm {
|
||||
r[v] = s[i]
|
||||
}
|
||||
@ -344,7 +354,7 @@ func ShuffleStringArray(s []string) []string {
|
||||
|
||||
func ShuffleArray(s []int) []int {
|
||||
r := make([]int, len(s))
|
||||
perm := GetRand().Perm(len(s))
|
||||
perm := rand.Perm(len(s))
|
||||
for i, v := range perm {
|
||||
r[v] = s[i]
|
||||
}
|
||||
|
||||
@ -1,45 +0,0 @@
|
||||
package gamedata
|
||||
|
||||
import (
|
||||
|
||||
// "io/ioutil"
|
||||
|
||||
"server/pkg/github.com/name5566/leaf/recordfile"
|
||||
)
|
||||
|
||||
var G_AllConfigs = map[string]interface{}{}
|
||||
|
||||
type ConfigData struct {
|
||||
data map[string]interface{}
|
||||
}
|
||||
|
||||
func (cd *ConfigData) GetData() map[string]interface{} {
|
||||
return cd.data
|
||||
}
|
||||
|
||||
func (cd *ConfigData) SetData(data map[string]interface{}) {
|
||||
cd.data = data
|
||||
}
|
||||
|
||||
var G_AllConfigsData = map[string]*recordfile.RecordFile{}
|
||||
var G_AllConfigsJsonData = map[string]*ConfigData{}
|
||||
|
||||
func InitReadAllCfg() {
|
||||
// 遍历 Map
|
||||
for k, v := range G_AllConfigs {
|
||||
rd := readRfNew(v, k)
|
||||
G_AllConfigsData[k] = rd
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func GetConfigByName(name string) *recordfile.RecordFile {
|
||||
_, ok := G_AllConfigsData[name]
|
||||
if ok {
|
||||
return G_AllConfigsData[name]
|
||||
} else {
|
||||
rd := readRfNew(G_AllConfigs[name], name)
|
||||
G_AllConfigsData[name] = rd
|
||||
}
|
||||
return G_AllConfigsData[name]
|
||||
}
|
||||
@ -3,75 +3,61 @@ package gamedata
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"sync"
|
||||
|
||||
"server/conf"
|
||||
"server/game/mod/item"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"server/pkg/github.com/name5566/leaf/recordfile"
|
||||
|
||||
"github.com/fsnotify/fsnotify"
|
||||
)
|
||||
|
||||
var watcher *fsnotify.Watcher
|
||||
var ConfPath = "./gamedata/config/"
|
||||
var (
|
||||
ConfPath = "./gamedata/config/"
|
||||
G_AllConfigs = map[string]interface{}{}
|
||||
G_AllConfigsJsonData = map[string]*ConfigData{}
|
||||
configMutex sync.RWMutex // 全局配置锁
|
||||
)
|
||||
|
||||
type ConfigData struct {
|
||||
data map[string]interface{}
|
||||
mu sync.RWMutex
|
||||
}
|
||||
|
||||
func (cd *ConfigData) GetData() map[string]interface{} {
|
||||
cd.mu.RLock()
|
||||
defer cd.mu.RUnlock()
|
||||
return cd.data
|
||||
}
|
||||
|
||||
func (cd *ConfigData) SetData(data map[string]interface{}) {
|
||||
cd.mu.Lock()
|
||||
defer cd.mu.Unlock()
|
||||
cd.data = data
|
||||
}
|
||||
|
||||
func init() {
|
||||
if conf.Server.GameConfPath != "" {
|
||||
ConfPath = conf.Server.GameConfPath
|
||||
}
|
||||
watcher, _ = fsnotify.NewWatcher()
|
||||
watcher.Add(ConfPath + "reload")
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case event, ok := <-watcher.Events:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
if event.Op&fsnotify.Write == fsnotify.Write || event.Op&fsnotify.Create == fsnotify.Create || event.Op&fsnotify.Rename == fsnotify.Rename {
|
||||
for k := range G_AllConfigsJsonData {
|
||||
InitCfg(k)
|
||||
log.Debug("配置已重新加载:%s", k)
|
||||
}
|
||||
|
||||
}
|
||||
case err, ok := <-watcher.Errors:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
fmt.Println("错误:", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
}
|
||||
|
||||
func Reload() {
|
||||
configMutex.RLock()
|
||||
keys := make([]string, 0, len(G_AllConfigsJsonData))
|
||||
for k := range G_AllConfigsJsonData {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
configMutex.RUnlock()
|
||||
|
||||
for _, k := range keys {
|
||||
InitCfg(k)
|
||||
log.Debug("配置已重新加载:%s", k)
|
||||
}
|
||||
}
|
||||
|
||||
func readRfNew(st interface{}, ralativePath string) *recordfile.RecordFile {
|
||||
rf, err := recordfile.New(st)
|
||||
if err != nil {
|
||||
log.Fatal("%v", err)
|
||||
}
|
||||
fn := ralativePath + ".txt"
|
||||
err = rf.Read(ConfPath + fn)
|
||||
if err != nil {
|
||||
log.Fatal("%v: %v", fn, err)
|
||||
}
|
||||
|
||||
return rf
|
||||
}
|
||||
|
||||
func InitCfg(cfgname string) {
|
||||
// 读取文件内容
|
||||
filePath := ConfPath + cfgname + ".json"
|
||||
@ -101,49 +87,54 @@ func InitCfg(cfgname string) {
|
||||
log.Debug("config name:%s,反序列化失败:%v", cfgname, err)
|
||||
return
|
||||
}
|
||||
// 直接使用data,无需多余拷贝
|
||||
rf := new(ConfigData)
|
||||
convertedData := make(map[string]interface{})
|
||||
for k, v := range data {
|
||||
convertedData[k] = v
|
||||
}
|
||||
rf.SetData(convertedData)
|
||||
rf.SetData(data)
|
||||
|
||||
// 使用锁保护全局map
|
||||
configMutex.Lock()
|
||||
G_AllConfigsJsonData[cfgname] = rf
|
||||
configMutex.Unlock()
|
||||
}
|
||||
|
||||
// 提取公共的 map 检查逻辑
|
||||
func getMapValue(a interface{}, key string) (interface{}, bool) {
|
||||
if a == nil {
|
||||
return nil, false
|
||||
}
|
||||
if m, ok := a.(map[string]interface{}); ok {
|
||||
if v, ok := m[key]; ok {
|
||||
return v, true
|
||||
}
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func GetValue(a interface{}, key string) interface{} {
|
||||
if a == nil {
|
||||
return nil
|
||||
}
|
||||
if v, ok := a.(map[string]interface{})[key]; ok {
|
||||
return v
|
||||
}
|
||||
return nil
|
||||
v, _ := getMapValue(a, key)
|
||||
return v
|
||||
}
|
||||
|
||||
func GetIntValue(a interface{}, key string) int {
|
||||
if a == nil {
|
||||
v, ok := getMapValue(a, key)
|
||||
if !ok || v == nil {
|
||||
return 0
|
||||
}
|
||||
if v, ok := a.(map[string]interface{})[key]; ok {
|
||||
if v == nil {
|
||||
return 0
|
||||
}
|
||||
return Int(v)
|
||||
}
|
||||
return 0
|
||||
return Int(v)
|
||||
}
|
||||
|
||||
func GetIntSliceValue(a interface{}, key string) []int {
|
||||
if a == nil {
|
||||
v, ok := getMapValue(a, key)
|
||||
if !ok || v == nil {
|
||||
return nil
|
||||
}
|
||||
if v, ok := a.(map[string]interface{})[key]; ok {
|
||||
if v == nil {
|
||||
return nil
|
||||
}
|
||||
var r []int
|
||||
for _, v := range v.([]interface{}) {
|
||||
r = append(r, int(v.(float64)))
|
||||
// 安全的类型断言,避免panic
|
||||
if slice, ok := v.([]interface{}); ok {
|
||||
r := make([]int, 0, len(slice)) // 预分配容量
|
||||
for _, item := range slice {
|
||||
if num, ok := item.(float64); ok {
|
||||
r = append(r, int(num))
|
||||
}
|
||||
}
|
||||
return r
|
||||
}
|
||||
@ -151,68 +142,79 @@ func GetIntSliceValue(a interface{}, key string) []int {
|
||||
}
|
||||
|
||||
func GetFloatValue(a interface{}, key string) float64 {
|
||||
if a == nil {
|
||||
v, ok := getMapValue(a, key)
|
||||
if !ok || v == nil {
|
||||
return 0
|
||||
}
|
||||
if v, ok := a.(map[string]interface{})[key]; ok {
|
||||
if v == nil {
|
||||
return 0
|
||||
}
|
||||
return v.(float64)
|
||||
// 安全的类型断言
|
||||
if f, ok := v.(float64); ok {
|
||||
return f
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetItemList(a interface{}, key string) []*item.Item {
|
||||
if a == nil {
|
||||
v, ok := getMapValue(a, key)
|
||||
if !ok || v == nil {
|
||||
return nil
|
||||
}
|
||||
if v, ok := a.(map[string]interface{})[key]; ok {
|
||||
if v == nil {
|
||||
return nil
|
||||
}
|
||||
return item.ParseItem(v)
|
||||
}
|
||||
return nil
|
||||
return item.ParseItem(v)
|
||||
}
|
||||
|
||||
func GetStringValue(a interface{}, key string) string {
|
||||
if a == nil {
|
||||
v, ok := getMapValue(a, key)
|
||||
if !ok || v == nil {
|
||||
return ""
|
||||
}
|
||||
if v, ok := a.(map[string]interface{})[key]; ok {
|
||||
if v == nil {
|
||||
return ""
|
||||
}
|
||||
return String(v)
|
||||
}
|
||||
return ""
|
||||
return String(v)
|
||||
}
|
||||
|
||||
func GetData(cfgname string) (map[string]interface{}, error) {
|
||||
if v, ok := G_AllConfigsJsonData[cfgname]; ok {
|
||||
configMutex.RLock()
|
||||
v, ok := G_AllConfigsJsonData[cfgname]
|
||||
configMutex.RUnlock()
|
||||
|
||||
if ok {
|
||||
return v.GetData(), nil
|
||||
}
|
||||
return make(map[string]interface{}), errors.New("not found")
|
||||
return nil, errors.New("config not found: " + cfgname)
|
||||
}
|
||||
|
||||
func GetDataByKey(cfgname, key string) (map[string]interface{}, error) {
|
||||
if v, ok := G_AllConfigsJsonData[cfgname]; ok {
|
||||
if v, ok := v.GetData()[key]; ok {
|
||||
return v.(map[string]interface{}), nil
|
||||
configMutex.RLock()
|
||||
v, ok := G_AllConfigsJsonData[cfgname]
|
||||
configMutex.RUnlock()
|
||||
|
||||
if ok {
|
||||
data := v.GetData()
|
||||
if val, ok := data[key]; ok {
|
||||
// 安全的类型断言
|
||||
if result, ok := val.(map[string]interface{}); ok {
|
||||
return result, nil
|
||||
}
|
||||
return nil, errors.New("invalid data type for key: " + key)
|
||||
}
|
||||
}
|
||||
return make(map[string]interface{}), errors.New("not found")
|
||||
return nil, errors.New("config or key not found")
|
||||
}
|
||||
|
||||
func GetDataByIntKey(cfgname string, key int) (map[string]interface{}, error) {
|
||||
keyStr := strconv.Itoa(key)
|
||||
if v, ok := G_AllConfigsJsonData[cfgname]; ok {
|
||||
if v, ok := v.GetData()[keyStr]; ok {
|
||||
return v.(map[string]interface{}), nil
|
||||
configMutex.RLock()
|
||||
v, ok := G_AllConfigsJsonData[cfgname]
|
||||
configMutex.RUnlock()
|
||||
|
||||
if ok {
|
||||
data := v.GetData()
|
||||
if val, ok := data[keyStr]; ok {
|
||||
// 安全的类型断言
|
||||
if result, ok := val.(map[string]interface{}); ok {
|
||||
return result, nil
|
||||
}
|
||||
return nil, errors.New("invalid data type for key: " + keyStr)
|
||||
}
|
||||
}
|
||||
return make(map[string]interface{}), errors.New("not found")
|
||||
return nil, errors.New("config or key not found")
|
||||
}
|
||||
|
||||
func Int(a interface{}) int {
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
package gamedata
|
||||
|
||||
func ParseInt(value interface{}) int {
|
||||
if value == nil {
|
||||
return 0
|
||||
}
|
||||
return int(value.(float64))
|
||||
}
|
||||
|
||||
func ParseString(value interface{}) string {
|
||||
if value == nil {
|
||||
return ""
|
||||
}
|
||||
return value.(string)
|
||||
}
|
||||
@ -15,7 +15,6 @@ require (
|
||||
github.com/jmoiron/sqlx v1.4.0
|
||||
github.com/redis/go-redis/v9 v9.6.1
|
||||
github.com/robfig/cron/v3 v3.0.1
|
||||
github.com/segmentio/kafka-go v0.4.47
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible
|
||||
google.golang.org/protobuf v1.36.2
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
|
||||
@ -35,10 +34,8 @@ require (
|
||||
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/compress v1.15.9 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/pierrec/lz4/v4 v4.1.15 // indirect
|
||||
github.com/stretchr/testify v1.9.0 // indirect
|
||||
github.com/tjfoc/gmsm v1.4.1 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.14 // indirect
|
||||
@ -49,17 +46,13 @@ require (
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/fsnotify/fsnotify v1.8.0 // direct
|
||||
golang.org/x/sys v0.29.0 // indirect
|
||||
)
|
||||
require golang.org/x/sys v0.29.0 // indirect
|
||||
|
||||
require (
|
||||
filippo.io/edwards25519 v1.1.0 // indirect
|
||||
github.com/ThinkingDataAnalytics/go-sdk/v2 v2.0.3 //
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/tuyou/galog v0.0.0
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
|
||||
@ -2,8 +2,6 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
|
||||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/ThinkingDataAnalytics/go-sdk/v2 v2.0.3 h1:+2h2cOKzZgP8DmtuvkmUhOs5WfyseFTc0KLNR3EU2eA=
|
||||
github.com/ThinkingDataAnalytics/go-sdk/v2 v2.0.3/go.mod h1:uhiHUKG8fMwf4Ou3186EBBagFrBdAsAA5GHiLMWQN2A=
|
||||
github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6 h1:eIf+iGJxdU4U9ypaUfbtOWCsZSbTb8AUHvyPrxu6mAA=
|
||||
github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6/go.mod h1:4EUIoxs/do24zMOGGqYVWgw0s9NtiylnJglOeEB5UJo=
|
||||
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc=
|
||||
@ -95,8 +93,6 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
|
||||
github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
||||
@ -119,7 +115,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
@ -132,8 +127,6 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
|
||||
github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
|
||||
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
|
||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
@ -151,8 +144,6 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0=
|
||||
github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
@ -160,8 +151,6 @@ github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0
|
||||
github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA=
|
||||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||
github.com/segmentio/kafka-go v0.4.47 h1:IqziR4pA3vrZq7YdRxaT3w1/5fvIH5qpCwstUanQQB0=
|
||||
github.com/segmentio/kafka-go v0.4.47/go.mod h1:HjF6XbOKh0Pjlkr5GVZxt6CsjjwnmhVOfURM5KMd8qg=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
@ -169,11 +158,8 @@ github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYl
|
||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
|
||||
@ -183,12 +169,6 @@ github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZ
|
||||
github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY=
|
||||
github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY=
|
||||
github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE=
|
||||
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
|
||||
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
||||
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
|
||||
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
|
||||
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
|
||||
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
@ -290,15 +270,12 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI=
|
||||
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
@ -345,7 +322,6 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
|
||||
@ -26,9 +26,9 @@ func main() {
|
||||
lconf.ListenAddr = conf.Server.ListenAddr
|
||||
lconf.CenterAddr = conf.Server.CenterAddr
|
||||
lconf.PendingWriteNum = conf.PendingWriteNum
|
||||
// 当内存>2G时开始GC
|
||||
// 当内存>256M时开始GC
|
||||
debug.SetGCPercent(50)
|
||||
debug.SetMemoryLimit(2 << 30)
|
||||
debug.SetMemoryLimit(512 << 20)
|
||||
// 启动 pprof(仅绑定本地)
|
||||
go func() {
|
||||
// 如果需要绑定所有接口改为 ":6060"
|
||||
|
||||
@ -1,23 +0,0 @@
|
||||
package kafkaMiddleware
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/segmentio/kafka-go"
|
||||
)
|
||||
|
||||
var KafkaMod *kafka.Writer
|
||||
|
||||
func SendMsg(key, value []byte) error {
|
||||
if KafkaMod == nil {
|
||||
return nil
|
||||
}
|
||||
err := KafkaMod.WriteMessages(context.Background(), kafka.Message{
|
||||
Key: key,
|
||||
Value: value,
|
||||
})
|
||||
if err != nil {
|
||||
//log.Debug("WriteMessages err: %v", err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
@ -126,6 +126,9 @@ CREATE TABLE IF NOT EXISTS `system_mail_info` (
|
||||
`title_ptbr` varchar(128) DEFAULT "" COMMENT '葡萄牙邮件标题',
|
||||
`subTitle_ptbr` varchar(128) DEFAULT "" COMMENT '葡萄牙邮件子标题',
|
||||
`content_ptbr` varchar(2048) DEFAULT "" COMMENT '葡萄牙邮件内容',
|
||||
`title_es_latam` varchar(128) DEFAULT "" COMMENT '西班牙邮件标题',
|
||||
`subTitle_es_latam` varchar(128) DEFAULT "" COMMENT '西班牙邮件子标题',
|
||||
`content_es_latam` varchar(2048) DEFAULT "" COMMENT '西班牙邮件内容',
|
||||
`items` varchar(2048) DEFAULT "{}" COMMENT '邮件附件',
|
||||
`start_time` int unsigned NOT NULL DEFAULT '0' COMMENT '开始时间',
|
||||
`register_time` int unsigned NOT NULL DEFAULT '0' COMMENT '注册时间',
|
||||
|
||||
BIN
src/server/test/__debug_bin.exe2315391482
Normal file
BIN
src/server/test/__debug_bin.exe2315391482
Normal file
Binary file not shown.
13
src/server/test/charge_test.go
Normal file
13
src/server/test/charge_test.go
Normal file
@ -0,0 +1,13 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"server/game"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSpecialCharge(t *testing.T) {
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("3625212")
|
||||
ChargeMod := p1.GetChargeMod()
|
||||
ChargeMod.ZeroUpdate(nil)
|
||||
}
|
||||
@ -3,7 +3,10 @@ package test
|
||||
import (
|
||||
"fmt"
|
||||
activityCfg "server/conf/activity"
|
||||
baseCfg "server/conf/base"
|
||||
friendCfg "server/conf/friend"
|
||||
languageCfg "server/conf/language"
|
||||
playroomCfg "server/conf/playroom"
|
||||
userCfg "server/conf/user"
|
||||
GoUtil "server/game_util"
|
||||
"server/msg"
|
||||
@ -24,3 +27,18 @@ func TestGetActivityRecycleMail(t *testing.T) {
|
||||
en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, mailTitle)
|
||||
fmt.Println("en:", en)
|
||||
}
|
||||
|
||||
func TestGetFriendSponsorNum(t *testing.T) {
|
||||
r := friendCfg.GetFriendSponsorNum()
|
||||
fmt.Println("r:", r)
|
||||
}
|
||||
|
||||
func TestGetPlayroomTaskDailyNum1(t *testing.T) {
|
||||
r := playroomCfg.GetPlayroomTaskDailyNum1()
|
||||
fmt.Println("r:", r)
|
||||
}
|
||||
|
||||
func TestGetEnergyByADNum(t *testing.T) {
|
||||
r := baseCfg.GetEnergyByADNum()
|
||||
fmt.Println("r:", r)
|
||||
}
|
||||
|
||||
@ -78,3 +78,21 @@ func TestFixUserData(t *testing.T) {
|
||||
}
|
||||
log.Debug("All accounts fixed")
|
||||
}
|
||||
|
||||
func TestRandInt(t *testing.T) {
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("3625212")
|
||||
BaseMod := p1.GetBaseMod()
|
||||
ChargeMod := p1.GetChargeMod()
|
||||
EndlessMod := p1.GetEndlessMod()
|
||||
EndlessMod.ZeroUpdate(ChargeMod.GetMaxCharge(), BaseMod.GetLevel())
|
||||
}
|
||||
|
||||
func TestEndless(t *testing.T) {
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("3625212")
|
||||
BaseMod := p1.GetBaseMod()
|
||||
ChargeMod := p1.GetChargeMod()
|
||||
EndlessMod := p1.GetEndlessMod()
|
||||
EndlessMod.ZeroUpdate(ChargeMod.GetMaxCharge(), BaseMod.GetLevel())
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ func TestOrderStart(t *testing.T) {
|
||||
|
||||
func TestOrderFinish(t *testing.T) {
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("bbb004")
|
||||
p1.InitPlayer("3659896")
|
||||
game.G_GameLogicPtr.SetPlayer(p1)
|
||||
ChessMod := p1.GetChessMod()
|
||||
err := ChessMod.FinishOrder([]int{1, 2, 3})
|
||||
@ -34,9 +34,9 @@ func TestOrderFinish(t *testing.T) {
|
||||
|
||||
func TestChestRain(t *testing.T) {
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("GSTTEST011")
|
||||
p1.InitPlayer("3625212")
|
||||
ChessMod := p1.GetChessMod()
|
||||
LimitEventMod := p1.GetLimitEventMod()
|
||||
f := LimitEventMod.GetChestReward([]int{928}, ChessMod.GetStarEmitList())
|
||||
f := LimitEventMod.GetMeteorReward([]int{226}, ChessMod.GetStarEmitList())
|
||||
fmt.Printf("chest rain reward:%v", f)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user