game_sync/worldsrv/action_nian.go

867 lines
26 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"math/rand"
"mongo.games.com/game/common"
"mongo.games.com/game/model"
"mongo.games.com/game/mq"
"mongo.games.com/game/protocol/activity"
"mongo.games.com/game/srvdata"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"strconv"
"strings"
"time"
)
// 请求年兽信息
func CSNianData(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if _, ok := data.(*activity.CSNianData); ok {
p := PlayerMgrSington.GetOnlinePlayer(sid)
sData := srvdata.PBDB_NewYearActivityMgr.Datas.GetArr()
BossMaxHp := int64(0)
for _, value := range sData {
if value.Id == 5 {
BossMaxHp, _ = strconv.ParseInt(value.PropValue, 10, 64)
break
}
}
logger.Logger.Trace("请求年兽信息snid = ", p.SnId)
if p == nil {
logger.Logger.Warn("CSNianData p == nil")
return nil
}
pool := WelfareMgrSington.GetConfig(p.Platform).ActivityNianConfig
if pool == nil || pool.List == nil || pool.Switch == model.WelfareClose {
return nil
}
startTime := pool.List[0].ActivityStart
endTime := pool.List[0].ActivityEnd
timestamp := common.StrTimeToTs(startTime)
endTimestamp := common.StrTimeToTs(endTime)
if p.WelfData.NianData != nil && (p.WelfData.NianData.ActivityStartTime != timestamp || p.WelfData.NianData.ActivityEndTime != endTimestamp) {
logger.Logger.Infof("CSNianData 年兽活动时间变更 清除之前数据 snid= %d", p.SnId)
WelfareMgrSington.ClearActivityNianData(p)
}
if p.WelfData.NianData == nil {
p.WelfData.NianData = &model.NianData{
ActivityStartTime: timestamp,
ActivityEndTime: endTimestamp,
}
}
if p.WelfData.NianData.BossHp == 0 {
p.WelfData.NianData.BossHp = BossMaxHp
}
//排行榜配置
rankData := PlatformMgrSingleton.GetConfig(p.Platform).NianRankReward
if rankData == nil {
return nil
}
pack := &activity.SCNianData{}
for _, info := range rankData.RankData {
rankInfo := &activity.NianRankData{}
rankInfo.TypeId = info.TypeId
for _, awardInfo := range info.RankInfo {
rank := &activity.NianRankInfo{}
rank.RankId = awardInfo.RankId
for _, itemInfo := range awardInfo.Award {
rankAwardData := &activity.RankAwardData{
ItemId: itemInfo.ItemId,
ItemNum: itemInfo.ItemNum,
}
rank.Award = append(rank.Award, rankAwardData)
}
rankInfo.Data = append(rankInfo.Data, rank)
}
pack.RankData = append(pack.RankData, rankInfo)
}
var intSlice []int
var shopNum []int
for _, value := range sData {
if value.Id == 17 {
str := value.PropValue
strSlice := strings.Split(str, ",")
// 转换每个字符串为 int
for _, s := range strSlice {
num, _ := strconv.Atoi(s)
intSlice = append(intSlice, num)
}
}
if value.Id == 18 {
str := value.PropValue
strSlice := strings.Split(str, ",")
// 转换每个字符串为 int
for _, s := range strSlice {
num, _ := strconv.Atoi(s)
shopNum = append(shopNum, num)
}
}
}
for pos, shopId := range intSlice {
num := shopNum[pos]
if num == 0 {
continue
}
shopInfo := &activity.ShopData{}
shopInfo.ShopId = int32(shopId)
shopInfo.ShopNum = p.WelfData.NianData.GiftShop[int32(shopId)]
shopInfo.MaxShopNum = int32(num)
pack.ShopData = append(pack.ShopData, shopInfo)
}
changeData := ""
for _, value := range sData {
if value.Id == 21 {
changeData = value.PropValue
break
}
}
signTime := int64(0)
if p.WelfData.NianData.SignAwardTime > 0 {
nextDay := time.Now().Add(24 * time.Hour).Truncate(24 * time.Hour)
signTime = nextDay.Unix()
}
for _, value := range sData {
if value.Id == 7 {
pack.LuckyRankNeed = value.PropValue
break
}
}
for _, value := range sData {
if value.Id == 8 {
pack.RankNeed = value.PropValue
break
}
}
//签到额外奖励
for _, value := range sData {
if value.Id == 2 {
strSlice := strings.Split(value.PropValue, ",")
itemId, _ := strconv.Atoi(strSlice[0])
itemNum, _ := strconv.Atoi(strSlice[1])
pack.OtherSignAward = append(pack.OtherSignAward, &activity.RankAwardData{
ItemId: int32(itemId),
ItemNum: int64(itemNum),
})
break
}
}
pack.OtherSignAwardCount = p.WelfData.NianData.SignOtherAwardCount
pack.OtherSignAwardProp = p.WelfData.NianData.SignOtherAwardProp
count := int64(0)
for _, value := range sData {
if value.Id == 3 {
count, _ = strconv.ParseInt(value.PropValue, 10, 64)
break
}
}
//签到奖励
for _, info := range pool.List[0].SignReward {
pack.SignAward = append(pack.SignAward, &activity.RankAwardData{
ItemId: info.ItemId,
ItemNum: info.ItemNum,
})
}
pack.OtherSignMaxCount = int32(count)
StartTs := common.IntToTime(int(pool.List[0].BuffStartTime)).Unix()
EndTs := common.IntToTime(int(pool.List[0].BuffEndTime)).Unix()
pack.BuffStartTime = StartTs
pack.BuffEndTime = EndTs
pack.BossHp = p.WelfData.NianData.BossHp
pack.BossMaxHp = BossMaxHp
pack.ActivityStartTime = timestamp
pack.ActivityEndTime = endTimestamp
pack.AwardTime = p.WelfData.NianData.SignAwardTime
pack.BuffCount = p.WelfData.NianData.BuffCount
pack.BuffStatus = p.WelfData.NianData.BuffStatus
pack.SignAwardTime = signTime
pack.ChangeData = changeData
pack.Switch = pool.Switch
pack.AttackMaxHp = p.WelfData.NianData.AttackMaxHp
pack.AttackSumHp = p.WelfData.NianData.AttackSumHp
logger.Logger.Trace("请求年兽活动信息 ", pack)
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianData), pack)
}
return nil
}
// 攻击年兽
func CSNianAttack(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if msg, ok := data.(*activity.CSNianAttack); ok {
typeId := msg.TypeId
p := PlayerMgrSington.GetOnlinePlayer(sid)
sData := srvdata.PBDB_NewYearActivityMgr.Datas.GetArr()
BossMaxHp := int64(0)
for _, value := range sData {
if value.Id == 5 {
BossMaxHp, _ = strconv.ParseInt(value.PropValue, 10, 64)
break
}
}
if p.WelfData.NianData == nil {
p.WelfData.NianData = &model.NianData{}
}
if p.WelfData.NianData.BossHp <= 0 {
p.WelfData.NianData.BossHp = BossMaxHp
}
logger.Logger.Trace("客户端请求攻击年兽snid = ", p.SnId)
if p == nil {
logger.Logger.Warn("CSNianAttack p == nil")
return nil
}
pool := WelfareMgrSington.GetConfig(p.Platform).ActivityNianConfig
if pool == nil || pool.List == nil {
return nil
}
if pool.Switch == model.WelfareClose {
logger.Logger.Trace("CSNianAttack 活动关闭!")
return nil
}
//判断活动时间
startTime := pool.List[0].ActivityStart
endTime := pool.List[0].ActivityEnd
timestamp := common.StrTimeToTs(startTime)
endTimestamp := common.StrTimeToTs(endTime)
nowTime := time.Now().Unix()
if nowTime < timestamp || nowTime > endTimestamp {
return nil
}
pack := &activity.SCNianAttackData{}
itemId := 0
itemNum := 1
count := 1
if typeId == 1 {
itemId = common.ItemIDLittleGuaranteed
} else if typeId == 2 {
itemId = common.ItemIDLittleGuaranteed
itemNum = 10
count = 10
} else if typeId == 3 {
itemId = common.ItemIDBigGuaranteed
} else {
return nil
}
var costItems []*model.Item
costItems = append(costItems, &model.Item{
ItemId: int32(itemId),
ItemNum: int64(-itemNum),
})
_, _, result := BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: costItems,
GainWay: common.GainWayNianCost,
Operator: "system",
Remark: "年兽活动消耗",
})
if !result {
return nil
}
//本次攻击总血量
AttackHp := int64(0)
LuckyRankNeed := int64(0)
RankNeed := int64(0)
for _, value := range sData {
if value.Id == 7 {
LuckyRankNeed, _ = strconv.ParseInt(value.PropValue, 10, 64)
break
}
}
for _, value := range sData {
if value.Id == 8 {
RankNeed, _ = strconv.ParseInt(value.PropValue, 10, 64)
break
}
}
//伤害范围
var intSlice []int
if typeId == 1 || typeId == 2 {
for _, value := range sData {
if value.Id == 9 {
str := value.PropValue
strSlice := strings.Split(str, ",")
// 转换每个字符串为 int
for _, s := range strSlice {
num, err := strconv.Atoi(s)
if err != nil {
return nil
}
intSlice = append(intSlice, num)
}
break
}
}
}
//保底奖励次数
floorCount := 0
for _, value := range sData {
if typeId == 1 || typeId == 2 {
if value.Id == 13 {
floorCount, _ = strconv.Atoi(value.PropValue)
break
}
} else {
if value.Id == 15 {
floorCount, _ = strconv.Atoi(value.PropValue)
break
}
}
}
if typeId == 3 {
for _, value := range sData {
if value.Id == 10 {
str := value.PropValue
strSlice := strings.Split(str, ",")
// 转换每个字符串为 int
for _, s := range strSlice {
num, err := strconv.Atoi(s)
if err != nil {
return nil
}
intSlice = append(intSlice, num)
}
break
}
}
}
awardInfo := &activity.RankAwardData{}
for i := 0; i < count; i++ {
//随机伤害值
randomValue := int64(rand.Intn(intSlice[1]-intSlice[0]+1) + intSlice[0])
logger.Logger.Tracef("snid :%v 随机到的伤害值是:%d", p.SnId, randomValue)
//计算BUFF
if p.WelfData.NianData.BuffCount > 0 {
randomValue = randomValue + randomValue/2
p.WelfData.NianData.BuffCount -= 1
}
if p.WelfData.NianData.AttackMaxHp < randomValue {
p.WelfData.NianData.AttackMaxHp = randomValue
}
AttackHp += randomValue
if typeId == 3 {
p.WelfData.NianData.BigHurt += 1
//判断是否掉落保底奖励
var guaranteeItems []*model.Item
if p.WelfData.NianData.BigHurt%int32(floorCount) == 0 {
floorReward := &activity.RankAwardData{}
for _, value := range sData {
if value.Id == 16 {
strSlice := strings.Split(value.PropValue, ",")
FloorItemId, _ := strconv.Atoi(strSlice[0])
FloorItemNum, _ := strconv.Atoi(strSlice[1])
guaranteeItems = append(guaranteeItems, &model.Item{
ItemId: int32(FloorItemId),
ItemNum: int64(FloorItemNum),
})
floorReward.ItemId = int32(FloorItemId)
floorReward.ItemNum = int64(FloorItemNum)
pack.FloorReward = append(pack.FloorReward, floorReward)
break
}
}
}
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: guaranteeItems,
GainWay: common.GainWayNianGain_Attack_BigGuarantee,
Operator: "system",
Remark: "年兽活动-大爆竹保底奖励",
})
//额外掉落
extraItemId := 0
extraItemNum := 0
var intSlice1 []int
for _, value := range sData {
if value.Id == 11 {
extraItemId, _ = strconv.Atoi(value.PropValue)
break
}
}
for _, value := range sData {
if value.Id == 12 {
str := value.PropValue
strSlice := strings.Split(str, ",")
// 转换每个字符串为 int
for _, s := range strSlice {
num, err := strconv.Atoi(s)
if err != nil {
return nil
}
intSlice1 = append(intSlice1, num)
}
break
}
}
//随机个数
extraItemNum = rand.Intn(intSlice1[1]-intSlice1[0]+1) + intSlice1[0]
var extraItems []*model.Item
extraItems = append(extraItems, &model.Item{
ItemId: int32(extraItemId),
ItemNum: int64(extraItemNum),
})
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: extraItems,
GainWay: common.GainWayNianGain_Attack_BigOther,
Operator: "system",
Remark: "年兽活动-大爆竹额外活动奖励",
})
extraDrop := &activity.RankAwardData{}
extraDrop.ItemId = int32(extraItemId)
extraDrop.ItemNum = int64(extraItemNum)
pack.ExtraDrop = append(pack.ExtraDrop, extraDrop)
} else {
p.WelfData.NianData.LittleHurt += 1
//判断是否掉落保底奖励
var guaranteeItems []*model.Item
if p.WelfData.NianData.LittleHurt%int32(floorCount) == 0 {
floorReward := &activity.RankAwardData{}
for _, value := range sData {
if value.Id == 14 {
strSlice := strings.Split(value.PropValue, ",")
FloorItemId, _ := strconv.Atoi(strSlice[0])
FloorItemNum, _ := strconv.Atoi(strSlice[1])
guaranteeItems = append(guaranteeItems, &model.Item{
ItemId: int32(FloorItemId),
ItemNum: int64(FloorItemNum),
})
floorReward.ItemId = int32(FloorItemId)
floorReward.ItemNum = int64(FloorItemNum)
pack.FloorReward = append(pack.FloorReward, floorReward)
break
}
}
}
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: guaranteeItems,
GainWay: common.GainWayNianGain_Attack_LittleGuarantee,
Operator: "system",
Remark: "年兽活动-小爆竹额外掉落奖励",
})
}
}
p.WelfData.NianData.BossHp -= AttackHp
p.WelfData.NianData.AttackSumHp += AttackHp
isDie := false //是否死亡
//判断Boss是否死亡
var bossDieAward []*model.Item
if p.WelfData.NianData.BossHp <= 0 {
isDie = true
p.WelfData.NianData.BossHp = BossMaxHp
p.WelfData.NianData.BossDieCount += 1
//获取死亡奖励
var bossDieItems []*model.Item
for _, value := range pool.List[0].BossDieReward {
bossDieItemId := value.ItemId
bossDieItemNum := value.ItemNum
bossDieAward = append(bossDieAward, &model.Item{
ItemId: bossDieItemId,
ItemNum: bossDieItemNum,
})
bossDieItems = append(bossDieItems, &model.Item{
ItemId: bossDieItemId,
ItemNum: bossDieItemNum,
})
}
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: bossDieItems,
GainWay: common.GainWayNianGain_BossDie,
Operator: "system",
Remark: "年兽活动-Boss死亡获得",
})
//年兽死亡额外掉落
BigHurtCount := 0
for _, value := range sData {
if value.Id == 19 {
BigHurtCount, _ = strconv.Atoi(value.PropValue)
break
}
}
logger.Logger.Trace("年兽死亡额外掉落 当前已使用BigHurt ", p.WelfData.NianData.BigHurt, "BigHurtCount = ", BigHurtCount)
if p.WelfData.NianData.BigHurt >= int32(BigHurtCount) {
//后台配置额外掉落
var bossDieOther []*model.Item
for _, info := range pool.List[0].BossDieOtherReward {
if p.WelfData.NianData.OtherAwardNum[info.Id] >= info.DropUp {
logger.Logger.Trace("snid:", p.SnId, "BOSS死亡 额外掉落达到上限 id = ", info.Id, "数量:", p.WelfData.NianData.OtherAwardNum[info.Id])
continue
}
//随机
if rand.Intn(100)+1 <= int(info.DropRate) {
otherItemId := info.ItemId
otherItemNum := info.ItemNum
if int32(otherItemNum)+p.WelfData.NianData.OtherAwardNum[info.Id] > info.DropUp {
otherItemNum = int64(info.DropUp - p.WelfData.NianData.OtherAwardNum[info.Id])
}
if p.WelfData.NianData.OtherAwardNum == nil {
p.WelfData.NianData.OtherAwardNum = make(map[int32]int32)
}
p.WelfData.NianData.OtherAwardNum[info.Id] += int32(otherItemNum)
bossDieOther = append(bossDieOther, &model.Item{
ItemId: otherItemId,
ItemNum: otherItemNum,
})
bossDieAward = append(bossDieAward, &model.Item{
ItemId: otherItemId,
ItemNum: otherItemNum,
})
}
}
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: bossDieOther,
GainWay: common.GainWayNianGain_BossDieOther,
Operator: "system",
Remark: "年兽活动-攻击年兽额外获得",
})
}
TaskSubjectSingleton.Touch(common.TaskTypeNianBossKill, &TaskData{SnId: p.SnId, Num: 1}) // BOSS死亡
}
coinItems := []*model.Item{}
coinItems = append(coinItems, &model.Item{
ItemId: common.ItemIDCoin,
ItemNum: AttackHp,
})
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: coinItems,
GainWay: common.GainWayNianGain_Attack_Coin,
Operator: "system",
Remark: "年兽活动-攻击年兽获得",
})
awardInfo.ItemId = common.ItemIDCoin
awardInfo.ItemNum = AttackHp
pack.Award = append(pack.Award, awardInfo)
pack.AttackHp = AttackHp
pack.TypeId = typeId
pack.BossHp = p.WelfData.NianData.BossHp
pack.IsDie = isDie
for _, item := range bossDieAward {
dieInfo := &activity.RankAwardData{}
dieInfo.ItemId = item.ItemId
dieInfo.ItemNum = item.ItemNum
pack.DieAward = append(pack.DieAward, dieInfo)
}
pack.BuffCount = p.WelfData.NianData.BuffCount
pack.AttackMaxHp = p.WelfData.NianData.AttackMaxHp
pack.AttackSumHp = p.WelfData.NianData.AttackSumHp
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianAttackData), pack)
TaskSubjectSingleton.Touch(common.TaskTypeNianBossDamage, &TaskData{SnId: p.SnId, Num: AttackHp}) // 对年兽造成伤害
//更新年兽排行榜榜
luckValue := p.WelfData.NianData.AttackMaxHp
luckTime := time.Now().Unix()
if luckValue < LuckyRankNeed {
luckValue = 0
luckTime = 0
}
damage := p.WelfData.NianData.AttackSumHp
logger.Logger.Tracef("sndi :%v,当前最大幸运值:%v“总榜伤害值:%v", p.SnId, p.WelfData.NianData.AttackMaxHp, p.WelfData.NianData.AttackSumHp)
if damage < RankNeed {
damage = 0
}
if luckValue > 0 || damage > 0 {
log := &model.NianInfo{
Platform: p.Platform,
SnId: p.SnId,
Name: p.Name,
Luck: luckValue,
Damage: damage,
ModId: p.Roles.ModId,
Ts: time.Now().Unix(),
}
if luckTime > 0 {
log.LuckTime = luckTime
}
mq.Write(log)
logger.Logger.Tracef("更新排行榜数据 snid :%v,log:%v", p.SnId, log)
}
}
return nil
}
// 请求领取BUFF
func CSNianBuff(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if _, ok := data.(*activity.CSNianBuff); ok {
p := PlayerMgrSington.GetOnlinePlayer(sid)
logger.Logger.Trace("客户端请求请求领取BUFF snid = ", p.SnId)
if p == nil {
return nil
}
if p.WelfData.NianData == nil {
p.WelfData.NianData = &model.NianData{}
}
if p.WelfData.NianData.BuffStatus {
pack := &activity.SCNianBuff{
OpRetCode: activity.OpResultCode_Nian_OPRC_Error_Nian,
}
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianBuff), pack)
return nil
}
pool := WelfareMgrSington.GetConfig(p.Platform).ActivityNianConfig
if pool == nil || pool.List == nil {
return nil
}
if pool.Switch == model.WelfareClose {
logger.Logger.Trace("CSNianSignAward 活动关闭!")
return nil
}
//判断活动时间
startTime := pool.List[0].ActivityStart
endTime := pool.List[0].ActivityEnd
timestamp := common.StrTimeToTs(startTime)
endTimestamp := common.StrTimeToTs(endTime)
nowTime := time.Now().Unix()
if nowTime < timestamp || nowTime > endTimestamp {
return nil
}
StartTs := common.IntToTime(int(pool.List[0].BuffStartTime)).Unix()
EndTs := common.IntToTime(int(pool.List[0].BuffEndTime)).Unix()
//判断领取时间
if time.Now().Unix() >= StartTs && time.Now().Unix() <= EndTs {
sData := srvdata.PBDB_NewYearActivityMgr.Datas.GetArr()
count := int64(0)
for _, value := range sData {
if value.Id == 20 {
count, _ = strconv.ParseInt(value.PropValue, 10, 64)
break
}
}
p.WelfData.NianData.BuffCount = count
p.WelfData.NianData.BuffStatus = true
pack := &activity.SCNianBuff{
BuffCount: p.WelfData.NianData.BuffCount,
}
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianBuff), pack)
//统计领取BUff
mq.Write(model.GenerateActivityLog(p.SnId, p.Platform, model.ActivityLog_NianBuff, 1))
} else {
logger.Logger.Trace("CSNianSignAward 活动时间未到!")
pack := &activity.SCNianBuff{
OpRetCode: activity.OpResultCode_Nian_OPRC_Error_Nian,
}
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianBuff), pack)
}
}
return nil
}
// 领取签到奖励
func CSNianSignAward(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if _, ok := data.(*activity.CSNianSignAward); ok {
p := PlayerMgrSington.GetOnlinePlayer(sid)
logger.Logger.Trace("领取签到奖励 snid = ", p.SnId)
if p == nil {
return nil
}
pool := WelfareMgrSington.GetConfig(p.Platform).ActivityNianConfig
if pool == nil || pool.List == nil {
return nil
}
if pool.Switch == model.WelfareClose {
logger.Logger.Trace("CSNianSignAward 活动关闭!")
return nil
}
//判断活动时间
startTime := pool.List[0].ActivityStart
endTime := pool.List[0].ActivityEnd
timestamp := common.StrTimeToTs(startTime)
endTimestamp := common.StrTimeToTs(endTime)
nowTime := time.Now().Unix()
if nowTime < timestamp || nowTime > endTimestamp {
return nil
}
pack := &activity.SCNianSignAward{}
if p.WelfData.NianData == nil {
p.WelfData.NianData = &model.NianData{}
}
if p.WelfData.NianData.SignAwardTime > 0 {
pack.OpRetCode = activity.OpResultCode_Nian_OPRC_Error_Nian
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianSignAward), pack)
return nil
}
p.WelfData.NianData.SignAwardTime = time.Now().Unix()
//奖励
pack.SignAwardTime = p.WelfData.NianData.SignAwardTime
var items []*model.Item
for _, info := range pool.List[0].SignReward {
items = append(items, &model.Item{
ItemId: info.ItemId,
ItemNum: info.ItemNum,
})
award := &activity.RankAwardData{}
award.ItemId = info.ItemId
award.ItemNum = info.ItemNum
pack.SignAward = append(pack.SignAward, award)
}
//签到额外奖励
sData := srvdata.PBDB_NewYearActivityMgr.Datas.GetArr()
count := int64(0)
for _, value := range sData {
if value.Id == 3 {
count, _ = strconv.ParseInt(value.PropValue, 10, 64)
break
}
}
var prop int64
if p.WelfData.NianData.SignOtherAwardProp == 0 {
for _, value := range sData {
if value.Id == 4 {
prop, _ = strconv.ParseInt(value.PropValue, 10, 64)
break
}
}
p.WelfData.NianData.SignOtherAwardProp = int32(prop)
}
if p.WelfData.NianData.SignOtherAwardCount < int32(count) {
//概率
if rand.Intn(100)+1 < int(p.WelfData.NianData.SignOtherAwardProp) {
for _, value := range sData {
if value.Id == 2 {
strSlice := strings.Split(value.PropValue, ",")
itemId, _ := strconv.Atoi(strSlice[0])
itemNum, _ := strconv.Atoi(strSlice[1])
items = append(items, &model.Item{
ItemId: int32(itemId),
ItemNum: int64(itemNum),
})
award := &activity.RankAwardData{}
award.ItemId = int32(itemId)
award.ItemNum = int64(itemNum)
pack.OtherSignAward = append(pack.OtherSignAward, award)
break
}
}
p.WelfData.NianData.SignOtherAwardCount += 1
p.WelfData.NianData.SignOtherAwardProp = 60
} else {
p.WelfData.NianData.SignOtherAwardProp += int32(prop)
if p.WelfData.NianData.SignOtherAwardProp > 100 {
p.WelfData.NianData.SignOtherAwardProp = 100
}
}
}
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: items,
GainWay: common.GainWayNianGain_Sign,
Operator: "system",
Remark: "年兽活动-领取签到奖励获得",
})
pack.OtherSignAwardCount = p.WelfData.NianData.SignOtherAwardCount
pack.OtherSignAwardProp = p.WelfData.NianData.SignOtherAwardProp
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianSignAward), pack)
TaskSubjectSingleton.Touch(common.TaskTypeNianSign, &TaskData{SnId: p.SnId, Num: 1})
}
return nil
}
func CSNianChange(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if msg, ok := data.(*activity.CSNianChange); ok {
p := PlayerMgrSington.GetOnlinePlayer(sid)
logger.Logger.Trace("客户端请求请求年兽兑换 snid = ", p.SnId)
if p == nil {
return nil
}
pool := WelfareMgrSington.GetConfig(p.Platform).ActivityNianConfig
if pool == nil || pool.List == nil {
return nil
}
if pool.Switch == model.WelfareClose {
logger.Logger.Trace("CSNianSignAward 活动关闭!")
return nil
}
//判断活动时间
startTime := pool.List[0].ActivityStart
endTime := pool.List[0].ActivityEnd
timestamp := common.StrTimeToTs(startTime)
endTimestamp := common.StrTimeToTs(endTime)
nowTime := time.Now().Unix()
if nowTime < timestamp || nowTime > endTimestamp {
return nil
}
num := msg.Num
pack := &activity.SCNianChange{}
if num <= 0 || num > 99 {
pack.OpRetCode = activity.OpResultCode_Nian_OPRC_Error_Nian
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianChange), pack)
return nil
}
sData := srvdata.PBDB_NewYearActivityMgr.Datas.GetArr()
itemNum := 0
coin := 0
diamond := 0
for _, value := range sData {
if value.Id == 21 {
strSlice := strings.Split(value.PropValue, ",")
diamond, _ = strconv.Atoi(strSlice[0])
itemNum, _ = strconv.Atoi(strSlice[1])
coin, _ = strconv.Atoi(strSlice[2])
break
}
}
if p.Diamond < int64(diamond*int(num)) {
pack.OpRetCode = activity.OpResultCode_Nian_OPRC_Error_Nian
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianChange), pack)
return nil
}
p.AddDiamond(int64(-diamond*int(num)), 0, common.GainWayNianCost, "sys", "年兽活动兑换道具")
var items []*model.Item
items = append(items, &model.Item{
ItemId: common.ItemIDCoin,
ItemNum: int64(coin * int(num)),
})
items = append(items, &model.Item{
ItemId: common.ItemIDLittleGuaranteed,
ItemNum: int64(itemNum * int(num)),
})
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: items,
GainWay: common.GainWayNianGain_Change,
Operator: "system",
Remark: "年兽活动-兑换",
})
pack.Num = num
for _, item := range items {
info := &activity.RankAwardData{
ItemId: item.ItemId,
ItemNum: item.ItemNum,
}
pack.Award = append(pack.Award, info)
}
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianChange), pack)
}
return nil
}
func init() {
common.Register(int(activity.NianPacketID_PACKET_CSNianData), activity.CSNianData{}, CSNianData)
common.Register(int(activity.NianPacketID_PACKET_CSNianAttack), activity.CSNianAttack{}, CSNianAttack)
common.Register(int(activity.NianPacketID_PACKET_CSNianBuff), activity.CSNianBuff{}, CSNianBuff)
common.Register(int(activity.NianPacketID_PACKET_CSNianSignAward), activity.CSNianSignAward{}, CSNianSignAward)
common.Register(int(activity.NianPacketID_PACKET_CSNianChange), activity.CSNianChange{}, CSNianChange)
}