Compare commits

..

2 Commits

Author SHA1 Message Date
by 79e05883db Merge branch 'develop' of https://git.pogorockgames.com/mango-games/server/game into develop
# Conflicts:
#	common/constant.go
#	etcd/keyconf.go
#	model/config.go
#	model/player.go
#	protocol/webapi/common.proto
#	worldsrv/etcd.go
#	worldsrv/welfmgr.go
2025-01-02 11:29:47 +08:00
by 9fd80b867d 年兽活动 2025-01-02 11:18:58 +08:00
29 changed files with 3410 additions and 39 deletions

View File

@ -330,7 +330,9 @@ const (
GainWayCompoundGain = 119 // 道具合成获得
GainWayItem_PigBankTakeCoin = 120 // 购买金币存钱罐奖励道具
GainWayItem_PigBankTakeDiamond = 121 // 购买钻石存钱罐奖励道具
GainWayRedPacket = 122 // 红包奖励
GainWayNianCost = 122 //年兽活动消耗
GainWayNianGain = 123 //年兽活动获得
GainWayRedPacket = 124 // 红包奖励
)
// 后台选择 金币变化类型 的充值 类型id号起始
@ -563,27 +565,29 @@ const (
// 道具ID
const (
ItemIDCoin = 100001 // 金币对应的itemId
ItemIDDiamond = 100002 // 钻石对应的itemId
ItemIDMoneyPond = 100003 // 玩家金币池对应物品Id
ItemIDVipExp = 100005 // VIP经验对应的物品Id
ItemIDPhoneScore = 100006 // 手机抽奖积分
ItemIDWeekScore = 100004 // 周活跃积分
ItemIDGiftBox = 50001 // 碎片礼盒
ItemIDCollectBox = 50002 // 集卡礼盒
ItemIDLike = 100007 // 点赞
ItemIDCoffee = 100008 // 咖啡
ItemIDBucket = 100009 // 水桶
ItemIDSlippers = 100010 // 拖鞋
ItemIDPermit = 100011 // 赛季通行证积分
ItemIDLong = 50013 // 龙币
ItemIDPetSkill = 11001 //宠物技能升级道具
ItemIDVCard = 30001 // v卡
ItemIDJCard = 30002 // 金券
ItemDiamondScore = 100012 //钻石积分
ItemIDClawdoll = 40003 // 娃娃卡
ItemDollCard = 40004 // 娃娃卡积分
ItemIDRoomCard = 40002 // 房卡
ItemIDCoin = 100001 // 金币对应的itemId
ItemIDDiamond = 100002 // 钻石对应的itemId
ItemIDMoneyPond = 100003 // 玩家金币池对应物品Id
ItemIDVipExp = 100005 // VIP经验对应的物品Id
ItemIDPhoneScore = 100006 // 手机抽奖积分
ItemIDWeekScore = 100004 // 周活跃积分
ItemIDGiftBox = 50001 // 碎片礼盒
ItemIDCollectBox = 50002 // 集卡礼盒
ItemIDLike = 100007 // 点赞
ItemIDCoffee = 100008 // 咖啡
ItemIDBucket = 100009 // 水桶
ItemIDSlippers = 100010 // 拖鞋
ItemIDPermit = 100011 // 赛季通行证积分
ItemIDLong = 50013 // 龙币
ItemIDPetSkill = 11001 //宠物技能升级道具
ItemIDVCard = 30001 // v卡
ItemIDJCard = 30002 // 金券
ItemDiamondScore = 100012 //钻石积分
ItemIDClawdoll = 40003 // 娃娃卡
ItemDollCard = 40004 // 娃娃卡积分
ItemIDRoomCard = 40002 // 房卡
ItemIDLittleGuaranteed = 50014 //小爆竹
ItemIDBigGuaranteed = 50015 //大爆竹
)
func ToItemId(id int32) int32 {
@ -695,6 +699,7 @@ const (
TaskTypeTienlenWinCoin = 29 // Tienlen赢取金币数量
TaskTypeRankMatchWinTimes = 30 // 排位胜利次数
TaskTypeBuyPermit = 31 // 购买典藏通行证
TaskTypeBuyRedBag = 32 // 参与红包雨活动
)
const (
@ -712,6 +717,8 @@ const (
TaskActivityTypeAchieve = 5 // 成就任务
TaskActivityTypePermitEveryDay = 6 // 赛季通行证每日任务
TaskActivityTypePermit = 7 // 赛季通行证任务
TaskActivityTypeNianEveryDay = 8 // 年兽每日任务
TaskActivityTypeNian = 9 // 活动期间年兽任务
)
const HeadRange = 3 // 机器人头像id范围

Binary file not shown.

View File

@ -7226,6 +7226,80 @@
"CompositionMax": 1,
"Location": "0",
"Describe": "作用:用于报名特殊钻石赛事;\n产出途径存钱罐"
},
{
"Id": 50014,
"Name": "爆竹",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 28,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"SaleType": 1,
"SaleGold": 5000,
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "可在年兽活动中击退年兽,获得奖品"
},
{
"Id": 50015,
"Name": "火箭爆竹",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 28,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"SaleType": 1,
"SaleGold": 5000,
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "可在年兽活动中击退年兽,获得奖品"
}
]
}

View File

@ -0,0 +1,27 @@
4
SignReward50014,10;100001,100000" 签到奖励
. SignExcReward50015,1"签到额外奖励
=SignExcRewardMax2"$签到额外奖励赠送次数上限
9SignExcRewardProp30"签到额外奖励赠送概率
BossExp6000000"
BOSS血量
9
BossReward100001,100000;100002,10"BOSS击杀奖励
0 LuckyRankNeed110000"幸运榜上榜条件
0RankNeed80000000"总伤害榜上榜条件
@ LittleHurtGold 80000,120000"小爆竹造成的伤害范围
>
 BigHurtGold 400000,600000"大爆竹造成的伤害范围
4 
BigHurtExc30001"大爆竹额外掉落道具ID
> BigHurtExcNumber10,30"!大爆竹额外掉落数量范围
5 LittleGuaranteed30"小爆竹保底掉落次数
ALittleGuaranteedReward100002,5"小爆竹保底掉落物品
2 BigGuaranteed10"大爆竹保底掉落次数
?BigGuaranteedReward 30001,100"大爆竹保底掉落物品
.
GiftShopID991001,991002,991003"礼包ID
@ GiftShopLimit3,0,0"&礼包每日限购次数,0为不限购
4 BossExcLimit30"年兽死亡额外掉落要求
" BuffCount1"Buff生效次数

View File

