周卡礼包

This commit is contained in:
by 2024-04-25 11:39:24 +08:00
parent 5be9e98ae0
commit cc56a160af
19 changed files with 3506 additions and 2516 deletions

View File

@ -313,6 +313,8 @@ const (
GainWay_TaskReward = 62 //62.任务奖励
GainWay_Interact = 63 //63.房间内互动效果
GainWay_Collect = 64 //64.集卡活动
GainWay_WeekCardBuy = 65 //65.周卡购买
GainWay_WeekCardAward = 66 //66.周卡每日奖励
)
// 后台选择 金币变化类型 的充值 类型id号起始

3
data/DB_GiftCard.dat Normal file
View File

@ -0,0 +1,3 @@
6‘š; 7日礼å“<C3A5>å<EFBFBD>¡" ¡<>À–±"ц
*¡<>À„=08

18
data/DB_GiftCard.json Normal file
View File

@ -0,0 +1,18 @@
{
"Arr": [
{
"Id": 1,
"ShopID": 970001,
"Name": "7日礼品卡",
"Rewards": {
"100001": 5000000,
"50001": 10
},
"DayRewards": {
"100001": 1000000
},
"Time": 7,
"Equity": 1
}
]
}

View File

@ -1494,3 +1494,19 @@ func (this *Player) UnPlayerPowerListEx(powerId int32) {
}
return
}
// 获取周卡权益
// typeId : 1-破产救济金领取翻倍 2-排位赛积分提升5%
func (this *Player) GetWeekCardPrivilege(typeId int32) bool {
logger.Logger.Trace("玩家请求获取周卡权益!")
now := time.Now().Unix()
for id, endTime := range this.WeekCardTime {
if endTime > now {
data := srvdata.PBDB_GiftCardMgr.GetData(id)
if data.Equity == typeId {
return true
}
}
}
return false
}

View File

