867 lines
26 KiB
Go
867 lines
26 KiB
Go
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)
|
||
}
|