@ -0,0 +1,124 @@
{
"Arr": [
{
"Id": 1,
"PorpName": "SignReward",
"PropValue": "50014,10;100001,100000",
"PropDec": "签到奖励"
},
{
"Id": 2,
"PorpName": "SignExcReward",
"PropValue": "50015,1",
"PropDec": "签到额外奖励"
},
{
"Id": 3,
"PorpName": "SignExcRewardMax",
"PropValue": "2",
"PropDec": "签到额外奖励赠送次数上限"
},
{
"Id": 4,
"PorpName": "SignExcRewardProp",
"PropValue": "30",
"PropDec": "签到额外奖励赠送概率"
},
{
"Id": 5,
"PorpName": "BossExp",
"PropValue": "6000000",
"PropDec": "BOSS血量"
},
{
"Id": 6,
"PorpName": "BossReward",
"PropValue": "100001,100000;100002,10",
"PropDec": "BOSS击杀奖励"
},
{
"Id": 7,
"PorpName": "LuckyRankNeed",
"PropValue": "110000",
"PropDec": "幸运榜上榜条件"
},
{
"Id": 8,
"PorpName": "RankNeed",
"PropValue": "80000000",
"PropDec": "总伤害榜上榜条件"
},
{
"Id": 9,
"PorpName": "LittleHurtGold",
"PropValue": "80000,120000",
"PropDec": "小爆竹造成的伤害范围"
},
{
"Id": 10,
"PorpName": "BigHurtGold",
"PropValue": "400000,600000",
"PropDec": "大爆竹造成的伤害范围"
},
{
"Id": 11,
"PorpName": "BigHurtExc",
"PropValue": "30001",
"PropDec": "大爆竹额外掉落道具ID"
},
{
"Id": 12,
"PorpName": "BigHurtExcNumber",
"PropValue": "10,30",
"PropDec": "大爆竹额外掉落数量范围"
},
{
"Id": 13,
"PorpName": "LittleGuaranteed",
"PropValue": "30",
"PropDec": "小爆竹保底掉落次数"
},
{
"Id": 14,
"PorpName": "LittleGuaranteedReward",
"PropValue": "100002,5",
"PropDec": "小爆竹保底掉落物品"
},
{
"Id": 15,
"PorpName": "BigGuaranteed",
"PropValue": "10",
"PropDec": "大爆竹保底掉落次数"
},
{
"Id": 16,
"PorpName": "BigGuaranteedReward",
"PropValue": "30001,100",
"PropDec": "大爆竹保底掉落物品"
},
{
"Id": 17,
"PorpName": "GiftShopID",
"PropValue": "991001,991002,991003",
"PropDec": "礼包ID"
},
{
"Id": 18,
"PorpName": "GiftShopLimit",
"PropValue": "3,0,0",
"PropDec": "礼包每日限购次数,0为不限购"
},
{
"Id": 19,
"PorpName": "BossExcLimit",
"PropValue": "30",
"PropDec": "年兽死亡额外掉落要求"
},
{
"Id": 20,
"PorpName": "BuffCount",
"PropValue": "1",
"PropDec": "Buff生效次数"
}
]
}

View File