@ -1657,6 +1657,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
var sceneTypeScore int64 // 场次额外积分
var vipScore int64 // vip加成
var roleScore int64 // 角色加成
var weekCardScore int64 // 周卡加成
var roleAdd int32
var otherScore int64 // 额外总加分
oldRankScore := losePlayer.GetRankScore(sceneEx.GetDBGameFree().GetRankType())
@ -1693,8 +1694,12 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
// 角色加成分
_, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&losePlayer.PlayerData, common.RoleAddRankScore)
roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0))
//周卡加成
if losePlayer.GetWeekCardPrivilege(2) {
weekCardScore = int64(math.Ceil(float64(rankScore) * float64(5) / 100.0))
}
}
otherScore = sceneTypeScore + vipScore + roleScore
otherScore = sceneTypeScore + vipScore + roleScore + weekCardScore
losePlayer.AddRankScore(sceneEx.GetDBGameFree().GetRankType(), rankScore+otherScore) // 炸弹分一起算
}
losePlayer.winCoin -= gainScore
@ -1730,6 +1735,13 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
Addition: roleAdd,
Score: roleScore,
})
// 周卡加成
billData.AddItems = append(billData.AddItems, &tienlen.AddItem{
ItemType: 6,
ItemId: 0,
Addition: 5,
Score: weekCardScore,
})
}
isWin := int32(0)
billCoin := losePlayer.bombScore - gainScore
@ -1807,6 +1819,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
var rankScore int64 // 排位积分
var sceneTypeScore int64 // 场次额外积分
var vipScore int64 // vip加成
var weekCardScore int64 // 周卡加成
var otherScore int64 // 额外总加分
oldRankScore := lastWinPlayer.GetRankScore(sceneEx.GetDBGameFree().GetRankType())
lastWinScore := rule.GetLoseScore(lastWinPlayer.cards, true)
@ -1841,9 +1854,14 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
vipScore = int64(math.Ceil(float64(rankScore) * float64(lastWinPlayer.VipExtra) / 100.0))
// 角色加成分
_, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&lastWinPlayer.PlayerData, common.RoleAddRankScore)
//周卡加成
if lastWinPlayer.GetWeekCardPrivilege(2) {
weekCardScore = int64(math.Ceil(float64(rankScore) * float64(5) / 100.0))
}
roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0))
}
otherScore = sceneTypeScore + vipScore + roleScore
otherScore = sceneTypeScore + vipScore + roleScore + weekCardScore
lastWinPlayer.AddRankScore(sceneEx.GetDBGameFree().GetRankType(), rankScore+otherScore) // 炸弹分一起算
}
lastWinPlayer.winCoin -= astWinGainScore
@ -1879,6 +1897,13 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
Addition: roleAdd,
Score: roleScore,
})
// 周卡加成
billData.AddItems = append(billData.AddItems, &tienlen.AddItem{
ItemType: 6,
ItemId: 0,
Addition: 5,
Score: weekCardScore,
})
}
isWin := int32(0)
billCoin := lastWinPlayer.bombScore - astWinGainScore
@ -1934,6 +1959,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
var rankScore int64 // 排位积分
var sceneTypeScore int64 // 场次额外积分
var vipScore int64 // vip加成
var weekCardScore int64 // 周卡加成
var otherScore int64 // 额外总加分
oldRankScore := playerEx.GetRankScore(sceneEx.GetDBGameFree().GetRankType())
rankScore = loseRankScore
@ -1960,8 +1986,12 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
// 角色加成分
_, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore)
roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0))
//周卡加成
if playerEx.GetWeekCardPrivilege(2) {
weekCardScore = int64(math.Ceil(float64(rankScore) * float64(5) / 100.0))
}
}
otherScore = sceneTypeScore + vipScore + roleScore
otherScore = sceneTypeScore + vipScore + roleScore + weekCardScore
playerEx.AddRankScore(sceneEx.GetDBGameFree().GetRankType(), rankScore+otherScore) // 炸弹分一起算
}
playerEx.winCoin += gainScore
@ -1997,6 +2027,13 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
Addition: roleAdd,
Score: roleScore,
})
// 周卡加成
billData.AddItems = append(billData.AddItems, &tienlen.AddItem{
ItemType: 6,
ItemId: 0,
Addition: 5,
Score: weekCardScore,
})
}
isWin := int32(0)
billCoin := playerEx.bombScore + gainScore
@ -2051,6 +2088,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
var rankScore int64 // 排位积分
var sceneTypeScore int64 // 场次额外积分
var vipScore int64 // vip加成
var weekCardScore int64 // 周卡加成
var otherScore int64 // 额外总加分
oldRankScore := playerEx.GetRankScore(sceneEx.GetDBGameFree().GetRankType())
rankScore = lastWinPlayerRankScore
@ -2072,8 +2110,12 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
// 角色加成分
_, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore)
roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0))
//周卡加成
if playerEx.GetWeekCardPrivilege(2) {
weekCardScore = int64(math.Ceil(float64(rankScore) * float64(5) / 100.0))
}
}
otherScore = sceneTypeScore + vipScore + roleScore
otherScore = sceneTypeScore + vipScore + roleScore + weekCardScore
playerEx.AddRankScore(sceneEx.GetDBGameFree().GetRankType(), rankScore+otherScore) // 炸弹分一起算
}
playerEx.winCoin += gainScore
@ -2109,6 +2151,13 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
Addition: roleAdd,
Score: roleScore,
})
// 周卡加成
billData.AddItems = append(billData.AddItems, &tienlen.AddItem{
ItemType: 6,
ItemId: 0,
Addition: 5,
Score: weekCardScore,
})
}
isWin := int32(0)
billCoin := playerEx.bombScore + gainScore
@ -2164,6 +2213,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
var rankScore int64 // 排位积分
var sceneTypeScore int64 // 场次额外积分
var vipScore int64 // vip加成
var weekCardScore int64 // 周卡加成
var roleScore int64 // 角色加成
var roleAdd int32
var otherScore int64 // 额外总加分
@ -2230,8 +2280,12 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
// 角色加成分
_, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore)
roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0))
//周卡加成
if playerEx.GetWeekCardPrivilege(2) {
weekCardScore = int64(math.Ceil(float64(rankScore) * float64(5) / 100.0))
}
}
otherScore = sceneTypeScore + vipScore + roleScore
otherScore = sceneTypeScore + vipScore + roleScore + weekCardScore
playerEx.AddRankScore(sceneEx.GetDBGameFree().GetRankType(), rankScore+otherScore) // 炸弹分一起算
}
playerEx.winCoin -= gainScore
@ -2268,6 +2322,13 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
Addition: roleAdd,
Score: roleScore,
})
// 周卡加成
billData.AddItems = append(billData.AddItems, &tienlen.AddItem{
ItemType: 6,
ItemId: 0,
Addition: 5,
Score: weekCardScore,
})
}
isWin := int32(0)
@ -2349,6 +2410,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
var sceneTypeScore int64 // 场次额外积分
var vipScore int64 // vip加成
var roleScore int64 // 角色加成
var weekCardScore int64 // 周卡加成
var roleAdd int32
var otherScore int64 // 额外总加分
playerEx := sceneEx.players[winSnid]
@ -2371,7 +2433,11 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
// 角色加成分
_, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore)
roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0))
otherScore = sceneTypeScore + vipScore + roleScore
//周卡加成
if playerEx.GetWeekCardPrivilege(2) {
weekCardScore = int64(math.Ceil(float64(rankScore) * float64(5) / 100.0))
}
otherScore = sceneTypeScore + vipScore + roleScore + weekCardScore
playerEx.AddRankScore(sceneEx.GetDBGameFree().GetRankType(), rankScore+otherScore)
}
playerEx.winCoin += gainScore
@ -2406,6 +2472,13 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
Addition: roleAdd,
Score: roleScore,
})
// 周卡加成
billData.AddItems = append(billData.AddItems, &tienlen.AddItem{
ItemType: 6,
ItemId: 0,
Addition: 5,
Score: weekCardScore,
})
isWin := int32(0)
billCoin := playerEx.bombScore + gainScore

