leitao666 пре 1 година
родитељ
комит
141270ed92

+ 29 - 0
RO_Server_Trunk-branch_0.1.39/roserver/baseserver/model/base_config.go

@@ -149,6 +149,7 @@ func BaseConfigInit(sConfig service.ConfigServerNode) {
 		convertIdolSeasonCfg()            //粉丝馈赠
 		convertWishCfg()                  //许愿宝箱
 		ConvertCombinedServer()           //合服
+		convertCdkRewardCfg()             //cdk
 	}
 
 	util.InfoF("config load success!!!")
@@ -8127,3 +8128,31 @@ func convertBTFirstAnd100RechargeCfg() {
 		})
 	}
 }
+
+type CdkRewardData struct {
+	Id         int32
+	RewardList []*serverproto.KeyValueType
+	Start      time.Time
+	End        time.Time
+}
+
+var ConvertCdkRewardMap map[string]*CdkRewardData //key 是code码
+
+func convertCdkRewardCfg() {
+	if ConvertCdkRewardMap == nil {
+		ConvertCdkRewardMap = make(map[string]*CdkRewardData, 0)
+	}
+	for _, val := range serverproto.CdkCfgLoader {
+		convertData := &CdkRewardData{
+			Id:         val.Id,
+			RewardList: []*serverproto.KeyValueType{},
+		}
+		loc := util.GetLoc()
+		StartTime, _ := time.ParseInLocation(util.DATE_FORMAT, val.StartTime, loc)
+		EndTime, _ := time.ParseInLocation(util.DATE_FORMAT, val.EndTime, loc)
+		convertData.Start = StartTime
+		convertData.End = EndTime
+		convertData.RewardList = Str2ResSliceList(val.Reward)
+		ConvertCdkRewardMap[val.Cdk] = convertData
+	}
+}

+ 53 - 0
RO_Server_Trunk-branch_0.1.39/roserver/game/model/role.go

@@ -11,6 +11,7 @@ import (
 	"rocommon/util"
 	"roserver/baseserver/model"
 	"roserver/serverproto"
+	"strconv"
 	"strings"
 	"time"
 	"unicode/utf8"
@@ -305,6 +306,7 @@ type RoleLogicOuter interface {
 	DaoChang100SetTips(tipDesc string)
 
 	OnAntiCheatReq(cheatType int32)
+	CodeRewardReq(code string)
 	GiftReward(ackMsg *serverproto.SCGiftRewardAck)
 
 	//问卷奖励获取
@@ -4001,6 +4003,57 @@ func (this *Role) OnAntiCheatReq(cheatType int32) {
 	}
 }
 
+const RoleCdkInfo = "cdk_info_"
+
+func (this *Role) CodeRewardReq(code string) {
+	res := &serverproto.SCGiftRewardAck{
+		Uuid: this.GetUUid(),
+	}
+	if _, ok := model.ConvertCdkRewardMap[code]; !ok {
+		res.Error = int32(serverproto.ErrorCode_ERROR_GIFT_CODE_NOT_FOUND)
+		this.ReplayGate(res, true)
+		return
+	}
+	v := model.ConvertCdkRewardMap[code]
+	if v == nil {
+		util.ErrorF("uid:%v cdk get config is nil", this.GetUUid())
+		res.Error = int32(serverproto.ErrorCode_ERROR_FAIL)
+		this.ReplayGate(res, true)
+		return
+	}
+	now := time.Now()
+	if now.Before(v.Start) || now.After(v.End) {
+		res.Error = int32(serverproto.ErrorCode_ERROR_GIFT_CODE_OUTDATE)
+		this.ReplayGate(res, true)
+		return
+	}
+	key := RoleCdkInfo + strconv.FormatUint(this.GetUUid(), 10)
+	field := strconv.FormatInt(int64(v.Id), 10)
+	b, err := service.GetRedis().HExists(key, field).Result()
+	if err != nil {
+		util.ErrorF("uid:%v cdk get redis err:%v", this.GetUUid(), err)
+		res.Error = int32(serverproto.ErrorCode_ERROR_FAIL)
+		this.ReplayGate(res, true)
+		return
+	}
+	if b {
+		res.Error = int32(serverproto.ErrorCode_ERROR_GIFT_CODE_USED)
+		this.ReplayGate(res, true)
+		return
+	}
+	res.RewardList = v.RewardList
+	_, er := service.GetRedis().HSet(key, field, "11").Result()
+	if er != nil {
+		util.ErrorF("uid:%v cdk set redis err:%v", this.GetUUid(), err)
+		res.Error = int32(serverproto.ErrorCode_ERROR_FAIL)
+		this.ReplayGate(res, true)
+		return
+	}
+	this.GiftReward(res)
+	util.InfoF("uid:%v cdk get reward:%v", this.GetUUid(), res.RewardList)
+	this.ReplayGate(res, true)
+}
+
 func (this *Role) GiftReward(ackMsg *serverproto.SCGiftRewardAck) {
 	if ackMsg == nil {
 		return

+ 2 - 1
RO_Server_Trunk-branch_0.1.39/roserver/game/msg/role_msg.go

@@ -3822,7 +3822,8 @@ func init() {
 
 		util.DebugF("uid=%v receive CSGiftRewardReq ms=%v", role.GetUUid(), msg)
 		msg.Uuid = role.GetUUid()
-		role.(*model2.Role).SendSocial(msg)
+		role.(*model2.Role).CodeRewardReq(msg.GiftCode)
+		//role.(*model2.Role).SendSocial(msg)
 	})
 	//from social
 	serverproto.Handle_GAME_SCGiftRewardAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {

+ 24 - 0
RO_Server_Trunk-branch_0.1.39/roserver/serverproto/config_csv.go

@@ -286,6 +286,7 @@ func configNameListInit() {
 	CFGNameList["WishCfg"] = WishCfgLoad
 	CFGNameList["WorldBossCfg"] = WorldBossCfgLoad
 	CFGNameList["WorldBossChangePlayCfg"] = WorldBossChangePlayCfgLoad
+	CFGNameList["CdkCfg"] = CdkCfgLoad
 }
 
 var XmlFileList = []string{
@@ -442,6 +443,7 @@ func ConfigInit(path string) {
 	ShieldedWordCfgLoad(path)
 	ShopCfgLoad(path)
 	HardLevelCfgLoad(path)
+	CdkCfgLoad(path)
 	ShopTypeCfgLoad(path)
 	SignInCfgLoad(path)
 	SkillCfgLoad(path)
@@ -3853,3 +3855,25 @@ func YuanHangTrialRankCfgLoad(path string) {
 		YuanHangTrialRankCfgLoader[row.Id] = row
 	}
 }
+
+var CdkCfgLoader map[int32]*CdkCfg
+
+type CdkCfg struct {
+	Id   int32  `csv:"Id"`   //禮包Id
+	Name string `csv:"Name"` //cdk名字
+	//Type      int32    `csv:"Type"`      //类型 1 全服 ,2 个人
+	Cdk    string   `csv:"Cdk"`    //兑换码
+	Reward []string `csv:"Reward"` //道具
+	//UserId    []string `csv:"UserId"`    //个人uid
+	StartTime string `csv:"StartTime"` //开始時间
+	EndTime   string `csv:"EndTime"`   //结束時间
+}
+
+func CdkCfgLoad(path string) {
+	cfg := []*CdkCfg{}
+	CdkCfgLoader = map[int32]*CdkCfg{}
+	loadCsvCfg(path+"CdkCfg.csv", &cfg)
+	for _, row := range cfg {
+		CdkCfgLoader[row.Id] = row
+	}
+}