@ -0,0 +1,84 @@
"¡<>"¢<>d"¹ê
"¡<>"¢<>d"¸ê
"¡<>"¢<>d"¸ê
"¢<>d"¡<>
"¡<>"¢<>c
"¡<>"¢<>b
"¡<>"¢<>a
"¡<>"¢<>`
  "¡<>"¢<>_


"¡<>"¢<>^
  "¡<>"¢<>]
  "¡<>"¢<>\
  "¡<>"¢<>[
"¡<>"¢<>Z
"¡<>"¢<>Y
"¡<>"¢<>X
"¡<>"¢<>W
"¡<>"¢<>V
"¡<>"¢<>U
"¡<>"¢<>T
"¡<>"¢<>S
"¡<>"¢<>R
"¡<>"¢<>Q
"¡<>"¢<>P
"¡<>"¢<>O
"¡<>"¢<>N
"¡<>"¢<>M
"¡<>"¢<>L
"¡<>"¢<>K
"¡<>"¢<>J
"¡<>"¢<>I
  "¡<>"¢<>H
!!"¡<>"¢<>G
"""¡<>"¢<>F
##"¡<>"¢<>E
$$"¡<>"¢<>D
%%"¡<>"¢<>C
&&"¢<>B"¡<>
''"¡<>"¢<>A
(("¡<>"¢<>@
)"¡<>"¢<>d"¹ê
*"¢<>d"¸ê"¡<>
+"¡<>"¢<>d"¸ê
,"¢<>d"¡<>
-"¡<>"¢<>c
."¡<>"¢<>b
/"¡<>"¢<>a
0"¡<>"¢<>`
1 "¡<>"¢<>_
2
"¡<>"¢<>^
3 "¡<>"¢<>]
4 "¡<>"¢<>\
5 "¡<>"¢<>[
6"¡<>"¢<>Z
7"¡<>"¢<>Y
8"¡<>"¢<>X
9"¡<>"¢<>W
:"¡<>"¢<>V
;"¡<>"¢<>U
<"¡<>"¢<>T
="¡<>"¢<>S
>"¡<>"¢<>R
?"¡<>"¢<>Q
@"¢<>P"¡<>
A"¢<>O"¡<>
B"¡<>"¢<>N
C"¡<>"¢<>M
D"¡<>"¢<>L
E"¡<>"¢<>K
F"¡<>"¢<>J
G"¡<>"¢<>I
H "¡<>"¢<>H
I!"¡<>"¢<>G
J""¡<>"¢<>F
K#"¡<>"¢<>E
L$"¡<>"¢<>D
M%"¡<>"¢<>C
N&"¡<>"¢<>B
O'"¡<>"¢<>A
P("¡<>"¢<>@

View File

@ -0,0 +1,730 @@
{
"Arr": [
{
"Id": 1,
"RankType": 1,
"RankLevelId": 1,
"AwardMap": {
"100001": 30,
"100002": 100,
"30009": 2
}
},
{
"Id": 2,
"RankType": 1,
"RankLevelId": 2,
"AwardMap": {
"100001": 30,
"100002": 100,
"30008": 2
}
},
{
"Id": 3,
"RankType": 1,
"RankLevelId": 3,
"AwardMap": {
"100001": 30,
"100002": 100,
"30008": 1
}
},
{
"Id": 4,
"RankType": 1,
"RankLevelId": 4,
"AwardMap": {
"100001": 30,
"100002": 100
}
},
{
"Id": 5,
"RankType": 1,
"RankLevelId": 5,
"AwardMap": {
"100001": 30,
"100002": 99
}
},
{
"Id": 6,
"RankType": 1,
"RankLevelId": 6,
"AwardMap": {
"100001": 30,
"100002": 98
}
},
{
"Id": 7,
"RankType": 1,
"RankLevelId": 7,
"AwardMap": {
"100001": 30,
"100002": 97
}
},
{
"Id": 8,
"RankType": 1,
"RankLevelId": 8,
"AwardMap": {
"100001": 30,
"100002": 96
}
},
{
"Id": 9,
"RankType": 1,
"RankLevelId": 9,
"AwardMap": {
"100001": 30,
"100002": 95
}
},
{
"Id": 10,
"RankType": 1,
"RankLevelId": 10,
"AwardMap": {
"100001": 30,
"100002": 94
}
},
{
"Id": 11,
"RankType": 1,
"RankLevelId": 11,
"AwardMap": {
"100001": 30,
"100002": 93
}
},
{
"Id": 12,
"RankType": 1,
"RankLevelId": 12,
"AwardMap": {
"100001": 30,
"100002": 92
}
},
{
"Id": 13,
"RankType": 1,
"RankLevelId": 13,
"AwardMap": {
"100001": 30,
"100002": 91
}
},
{
"Id": 14,
"RankType": 1,
"RankLevelId": 14,
"AwardMap": {
"100001": 30,
"100002": 90
}
},
{
"Id": 15,
"RankType": 1,
"RankLevelId": 15,
"AwardMap": {
"100001": 30,
"100002": 89
}
},
{
"Id": 16,
"RankType": 1,
"RankLevelId": 16,
"AwardMap": {
"100001": 30,
"100002": 88
}
},
{
"Id": 17,
"RankType": 1,
"RankLevelId": 17,
"AwardMap": {
"100001": 30,
"100002": 87
}
},
{
"Id": 18,
"RankType": 1,
"RankLevelId": 18,
"AwardMap": {
"100001": 30,
"100002": 86
}
},
{
"Id": 19,
"RankType": 1,
"RankLevelId": 19,
"AwardMap": {
"100001": 30,
"100002": 85
}
},
{
"Id": 20,
"RankType": 1,
"RankLevelId": 20,
"AwardMap": {
"100001": 30,
"100002": 84
}
},
{
"Id": 21,
"RankType": 1,
"RankLevelId": 21,
"AwardMap": {
"100001": 30,
"100002": 83
}
},
{
"Id": 22,
"RankType": 1,
"RankLevelId": 22,
"AwardMap": {
"100001": 30,
"100002": 82
}
},
{
"Id": 23,
"RankType": 1,
"RankLevelId": 23,
"AwardMap": {
"100001": 30,
"100002": 81
}
},
{
"Id": 24,
"RankType": 1,
"RankLevelId": 24,
"AwardMap": {
"100001": 30,
"100002": 80
}
},
{
"Id": 25,
"RankType": 1,
"RankLevelId": 25,
"AwardMap": {
"100001": 30,
"100002": 79
}
},
{
"Id": 26,
"RankType": 1,
"RankLevelId": 26,
"AwardMap": {
"100001": 30,
"100002": 78
}
},
{
"Id": 27,
"RankType": 1,
"RankLevelId": 27,
"AwardMap": {
"100001": 30,
"100002": 77
}
},
{
"Id": 28,
"RankType": 1,
"RankLevelId": 28,
"AwardMap": {
"100001": 30,
"100002": 76
}
},
{
"Id": 29,
"RankType": 1,
"RankLevelId": 29,
"AwardMap": {
"100001": 30,
"100002": 75
}
},
{
"Id": 30,
"RankType": 1,
"RankLevelId": 30,
"AwardMap": {
"100001": 30,
"100002": 74
}
},
{
"Id": 31,
"RankType": 1,
"RankLevelId": 31,
"AwardMap": {
"100001": 30,
"100002": 73
}
},
{
"Id": 32,
"RankType": 1,
"RankLevelId": 32,
"AwardMap": {
"100001": 30,
"100002": 72
}
},
{
"Id": 33,
"RankType": 1,
"RankLevelId": 33,
"AwardMap": {
"100001": 30,
"100002": 71
}
},
{
"Id": 34,
"RankType": 1,
"RankLevelId": 34,
"AwardMap": {
"100001": 30,
"100002": 70
}
},
{
"Id": 35,
"RankType": 1,
"RankLevelId": 35,
"AwardMap": {
"100001": 30,
"100002": 69
}
},
{
"Id": 36,
"RankType": 1,
"RankLevelId": 36,
"AwardMap": {
"100001": 30,
"100002": 68
}
},
{
"Id": 37,
"RankType": 1,
"RankLevelId": 37,
"AwardMap": {
"100001": 30,
"100002": 67
}
},
{
"Id": 38,
"RankType": 1,
"RankLevelId": 38,
"AwardMap": {
"100001": 30,
"100002": 66
}
},
{
"Id": 39,
"RankType": 1,
"RankLevelId": 39,
"AwardMap": {
"100001": 30,
"100002": 65
}
},
{
"Id": 40,
"RankType": 1,
"RankLevelId": 40,
"AwardMap": {
"100001": 30,
"100002": 64
}
},
{
"Id": 41,
"RankType": 2,
"RankLevelId": 1,
"AwardMap": {
"100001": 30,
"100002": 100,
"30009": 2
}
},
{
"Id": 42,
"RankType": 2,
"RankLevelId": 2,
"AwardMap": {
"100001": 30,
"100002": 100,
"30008": 2
}
},
{
"Id": 43,
"RankType": 2,
"RankLevelId": 3,
"AwardMap": {
"100001": 30,
"100002": 100,
"30008": 1
}
},
{
"Id": 44,
"RankType": 2,
"RankLevelId": 4,
"AwardMap": {
"100001": 30,
"100002": 100
}
},
{
"Id": 45,
"RankType": 2,
"RankLevelId": 5,
"AwardMap": {
"100001": 30,
"100002": 99
}
},
{
"Id": 46,
"RankType": 2,
"RankLevelId": 6,
"AwardMap": {
"100001": 30,
"100002": 98
}
},
{
"Id": 47,
"RankType": 2,
"RankLevelId": 7,
"AwardMap": {
"100001": 30,
"100002": 97
}
},
{
"Id": 48,
"RankType": 2,
"RankLevelId": 8,
"AwardMap": {
"100001": 30,
"100002": 96
}
},
{
"Id": 49,
"RankType": 2,
"RankLevelId": 9,
"AwardMap": {
"100001": 30,
"100002": 95
}
},
{
"Id": 50,
"RankType": 2,
"RankLevelId": 10,
"AwardMap": {
"100001": 30,
"100002": 94
}
},
{
"Id": 51,
"RankType": 2,
"RankLevelId": 11,
"AwardMap": {
"100001": 30,
"100002": 93
}
},
{
"Id": 52,
"RankType": 2,
"RankLevelId": 12,
"AwardMap": {
"100001": 30,
"100002": 92
}
},
{
"Id": 53,
"RankType": 2,
"RankLevelId": 13,
"AwardMap": {
"100001": 30,
"100002": 91
}
},
{
"Id": 54,
"RankType": 2,
"RankLevelId": 14,
"AwardMap": {
"100001": 30,
"100002": 90
}
},
{
"Id": 55,
"RankType": 2,
"RankLevelId": 15,
"AwardMap": {
"100001": 30,
"100002": 89
}
},
{
"Id": 56,
"RankType": 2,
"RankLevelId": 16,
"AwardMap": {
"100001": 30,
"100002": 88
}
},
{
"Id": 57,
"RankType": 2,
"RankLevelId": 17,
"AwardMap": {
"100001": 30,
"100002": 87
}
},
{
"Id": 58,
"RankType": 2,
"RankLevelId": 18,
"AwardMap": {
"100001": 30,
"100002": 86
}
},
{
"Id": 59,
"RankType": 2,
"RankLevelId": 19,
"AwardMap": {
"100001": 30,
"100002": 85
}
},
{
"Id": 60,
"RankType": 2,
"RankLevelId": 20,
"AwardMap": {
"100001": 30,
"100002": 84
}
},
{
"Id": 61,
"RankType": 2,
"RankLevelId": 21,
"AwardMap": {
"100001": 30,
"100002": 83
}
},
{
"Id": 62,
"RankType": 2,
"RankLevelId": 22,
"AwardMap": {
"100001": 30,
"100002": 82
}
},
{
"Id": 63,
"RankType": 2,
"RankLevelId": 23,
"AwardMap": {
"100001": 30,
"100002": 81
}
},
{
"Id": 64,
"RankType": 2,
"RankLevelId": 24,
"AwardMap": {
"100001": 30,
"100002": 80
}
},
{
"Id": 65,
"RankType": 2,
"RankLevelId": 25,
"AwardMap": {
"100001": 30,
"100002": 79
}
},
{
"Id": 66,
"RankType": 2,
"RankLevelId": 26,
"AwardMap": {
"100001": 30,
"100002": 78
}
},
{
"Id": 67,
"RankType": 2,
"RankLevelId": 27,
"AwardMap": {
"100001": 30,
"100002": 77
}
},
{
"Id": 68,
"RankType": 2,
"RankLevelId": 28,
"AwardMap": {
"100001": 30,
"100002": 76
}
},
{
"Id": 69,
"RankType": 2,
"RankLevelId": 29,
"AwardMap": {
"100001": 30,
"100002": 75
}
},
{
"Id": 70,
"RankType": 2,
"RankLevelId": 30,
"AwardMap": {
"100001": 30,
"100002": 74
}
},
{
"Id": 71,
"RankType": 2,
"RankLevelId": 31,
"AwardMap": {
"100001": 30,
"100002": 73
}
},
{
"Id": 72,
"RankType": 2,
"RankLevelId": 32,
"AwardMap": {
"100001": 30,
"100002": 72
}
},
{
"Id": 73,
"RankType": 2,
"RankLevelId": 33,
"AwardMap": {
"100001": 30,
"100002": 71
}
},
{
"Id": 74,
"RankType": 2,
"RankLevelId": 34,
"AwardMap": {
"100001": 30,
"100002": 70
}
},
{
"Id": 75,
"RankType": 2,
"RankLevelId": 35,
"AwardMap": {
"100001": 30,
"100002": 69
}
},
{
"Id": 76,
"RankType": 2,
"RankLevelId": 36,
"AwardMap": {
"100001": 30,
"100002": 68
}
},
{
"Id": 77,
"RankType": 2,
"RankLevelId": 37,
"AwardMap": {
"100001": 30,
"100002": 67
}
},
{
"Id": 78,
"RankType": 2,
"RankLevelId": 38,
"AwardMap": {
"100001": 30,
"100002": 66
}
},
{
"Id": 79,
"RankType": 2,
"RankLevelId": 39,
"AwardMap": {
"100001": 30,
"100002": 65
}
},
{
"Id": 80,
"RankType": 2,
"RankLevelId": 40,
"AwardMap": {
"100001": 30,
"100002": 64
}
}
]
}

Binary file not shown.

View File

@ -1234,6 +1234,236 @@
"Award": {
"100011": 50
}
},
{
"Id": 13001,
"Order": 1,
"Name": "年兽活动",
"Des": "领取转盘签到奖励",
"ActivityType": 8,
"TaskType": 17,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50014": 10
}
},
{
"Id": 13002,
"Order": 2,
"Name": "年兽活动",
"Des": "在线时长60分钟",
"ActivityType": 8,
"TaskType": 21,
"TargetTimes": 3600,
"FinishTimes": 1,
"Award": {
"50014": 10
}
},
{
"Id": 13003,
"Order": 3,
"Name": "年兽活动",
"Des": "购买任意金币1次",
"ActivityType": 8,
"TaskType": 2,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50014": 10
},
"Position": [
0,
1
]
},
{
"Id": 13004,
"Order": 4,
"Name": "年兽活动",
"Des": "购买任意存钱罐1次",
"ActivityType": 8,
"TaskType": 22,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50014": 10
}
},
{
"Id": 13005,
"Order": 5,
"Name": "年兽活动",
"Des": "参与大众场对局获得胜利3次",
"ActivityType": 8,
"TaskType": 23,
"TargetTimes": 3,
"FinishTimes": 1,
"Award": {
"50014": 10
},
"GameType": 1
},
{
"Id": 13006,
"Order": 6,
"Name": "年兽活动",
"Des": "参与排位赛获得胜利3次",
"ActivityType": 8,
"TaskType": 30,
"TargetTimes": 3,
"FinishTimes": 1,
"Award": {
"50014": 10
},
"GameType": 1
},
{
"Id": 13007,
"Order": 7,
"Name": "年兽活动",
"Des": "邀请好友进行私人桌对局1次",
"ActivityType": 8,
"TaskType": 24,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50014": 10
},
"GameType": 1
},
{
"Id": 13008,
"Order": 8,
"Name": "年兽活动",
"Des": "成功参与比赛场3次",
"ActivityType": 8,
"TaskType": 25,
"TargetTimes": 3,
"FinishTimes": 1,
"Award": {
"50014": 10
},
"GameType": 1
},
{
"Id": 13009,
"Order": 9,
"Name": "年兽活动",
"Des": "比赛场获得前十名1次",
"ActivityType": 8,
"TaskType": 26,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50014": 10
},
"GameType": 1
},
{
"Id": 13010,
"Order": 10,
"Name": "年兽活动",
"Des": "今日累计消耗100钻石",
"ActivityType": 8,
"TaskType": 27,
"TargetTimes": 100,
"FinishTimes": 1,
"Award": {
"50014": 10
}
},
{
"Id": 13011,
"Order": 11,
"Name": "年兽活动",
"Des": "充值任意金额",
"ActivityType": 8,
"TaskType": 7,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50014": 10
},
"Position": [
1,
1
]
},
{
"Id": 13012,
"Order": 12,
"Name": "年兽活动",
"Des": "累计领取转盘签到奖励7天",
"ActivityType": 9,
"TaskType": 17,
"TargetTimes": 7,
"FinishTimes": 1,
"Award": {
"50014": 10
}
},
{
"Id": 13013,
"Order": 13,
"Name": "年兽活动",
"Des": "参与红包雨活动1次",
"ActivityType": 8,
"TaskType": 32,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50015": 10
}
},
{
"Id": 13014,
"Order": 14,
"Name": "年兽活动",
"Des": "累计充值$9.99",
"ActivityType": 9,
"TaskType": 7,
"TargetTimes": 999,
"FinishTimes": 1,
"Award": {
"50015": 10
},
"Position": [
1,
1
]
},
{
"Id": 13015,
"Order": 15,
"Name": "年兽活动",
"Des": "累计充值$19.99",
"ActivityType": 9,
"TaskType": 7,
"TargetTimes": 1999,
"FinishTimes": 1,
"Award": {
"50015": 10
},
"Position": [
1,
1
]
},
{
"Id": 13016,
"Order": 16,
"Name": "年兽活动",
"Des": "累计赚取10B金币",
"ActivityType": 9,
"TaskType": 11,
"TargetTimes": 10000000000,
"FinishTimes": 1,
"Award": {
"50015": 10
},
"GameType": 1
}
]
}