View File

@ -453,6 +453,8 @@ type PlayerData struct {
InviteSnId int32 // 邀请人
InviteScore int64 // 邀请积分
OtherCode string // 绑定的邀请码
WeekCardTime map[int32]int64 // 周卡结束时间 key:类型 value结束时间
WeekCardAward map[int32]bool //周卡奖励领取状态false-未领取true已领取
}
// 七日签到数据
@ -462,6 +464,7 @@ type NewSignData struct {
AddupIndex []int32 //领取累计奖励
TurnplateIdx []int32 //领取转盘下标
VideoTicket int64 // 领取视频奖励时间戳
}
type TaskData struct {
@ -768,8 +771,10 @@ func NewPlayerData(acc string, name string, id int32, channel, platform, promote
ShopLastLookTime: make(map[int32]int64),
IsFoolPlayer: make(map[string]bool),
//测试数据
PowerList: []int32{1}, //默认炮台
UnMaxPower: 10, //初始化炮倍最小倍数
PowerList: []int32{1}, //默认炮台
UnMaxPower: 10, //初始化炮倍最小倍数
WeekCardTime: make(map[int32]int64),
WeekCardAward: make(map[int32]bool),
}
if tel != "" {

File diff suppressed because it is too large Load Diff

View File

@ -203,6 +203,8 @@ enum PlayerPacketID {
PACKET_SC_PhoneLotteryCount = 2820;//
PACKET_CSADV = 2821; // 广
PACKET_SCADV = 2822; // 广
PACKET_SCGetWeekCardAwary = 2823;//
}
//
@ -310,6 +312,14 @@ message PlayerData {
int32 VipShopRefreshCount =45; //vip当前已使用免费刷新次数
string Signature = 46; //
int32 Age = 47; //
repeated WeekInfo WeekCard = 48;//
}
//
message WeekInfo{
int32 Id =1;
int64 WeekCardTime =2; //
bool weekCardAward = 3;//
}
//线 LogicId
message MiniGameInfo{
@ -1151,3 +1161,10 @@ message CSADV {
message SCADV {
repeated int32 Param = 1; // 0广
}
//
//PACKET_SCGetWeekCardAwary
message SCGetWeekCardAwary{
int32 id = 1;
repeated PayItem Items =2;
bool weekCardAward = 3;
}

File diff suppressed because it is too large Load Diff

View File

@ -1055,6 +1055,28 @@ message DB_GiftBoxArray {
repeated DB_GiftBox Arr = 1;
}
message DB_GiftCard {
int32 Id = 1;
int32 ShopID = 2;
string Name = 3;
map<int64, int64> Rewards = 4;
map<int64, int64> DayRewards = 5;
int32 Time = 6;
int32 Equity = 7;
}
message DB_GiftCardArray {
repeated DB_GiftCard Arr = 1;
}
message DB_IceAgeElementRate {
int32 Id = 1;

View File

@ -1015,7 +1015,7 @@ type AddItem struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ItemType int32 `protobuf:"varint,1,opt,name=ItemType,proto3" json:"ItemType,omitempty"` // 类型; 1场次加成 2道具 3宠物 4角色 5vip加成
ItemType int32 `protobuf:"varint,1,opt,name=ItemType,proto3" json:"ItemType,omitempty"` // 类型; 1场次加成 2道具 3宠物 4角色 5vip加成 6周卡加成
ItemId int32 `protobuf:"varint,2,opt,name=ItemId,proto3" json:"ItemId,omitempty"` // ID
Addition int32 `protobuf:"varint,3,opt,name=Addition,proto3" json:"Addition,omitempty"` // 加成(百分比)
Score int64 `protobuf:"varint,4,opt,name=Score,proto3" json:"Score,omitempty"` // 加成分数

View File

@ -131,7 +131,7 @@ message SCTienLenPlayerLeave {
}
message AddItem {
int32 ItemType = 1; // ; 1 2 3 4 5vip加成
int32 ItemType = 1; // ; 1 2 3 4 5vip加成 6
int32 ItemId = 2; // ID
int32 Addition = 3; //
int64 Score = 4; //

69
srvdata/db_giftcard.go Normal file
View File

@ -0,0 +1,69 @@
// Code generated by xlsx2proto.
// DO NOT EDIT!
package srvdata
import (
"google.golang.org/protobuf/proto"
"mongo.games.com/game/protocol/server"
)
var PBDB_GiftCardMgr = &DB_GiftCardMgr{pool: make(map[int32]*server.DB_GiftCard), Datas: &server.DB_GiftCardArray{}}
type DB_GiftCardMgr struct {
Datas *server.DB_GiftCardArray
pool map[int32]*server.DB_GiftCard
}
func (this *DB_GiftCardMgr) unmarshal(data []byte) error {
err := proto.Unmarshal(data, this.Datas)
if err == nil {
this.arrangeData()
}
return err
}
func (this *DB_GiftCardMgr) reunmarshal(data []byte) error {
newDatas := &server.DB_GiftCardArray{}
err := proto.Unmarshal(data, newDatas)
if err == nil {
for _, item := range newDatas.Arr {
existItem := this.GetData(item.GetId())
if existItem == nil {
this.pool[item.GetId()] = item
this.Datas.Arr = append(this.Datas.Arr, item)
} else {
*existItem = *item
}
}
}
return err
}
func (this *DB_GiftCardMgr) arrangeData() {
if this.Datas == nil {
return
}
dataArr := this.Datas.GetArr()
if dataArr == nil {
return
}
for _, data := range dataArr {
this.pool[data.GetId()] = data
}
}
func (this *DB_GiftCardMgr) GetData(id int32) *server.DB_GiftCard {
if data, ok := this.pool[id]; ok {
return data
}
return nil
}
func init() {
DataMgr.RegisteLoader("DB_GiftCard.dat", &ProtobufDataLoader{dh: PBDB_GiftCardMgr})
}

View File

@ -8012,6 +8012,207 @@ func AgcConvertDB_GiftBox(fi,fo string) {
break
}
arr.Arr = append(arr.Arr, data)
}
byteData, err := proto.Marshal(arr)
if err == nil{
err := os.WriteFile(fo, byteData, os.ModePerm)
if err != nil {
fmt.Println(err)
}
}
byteData, err = json.MarshalIndent(arr, "", "\t")
if err == nil {
foJson := strings.Replace(fo, ".dat", ".json", -1)
err := os.WriteFile(foJson, byteData, os.ModePerm)
if err != nil {
fmt.Println(err)
}
}
break //only fetch first sheet
}
}
func AgcConvertDB_GiftCard(fi,fo string) {
xlsxFile, err := xlsx.OpenFile(fi)
if err != nil {
fmt.Println("excel file open error:", err, "filename:", fi)
return
}
if err := recover(); err != nil {
fmt.Println(" panic,error=", err)
var buf [4096]byte
lens := runtime.Stack(buf[:], false)
fmt.Println("stack--->", string(buf[:lens]))
}
for _, sheet := range xlsxFile.Sheets {
arr:=&server.DB_GiftCardArray{
Arr:make([]*server.DB_GiftCard, 0, len(sheet.Rows)),
}
for i, row := range sheet.Rows {
if i <= 1 {
continue
}
if len(row.Cells) == 0 {
break
}
temp := int64(0)
var arrInt []int32
var arrInt64 []int64
var arrStr []string
var _ = arrInt
var _ = arrStr
var _ = arrInt64
temp, _ = strconv.ParseInt(row.Cells[0].String(), 10, 32)
data := &server.DB_GiftCard{}
for {
if len(row.Cells)<0+1{
break
}
temp, _ = strconv.ParseInt(row.Cells[0].String(), 10, 32)
data.Id = int32(temp)
if len(row.Cells)<1+1{
break
}
temp, _ = strconv.ParseInt(row.Cells[1].String(), 10, 32)
data.ShopID = int32(temp)
if len(row.Cells)<2+1{
break
}
data.Name = row.Cells[2].String()
if len(row.Cells)<3+1{
break
}
if row.Cells[3].String() != ""{
pairs := strings.Split(row.Cells[3].String(), ";")
resultMap := make(map[int64]int64)
for _, pair := range pairs {
kv := strings.Split(pair, ",")
key, err := strconv.ParseInt(kv[0], 10, 64)
if err != nil {
// 错误处理
fmt.Println("无法转换为int64:", kv[0])
continue
}
value, err := strconv.ParseInt(kv[1], 10, 64)
if err != nil {
// 错误处理
fmt.Println("无法转换为int64:", kv[1])
continue
}
resultMap[key] = value
}
data.Rewards = resultMap
}
if len(row.Cells)<4+1{
break
}
if row.Cells[4].String() != ""{
pairs := strings.Split(row.Cells[4].String(), ";")
resultMap := make(map[int64]int64)
for _, pair := range pairs {
kv := strings.Split(pair, ",")
key, err := strconv.ParseInt(kv[0], 10, 64)
if err != nil {
// 错误处理
fmt.Println("无法转换为int64:", kv[0])
continue
}
value, err := strconv.ParseInt(kv[1], 10, 64)
if err != nil {
// 错误处理
fmt.Println("无法转换为int64:", kv[1])
continue
}
resultMap[key] = value
}
data.DayRewards = resultMap
}
if len(row.Cells)<5+1{
break
}
temp, _ = strconv.ParseInt(row.Cells[5].String(), 10, 32)
data.Time = int32(temp)
if len(row.Cells)<6+1{
break
}
temp, _ = strconv.ParseInt(row.Cells[6].String(), 10, 32)
data.Equity = int32(temp)
break
}
arr.Arr = append(arr.Arr, data)
@ -12408,6 +12609,8 @@ func main(){
AgcConvertDB_GiftBox(`D:\trunk\src\mongo.games.com\game\xlsx\DB_GiftBox.xlsx`,`..\..\data\DB_GiftBox.dat`)
AgcConvertDB_GiftCard(`D:\trunk\src\mongo.games.com\game\xlsx\DB_GiftCard.xlsx`,`..\..\data\DB_GiftCard.dat`)
AgcConvertDB_IceAgeElementRate(`D:\trunk\src\mongo.games.com\game\xlsx\DB_IceAgeElementRate.xlsx`,`..\..\data\DB_IceAgeElementRate.dat`)
AgcConvertDB_Legend_Odds(`D:\trunk\src\mongo.games.com\game\xlsx\DB_Legend_Odds.xlsx`,`..\..\data\DB_Legend_Odds.dat`)

View File

@ -185,6 +185,12 @@ func (this *CSVCPayShopHandler) Process(s *netlib.Session, packetid int, data in
return nil
}
}
if shopInfo.Page == ShopPageGift {
if !p.CheckWeekCard(shopInfo.Id) {
SendClient(shop.OpResultCode_OPRC_Error)
return nil
}
}
//不需要观看广告的
var money int32 = rand.Int31n(shopInfo.CostArea[1]-shopInfo.CostArea[0]+1) + shopInfo.CostArea[0]
if shopInfo.Page == ShopPageVip {
@ -216,6 +222,9 @@ func (this *CSVCPayShopHandler) Process(s *netlib.Session, packetid int, data in
return nil
}
op := ShopMgrSington.ReceiveVCPayShop(shopInfo, p, msg.VipShopId, msg.GetPosition())
if shopInfo.Page == ShopPageGift {
p.UpdateWeekCardData(shopInfo.Id)
}
SendClient(op)
}
return nil
@ -355,6 +364,11 @@ func (this *CSPayInfoHandler) Process(s *netlib.Session, packetid int, data inte
SendClient(shop.OpResultCode_OPRC_Error)
return nil
}
if shopInfo.Page == ShopPageGift {
if !p.CheckWeekCard(shopInfo.Id) {
SendClient(shop.OpResultCode_OPRC_Error)
}
}
if shopInfo.Page == ShopPageVip {
//判断是否购买过了
vipLevel := p.VIP

View File

@ -374,6 +374,26 @@ func (this *Player) OnLogined() {
TaskSubjectSingleton.Touch(common.TaskTypeLogin, &TaskData{SnId: this.SnId, Num: 1}) // 登录游戏
this.LoadAfter()
//测试代码
this.UpdatePlayerVipBag(970001)
//周卡领取奖励
now := time.Now().Unix()
for id, endTime := range this.WeekCardTime {
if endTime < now {
this.WeekCardTime[id] = 0
continue
}
if this.WeekCardTime[id] == 0 {
continue
}
if now > this.WeekCardTime[id] {
logger.Logger.Trace("周卡已过期,不能领取!")
continue
}
if !this.WeekCardAward[id] {
this.GetWeekCardAwary(id)
}
}
}
}
@ -2223,6 +2243,8 @@ func (this *Player) OnDayTimer(login, continuous bool, t int) {
this.VipMatchTimes = 0
//VIP商城数据更新
this.UpdateVipShopData()
//周卡数据更新
this.WeekCardAward = make(map[int32]bool)
// 重置每日任务
if this.WelfData != nil {
if this.WelfData.Task != nil {
@ -2990,7 +3012,18 @@ func (this *Player) SendPlayerInfo() {
} else {
scPlayerData.BindOption = proto.Int32(7)
}
//周卡数据
for id, endTime := range this.WeekCardTime {
if endTime == 0 {
continue
}
weekInfo := player_proto.WeekInfo{
Id: id,
WeekCardTime: endTime,
WeekCardAward: this.WeekCardAward[id],
}
scPlayerData.Data.WeekCard = append(scPlayerData.Data.WeekCard, &weekInfo)
}
proto.SetDefaults(scPlayerData)
logger.Logger.Tracef("Send SCPlayerData %v", scPlayerData)
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PLAYERDATA), scPlayerData)
@ -4259,6 +4292,10 @@ func (this *Player) UpdatePlayerVipBag(shopId int32) {
}
}), "UpdatePlayerVipBag").Start()
}
//判断是否是礼包周卡
if shopInfo.Page == ShopPageGift {
this.UpdateWeekCardData(shopId)
}
}
}
@ -4618,3 +4655,123 @@ func (this *Player) CollectTask(taskId int32, num int64) {
default:
}
}
// 购买周卡检查
func (this *Player) CheckWeekCard(shopId int32) bool {
srvdata.PBDB_GiftCardMgr.Datas.GetArr()
id := int32(-1)
for _, card := range srvdata.PBDB_GiftCardMgr.Datas.GetArr() {
if card.ShopID == shopId {
id = card.Id
break
}
}
if id == -1 {
return false
}
logger.Logger.Trace("玩家请求购买周卡!")
//获取当前时间
now := time.Now().Unix()
//计算时间差
timeDiff := int32(this.WeekCardTime[id]-now) / 86400
if timeDiff > 3 {
logger.Logger.Trace("当前剩余时间大于3天无法购买周卡")
return false
}
return true
}
// 购买周卡
func (this *Player) UpdateWeekCardData(shopId int32) bool {
id := int32(-1)
CardTime := 0
for _, card := range srvdata.PBDB_GiftCardMgr.Datas.GetArr() {
if card.ShopID == shopId {
id = card.Id
CardTime = int(card.Time)
break
}
}
if id == -1 {
return false
}
if this.WeekCardTime == nil {
this.WeekCardTime = make(map[int32]int64)
}
logger.Logger.Trace("玩家请求购买周卡!")
//获取当前时间
now := time.Now().Unix()
//计算时间差
timeDiff := int32(this.WeekCardTime[id]-now) / 86400
if timeDiff > 3 {
logger.Logger.Trace("当前剩余时间大于3天无法购买周卡")
return false
}
//计算剩余时间
addTime := 0
if timeDiff > 0 {
addTime = int(timeDiff)
}
//计算7天后0点时间
sevenDaysLater := time.Now().AddDate(0, 0, CardTime+addTime+1)
zeroTime := time.Date(sevenDaysLater.Year(), sevenDaysLater.Month(), sevenDaysLater.Day(), 0, 0, 0, 0, sevenDaysLater.Location())
logger.Logger.Trace("购买周卡后,时间变为:", zeroTime.Unix())
this.WeekCardTime[id] = zeroTime.Unix()
this.GetWeekCardAwary(id)
return true
}
// 领取周卡奖励
func (this *Player) GetWeekCardAwary(id int32) {
logger.Logger.Trace("玩家请求领取周卡奖励!")
data := srvdata.PBDB_GiftCardMgr.GetData(id)
if this.WeekCardAward == nil {
this.WeekCardAward = make(map[int32]bool)
}
now := time.Now().Unix()
if this.WeekCardTime[id] != 0 && now > this.WeekCardTime[id] {
logger.Logger.Trace("周卡已过期,不能领取!")
return
}
if this.WeekCardAward[id] {
return
}
ret := &player_proto.SCGetWeekCardAwary{}
//获取周卡奖励
items := data.GetDayRewards()
addItem := []*Item{}
for itemId, itemNum := range items {
item := &Item{ItemId: int32(itemId), ItemNum: itemNum, ObtainTime: time.Now().Unix()}
addItem = append(addItem, item)
itemInfo := &player_proto.PayItem{}
itemInfo.ItemId = int32(itemId)
itemInfo.ItemNum = itemNum
ret.Items = append(ret.Items, itemInfo)
BagMgrSingleton.RecordItemLog(this.Platform, this.SnId, ItemObtain, int32(itemId), data.Name, itemNum, "周卡每日奖励")
}
BagMgrSingleton.AddJybBagInfo(this, addItem, 0, common.GainWay_WeekCardAward, "system", "周卡每日奖励")
//返回消息
this.WeekCardAward[id] = true
ret.WeekCardAward = this.WeekCardAward[id]
ret.Items = nil
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SCGetWeekCardAwary), ret)
return
}
// 获取周卡权益
// typeId : 1-破产救济金领取翻倍 2-排位赛积分提升5%
func (this *Player) GetWeekCardPrivilege(typeId int32) bool {
logger.Logger.Trace("玩家请求获取周卡权益!")
now := time.Now().Unix()
for id, endTime := range this.WeekCardTime {
if endTime > now {
data := srvdata.PBDB_GiftCardMgr.GetData(id)
if data.Equity == typeId {
return true
}
}
}
return false
}

View File

@ -51,6 +51,7 @@ const (
ShopPagePrivilege //VIP特权礼包
ShopPagePhoneScore = 61 //手机积分商城
ShopPagePhoneScore_google = 62
ShopPageGift = 7 //礼包页面
)
// 商品类型

View File

@ -92,6 +92,10 @@ func (this *WelfareMgr) GetReliefFund(p *Player, isVideo bool) {
coin = coin + add
}
}
//周卡加成
if p.GetWeekCardPrivilege(1) {
coin = coin * 2
}
p.AddCoin(coin, add, gainWay, "ReliefFund",
fmt.Sprintf("领取救济金-%v-%v倍", coin, rate))

BIN
xlsx/DB_GiftCard.xlsx Normal file

Binary file not shown.