View File

@ -34,7 +34,7 @@ const (
ETCDKEY_ACT_Invite = "/game/act_invite" // 邀请活动配置
ETCDKEY_ACT_Permit = "/game/act_permit" // 赛季通行证配置
ETCDKEY_DIAMOND_LOTTERY = "/game/diamond_lottery" // 钻石抽奖配置
ETCDKEY_Item = "/game/item/" // 道具列表
ETCDKEY_Item = "/game/item" // 道具列表
ETCDKEY_SKin = "/game/skin_config" // 皮肤配置
ETCDKEY_RANK_TYPE = "/game/RankType" // 排行榜奖励配置
ETCDKEY_AWARD_CONFIG = "/game/awardlog_config" //获奖记录
@ -51,5 +51,7 @@ const (
ETCDKEY_LotteryUser = "/game/user_lottery" //抽奖用户必中配置
ETCDKEY_PigBankDiamond = "/game/pigbank_diamond" //存钱罐消耗获得
ETCDKEY_PigBankProp = "/game/pigbank_prop" //存钱罐属性
ETCDKEY_NianConfig = "/game/activity_nian" //年兽活动配置
ETCDKEY_REDPACKET = "/game/act_redpacket" //红包配置
)

View File

@ -17,15 +17,15 @@ import (
*/
const (
OpAll = 0
OpTurnplate = 1
OpBlindBox = 2
OpFirstPay = 3
OpContinuousPay = 4
OpPhoneLottery = 5
OpCollect = 6
OpDiamondLottery = 7
OpRedPacket = 8 // 红包活动
OpAll = 0
OpTurnplate = 1
OpBlindBox = 2
OpFirstPay = 3
OpContinuousPay = 4
OpPhoneLottery = 5
OpCollect = 6
OpNian = 7
OpRedPacket = 8 // 红包活动
)
const (
@ -168,6 +168,8 @@ type AllConfig struct {
*webapi.GamePigBankDiamondConfig
// 存钱罐属性
*webapi.GamePigBankPropConfig
//年兽配置
*webapi.ActivityNianConfig
// 红包配置
*webapi.RedPacketConfig
}

View File

@ -564,6 +564,7 @@ type WelfareData struct {
DiamondBank *DiamondBankData // 钻石储存罐
PermitAward map[int32]int64 // 赛季通行证奖励领取时间
PermitExchange map[int32][]int64 // 赛季通行证兑换次数, 多次的兑换时间
NianData *NianData //年兽活动数据
RedPacket map[int64]int // 红包活动 活动id:领取次数
}
@ -581,7 +582,10 @@ func NewWelfareData() *WelfareData {
},
PermitAward: make(map[int32]int64),
PermitExchange: make(map[int32][]int64),
RedPacket: make(map[int64]int),
NianData: &NianData{
OtherAwardNum: make(map[int32]int32),
},
RedPacket: make(map[int64]int),
}
}
@ -674,6 +678,19 @@ type WebPlayerDataParam struct {
Long, PermitScore int64
}
type NianData struct {
ActivityStartTime int64 //活动开始时间
ActivityEndTime int64 //活动结束时间
BossHp int64 //Boss当前血量
BuffStatus bool //Buff领取状态
BuffCount int64 //Buff剩余生效次数
SignAwardTime int64 //签到奖励领取时间
BossDieCount int32 //BOSS死亡次数
LittleHurt int32 //小爆竹次数
BigHurt int32 //大爆竹次数
OtherAwardNum map[int32]int32 //奖励掉落数量
}
func ConvertPlayerDataToWebData(param *WebPlayerDataParam) *webapi.PlayerData {
if param == nil || param.PlayerData == nil {
return nil

1167
protocol/activity/nian.pb.go Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,93 @@
syntax = "proto3";
package activity;
option go_package = "mongo.games.com/game/protocol/activity";
enum NianPacketID {
PACKET_Nian_ZERO = 0; //
PACKET_CSNianData = 2660; //
PACKET_SCNianData = 2661; //
PACKET_CSNianBuff = 2662; // BUFF
PACKET_SCNianBuff = 2663; // Buff信息
PACKET_CSNianRankData = 2664; //
PACKET_SCNianRankData = 2665; //
PACKET_CSNianAttack = 2666; //
PACKET_SCNianAttackData = 2667; //
PACKET_CSNianSignAward = 2668; //
PACKET_SCNianSignAward = 2669; //
}
//
//PACKET_CSNianData
message CSNianData{
}
//PACKET_SCNianData
message SCNianData{
int64 ActivityStartTime = 1; //
int64 ActivityEndTime = 2; //
int64 BossMaxHp = 3; //Boss最大血量
int64 BossHp = 4; //Boss当前血量
repeated RankData LuckData = 5;//
int64 AwardTime = 6;//
int64 BuffCount = 7;//Buff剩余次数
bool BuffStatus = 8;//Buff领取状态
int32 On = 9;// 1 2
int64 SignAwardTime = 10;// 0-
}
//
//BUFF
//PACKET_CSNianBuff
message CSNianBuff{
}
//PACKET_SCNianBuff
message SCNianBuff{
int64 BuffCount = 1; //BUFF剩余次数
}
//
//PACKET_CSNianRankData
message CSNianRankData{
int32 TypeId = 1;//1- 2-
}
//PACKET_SCNianRankData
message SCNianRankData{
int32 TypeId = 1;
repeated RankData Data = 2;
}
message RankData{
int32 RankId =1;
string Name = 2;
int32 Icon = 3;
int64 Score = 4;
repeated RankAwardData Award = 5;
}
message RankAwardData{
int32 ItemId =1;
int64 ItemNum = 2;
}
//
//PACKET_CSNianAttack
message CSNianAttack{
int32 TypeId = 1; //1- 2-*10 3-
}
//PACKET_SCNianAttackData
message SCNianAttackData{
int32 TypeId = 1; //1- 2-*10 3-
int64 BossHp = 2; //BOSS当前血量
repeated RankAwardData Award = 3; //
int64 AttackHp = 4; //
bool IsDie = 5; //BOSS是否死亡
repeated RankAwardData DieAward = 6;//BOSS死亡奖励
int64 BuffCount = 7; //BUFF剩余次数
repeated RankAwardData ExtraDrop = 8;//
repeated RankAwardData FloorReward = 9;//
}
//
//PACKET_CSNianSignAward
message CSNianSignAward{
}
//PACKET_SCNianSignAward
message SCNianSignAward{
int64 SignAwardTime = 1;
repeated RankAwardData SignAward = 2;//
}

View File

@ -1263,6 +1263,38 @@ message DB_NewPlayerArray {
repeated DB_NewPlayer Arr = 1;
}
message DB_NewYearActivity {
int32 Id = 1;
string PorpName = 2;
string PropValue = 3;
string PropDec = 4;
}
message DB_NewYearActivityArray {
repeated DB_NewYearActivity Arr = 1;
}
message DB_NewYearRankReward {
int32 Id = 1;
int32 RankType = 2;
int32 RankLevelId = 3;
map<int64, int64> AwardMap = 4;
}
message DB_NewYearRankRewardArray {
repeated DB_NewYearRankReward Arr = 1;
}
message DB_PassShow {
int32 Id = 1;

View File

@ -44,7 +44,7 @@ message SCTaskList{
//
// PACKET_CSTaskReward
message CSTaskReward{
int32 Tp = 1; // 1: 2: 3: 4: 5: 6:
int32 Tp = 1; // 1: 2: 3: 4: 5: 6: 8: 9
int32 Id = 2; // id; 0
}
// PACKET_SCTaskReward

View File

@ -1097,6 +1097,29 @@ message GamePigBankPropConfig{
string Platform = 1; //
repeated PigBankPropInfo PropInfo = 2; //
}
//etcd /game/activity_nian
message ActivityNianConfig {
string Platform = 1; //
repeated NianInfo List = 2;
int32 Switch = 3; // 1. 2.
}
message NianInfo{
string ActivityStart = 1; //
string ActivityEnd = 2; //
int64 BuffStartTime = 3; //Buff领取开始时间 18
int64 BuffEndTime = 4; //Buff领取结束时间 21
repeated ItemInfo SignReward = 5; //
repeated ItemInfo BossDieReward = 6; // BOSS奖励
repeated NianDropInfo BossDieOtherReward = 7; // Boss额外奖励
}
message NianDropInfo{
int32 Id = 1;
int32 ItemId = 2; // ID
int64 ItemNum = 3; //
int32 DropRate = 4;//
int32 DropUp = 5;//
}
// etcd /game/act_redpacket
message RedPacketConfig{

View File

@ -0,0 +1,77 @@
// Code generated by xlsx2proto.
// DO NOT EDIT!
package srvdata
import (
"google.golang.org/protobuf/proto"
"mongo.games.com/game/protocol/server"
)
var PBDB_NewYearActivityMgr = &DB_NewYearActivityMgr{
Datas: &server.DB_NewYearActivityArray{},
pool: make(map[int32]*server.DB_NewYearActivity),
}
type DB_NewYearActivityMgr struct {
Datas *server.DB_NewYearActivityArray
pool map[int32]*server.DB_NewYearActivity
}
func (this *DB_NewYearActivityMgr) unmarshal(data []byte) error {
err := proto.Unmarshal(data, this.Datas)
if err == nil {
this.arrangeData()
}
return err
}
func (this *DB_NewYearActivityMgr) reunmarshal(data []byte) error {
newDatas := &server.DB_NewYearActivityArray{}
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_NewYearActivityMgr) 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_NewYearActivityMgr) GetData(id int32) *server.DB_NewYearActivity {
if data, ok := this.pool[id]; ok {
return data
}
return nil
}
func init() {
DataMgr.register("DB_NewYearActivity.dat", &ProtobufDataLoader{dh: PBDB_NewYearActivityMgr})
}

View File

@ -0,0 +1,77 @@
// Code generated by xlsx2proto.
// DO NOT EDIT!
package srvdata
import (
"google.golang.org/protobuf/proto"
"mongo.games.com/game/protocol/server"
)
var PBDB_NewYearRankRewardMgr = &DB_NewYearRankRewardMgr{
Datas: &server.DB_NewYearRankRewardArray{},
pool: make(map[int32]*server.DB_NewYearRankReward),
}
type DB_NewYearRankRewardMgr struct {
Datas *server.DB_NewYearRankRewardArray
pool map[int32]*server.DB_NewYearRankReward
}
func (this *DB_NewYearRankRewardMgr) unmarshal(data []byte) error {
err := proto.Unmarshal(data, this.Datas)
if err == nil {
this.arrangeData()
}
return err
}
func (this *DB_NewYearRankRewardMgr) reunmarshal(data []byte) error {
newDatas := &server.DB_NewYearRankRewardArray{}
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_NewYearRankRewardMgr) 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_NewYearRankRewardMgr) GetData(id int32) *server.DB_NewYearRankReward {
if data, ok := this.pool[id]; ok {
return data
}
return nil
}
func init() {
DataMgr.register("DB_NewYearRankReward.dat", &ProtobufDataLoader{dh: PBDB_NewYearRankRewardMgr})
}

505
worldsrv/action_nian.go Normal file
View File

@ -0,0 +1,505 @@
package main
import (
"math/rand"
"mongo.games.com/game/common"
"mongo.games.com/game/model"
"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 := PlatformMgrSingleton.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
start, _ := time.Parse(time.DateTime, startTime)
// 转换为时间戳(以秒为单位)
timestamp := start.Unix()
end, _ := time.Parse(time.DateTime, endTime)
endTimestamp := end.Unix()
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
}
pack := &activity.SCNianData{}
pack.BossHp = p.WelfData.NianData.BossHp
pack.BossMaxHp = BossMaxHp
// pack.ActivityStartTime = timestamp
//pack.ActivityEndTime = endTimestamp
pack.ActivityStartTime = 0
pack.ActivityEndTime = 0
pack.AwardTime = p.WelfData.NianData.SignAwardTime
pack.BuffCount = p.WelfData.NianData.BuffCount
pack.BuffStatus = p.WelfData.NianData.BuffStatus
pack.LuckData = nil
pack.SignAwardTime = p.WelfData.NianData.SignAwardTime
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 := PlatformMgrSingleton.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
t, _ := time.Parse(time.DateTime, startTime)
// 转换为时间戳(以秒为单位)
timestamp := t.Unix()
end, _ := time.Parse(time.DateTime, endTime)
endTimestamp := end.Unix()
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 items []*model.Item
items = append(items, &model.Item{
ItemId: int32(itemId),
ItemNum: int64(itemNum),
})
_, _, result := BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: items,
GainWay: common.GainWayNianCost,
Operator: "system",
Remark: "年兽活动消耗",
})
if !result {
return nil
}
//本次攻击总血量
AttackHp := int64(0)
//伤害范围
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("随机到的伤害值是:%d", randomValue)
//计算BUFF
if p.WelfData.NianData.BuffCount > 0 {
randomValue = randomValue + randomValue/2
p.WelfData.NianData.BuffCount -= 1
}
AttackHp += randomValue
if typeId == 3 {
p.WelfData.NianData.BigHurt += 1
//判断是否掉落保底奖励
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])
items = append(items, &model.Item{
ItemId: int32(FloorItemId),
ItemNum: int64(FloorItemNum),
})
floorReward.ItemId = int32(FloorItemId)
floorReward.ItemNum = int64(FloorItemNum)
pack.FloorReward = append(pack.FloorReward, floorReward)
break
}
}
}
//额外掉落
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]
items = append(items, &model.Item{
ItemId: int32(extraItemId),
ItemNum: int64(extraItemNum),
})
extraDrop := &activity.RankAwardData{}
extraDrop.ItemId = int32(extraItemId)
extraDrop.ItemNum = int64(extraItemNum)
pack.ExtraDrop = append(pack.ExtraDrop, extraDrop)
} else {
p.WelfData.NianData.LittleHurt += 1
//判断是否掉落保底奖励
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])
items = append(items, &model.Item{
ItemId: int32(FloorItemId),
ItemNum: int64(FloorItemNum),
})
floorReward.ItemId = int32(FloorItemId)
floorReward.ItemNum = int64(FloorItemNum)
pack.FloorReward = append(pack.FloorReward, floorReward)
break
}
}
}
}
//上榜 幸运榜 总榜
}
p.WelfData.NianData.BossHp -= 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
//获取死亡奖励
for _, value := range sData {
if value.Id == 6 {
str := value.PropValue
strSlice := strings.Split(str, ";")
for _, s := range strSlice {
strSlice1 := strings.Split(s, ",")
bossDieItemId, err := strconv.Atoi(strSlice1[0])
if err != nil {
return nil
}
bossDieItemNum, err := strconv.ParseInt(strSlice1[1], 10, 64)
if err != nil {
return nil
}
bossDieAward = append(bossDieAward, &model.Item{
ItemId: int32(bossDieItemId),
ItemNum: bossDieItemNum,
})
items = append(items, &model.Item{
ItemId: int32(bossDieItemId),
ItemNum: bossDieItemNum,
})
}
break
}
}
//年兽死亡额外掉落
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) {
//后台配置额外掉落
for _, info := range pool.List[0].BossDieOtherReward {
//value.BossDieOtherReward
if p.WelfData.NianData.OtherAwardNum[info.Id] >= info.DropUp {
logger.Logger.Trace("BOSS死亡 额外掉落达到上限 id = ", info.Id, "数量:", p.WelfData.NianData.OtherAwardNum[info.Id])
continue
}
//随机
if rand.Intn(100) < 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])
}
p.WelfData.NianData.OtherAwardNum[info.Id] += int32(otherItemNum)
items = append(items, &model.Item{
ItemId: otherItemId,
ItemNum: otherItemNum,
})
bossDieAward = append(bossDieAward, &model.Item{
ItemId: otherItemId,
ItemNum: otherItemNum,
})
}
}
}
}
items = append(items, &model.Item{
ItemId: common.ItemIDCoin,
ItemNum: AttackHp,
})
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: items,
GainWay: common.GainWayNianGain,
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
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianAttackData), pack)
}
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)
//yearActivity := &server.DB_NewYearActivity{}
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 {
return nil
}
pool := PlatformMgrSingleton.GetConfig(p.Platform).ActivityNianConfig
if pool == nil || pool.List == nil {
return nil
}
if pool.Switch == model.WelfareClose {
logger.Logger.Trace("CSNianSignAward 活动关闭!")
return nil
}
//判断领取时间
if time.Now().Hour() >= int(pool.List[0].BuffStartTime) && time.Now().Hour() <= int(pool.List[0].BuffEndTime) {
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)
}
}
return nil
}
// 领取签到奖励
func CSNianSignAward(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
}
pool := PlatformMgrSingleton.GetConfig(p.Platform).ActivityNianConfig
if pool == nil || pool.List == nil {
return nil
}
if pool.Switch == model.WelfareClose {
logger.Logger.Trace("CSNianSignAward 活动关闭!")
return nil
}
if p.WelfData.NianData == nil {
p.WelfData.NianData = &model.NianData{}
}
if p.WelfData.NianData.SignAwardTime > 0 {
return nil
}
p.WelfData.NianData.SignAwardTime = time.Now().Unix()
//奖励
pack := &activity.SCNianSignAward{}
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)
}
BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform,
SnId: p.SnId,
Change: items,
GainWay: common.GainWayNianGain,
Operator: "system",
Remark: "年兽活动-领取签到奖励获得",
})
p.SendToClient(int(activity.NianPacketID_PACKET_SCNianSignAward), 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)
}

View File

@ -53,7 +53,7 @@ func IsTaskReward(p *Player, id int32) bool {
if data := p.WelfData.Task[id]; data != nil && data.Ts > 0 {
t := srvdata.PBDB_TaskMgr.GetData(id)
switch t.ActivityType {
case common.TaskActivityTypeEveryDay, common.TaskActivityTypePermitEveryDay:
case common.TaskActivityTypeEveryDay, common.TaskActivityTypePermitEveryDay, common.TaskActivityTypeNianEveryDay:
if common.TsInSameDay(time.Now().Unix(), data.Ts) {
return true
}
@ -74,6 +74,24 @@ func IsTaskReward(p *Player, id int32) bool {
return data.Ts >= startTs && data.Ts < endTs
}
return true
case common.TaskActivityTypeNian:
pool := PlatformMgrSingleton.GetConfig(p.Platform).ActivityNianConfig
if pool == nil || pool.List == nil {
return false
}
if pool.Switch == model.WelfareClose {
return false
}
startTime := pool.List[0].ActivityStart
endTime := pool.List[0].ActivityEnd
start, _ := time.Parse(time.DateTime, startTime)
timestamp := start.Unix()
end, _ := time.Parse(time.DateTime, endTime)
endTimestamp := end.Unix()
if timestamp > 0 {
return data.Ts >= timestamp && data.Ts < endTimestamp
}
return true
}
}
}

View File

@ -110,9 +110,10 @@ func init() {
etcd.Register(etcd.ETCDKEY_PigBankDiamond, webapi.GamePigBankDiamondConfig{}, platformConfigEvent)
// 存钱罐属性值
etcd.Register(etcd.ETCDKEY_PigBankProp, webapi.GamePigBankPropConfig{}, platformConfigEvent)
//年兽配置
etcd.Register(etcd.ETCDKEY_NianConfig, webapi.ActivityNianConfig{}, platformConfigEvent)
// 红包配置
etcd.Register(etcd.ETCDKEY_REDPACKET, webapi.RedPacketConfig{}, platformConfigEvent)
}
func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) {
@ -358,9 +359,10 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e
PlatformMgrSingleton.GetConfig(config.Platform).GamePigBankDiamondConfig = config
case *webapi.GamePigBankPropConfig:
PlatformMgrSingleton.GetConfig(config.Platform).GamePigBankPropConfig = config
case *webapi.ActivityNianConfig:
WelfareMgrSington.UpdateActivityNianStatus(config)
case *webapi.RedPacketConfig:
WelfareMgrSington.UpdateRedPacket(config, isInit)
default:
logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey)
}

View File

@ -1675,6 +1675,9 @@ func (this *Player) OnDayTimer(login, continuous bool, t int) {
for _, v := range srvdata.TaskMgr.GetActivityType(common.TaskActivityTypePermitEveryDay) {
this.WelfData.Task[v.GetId()] = &model.TaskData{}
}
for _, v := range srvdata.TaskMgr.GetActivityType(common.TaskActivityTypeNianEveryDay) {
this.WelfData.Task[v.GetId()] = &model.TaskData{}
}
}
}
//周卡数据更新

View File

@ -4,6 +4,7 @@ import (
"container/list"
"math"
"mongo.games.com/goserver/core/logger"
"time"
"mongo.games.com/game/common"
"mongo.games.com/game/model"
@ -191,6 +192,25 @@ func (t *TaskHandle) AllTask(id int, data any) {
}
}
}
if v.ActivityType == common.TaskActivityTypeNianEveryDay || v.ActivityType == common.TaskActivityTypeNian {
//判断是否在开启时间段内
pool := PlatformMgrSingleton.GetConfig(p.Platform).ActivityNianConfig
if pool == nil || pool.List == nil {
continue
}
if pool.Switch == model.WelfareClose {
continue
}
startTime := pool.List[0].ActivityStart
endTime := pool.List[0].ActivityEnd
start, _ := time.Parse(time.DateTime, startTime)
timestamp := start.Unix()
end, _ := time.Parse(time.DateTime, endTime)
endTimestamp := end.Unix()
if time.Now().Unix() < timestamp || time.Now().Unix() > endTimestamp {
continue
}
}
if p.WelfData.Task[v.Id] == nil {
p.WelfData.Task[v.Id] = &model.TaskData{N: 0} // 初始化任务数据
@ -292,4 +312,5 @@ func init() {
TaskSubjectSingleton.Attach(common.TaskTypeTienlenWinCoin, taskHandle)
TaskSubjectSingleton.Attach(common.TaskTypeRankMatchWinTimes, taskHandle)
TaskSubjectSingleton.Attach(common.TaskTypeBuyPermit, taskHandle)
TaskSubjectSingleton.Attach(common.TaskTypeBuyRedBag, taskHandle)
}

View File

@ -293,6 +293,8 @@ func (this *WelfareMgr) OnDayChanged(player *Player) error {
// 重置存钱罐
this.DayResetPigBank(player)
//重置年兽
this.DayReserNian(player)
return nil
}
@ -307,8 +309,9 @@ func (this *WelfareMgr) MonitorWelfData(player *Player) {
player.WelfData.PigBank = &model.PigBankData{}
} else if player.WelfData.DiamondBank == nil {
player.WelfData.DiamondBank = &model.DiamondBankData{}
} else if player.WelfData.NianData == nil {
player.WelfData.NianData = &model.NianData{}
}
}
// GetTurnplate 获取转盘奖励
@ -1006,6 +1009,13 @@ func (this *WelfareMgr) WelfareSwitch(p *Player, platform string, op int) {
} else {
pack.WelfareSwitch = append(pack.WelfareSwitch, model.WelfareClose)
}
//年兽活动
nianConfig := info.ActivityNianConfig
if nianConfig != nil {
pack.WelfareSwitch = append(pack.WelfareSwitch, nianConfig.Switch) //年兽活动开关
} else {
pack.WelfareSwitch = append(pack.WelfareSwitch, model.WelfareClose)
}
if model.GameParamData.TestActSwitch {
for k := range pack.WelfareSwitch {
@ -1120,7 +1130,7 @@ func (this *WelfareMgr) BlindBoxInfo(p *Player, bid int32) {
if cyc == 1 || blindBox.Cycle == model.WelfareOpen {
p.WelfData.BlindBoxId = 0
}
}
} // == 1代表当日循环
if p.WelfData.BlindBoxId == 0 { // 未领取过发随机Date
idx := bid
@ -2173,6 +2183,52 @@ func (this *WelfareMgr) UpdateDiamondBankData(p *Player, coinNum int64, isWin bo
logger.Logger.Tracef("玩家更新钻石存储罐数据 snid = %d,coinNum = %d,isWin = %s,当前钻石存储罐钻石数量:%f本次增加钻石数量:%f", p.SnId, coinNum, isWin, p.WelfData.DiamondBank.BankDiamond, addDiamond)
}
// 年兽活动
func (this *WelfareMgr) UpdateActivityNianStatus(cfg *webapi_proto.ActivityNianConfig) {
if model.GameParamData.TestActSwitch {
cfg.Switch = model.WelfareOpen
}
s := int32(0)
info := this.GetConfig(cfg.Platform)
if info.ActivityNianConfig != nil {
s = info.ActivityNianConfig.Switch
}
info.ActivityNianConfig = cfg
//更新活动时间
// 打开关闭要广播给客户端
if s != 0 && s != cfg.Switch {
this.WelfareSwitch(nil, cfg.Platform, model.OpNian)
}
}
// 每日重置年兽
func (this *WelfareMgr) DayReserNian(p *Player) {
if time.Now().Unix() > p.WelfData.NianData.ActivityEndTime {
this.ClearActivityNianData(p)
}
if p != nil && p.WelfData != nil && p.WelfData.NianData != nil {
p.WelfData.NianData.BuffStatus = false
p.WelfData.NianData.BuffCount = 0
p.WelfData.NianData.SignAwardTime = 0
p.WelfData.NianData.OtherAwardNum = make(map[int32]int32)
}
}
// 年兽活动结束清除数据
func (this *WelfareMgr) ClearActivityNianData(p *Player) {
if p != nil && p.WelfData != nil && p.WelfData.NianData != nil {
p.WelfData.NianData = nil
//清除任务数据
for id, _ := range p.WelfData.Task {
data := srvdata.PBDB_TaskMgr.GetData(id)
if data.ActivityType == common.TaskActivityTypeNianEveryDay || data.ActivityType == common.TaskActivityTypeNian {
p.WelfData.Task[id] = nil
}
}
}
}
// UpdateRedPacket 更新红包配置
func (this *WelfareMgr) UpdateRedPacket(cfg *webapi_proto.RedPacketConfig, isInit bool) {
this.GetConfig(cfg.Platform).RedPacketConfig = cfg

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.