活动通行证

This commit is contained in:
hahwu 2025-10-20 16:36:03 +08:00
parent 099f76a1ce
commit 702d216a06
10 changed files with 1278 additions and 725 deletions

View File

@ -0,0 +1,122 @@
package passCfg
import (
"server/game/mod/item"
"server/gamedata"
"slices"
)
const (
CFG_PASS_TEMPLATE = "PassTemplate"
CFG_PASS = "Pass"
)
func init() {
gamedata.InitCfg(CFG_PASS_TEMPLATE)
gamedata.InitCfg(CFG_PASS)
}
func GetTemplate(Id int) int {
data, err := gamedata.GetDataByIntKey(CFG_PASS_TEMPLATE, Id)
if err != nil {
return 0
}
return gamedata.GetIntValue(data, "Template")
}
func GetActivityItemId(Id int) int {
data, err := gamedata.GetDataByIntKey(CFG_PASS_TEMPLATE, Id)
if err != nil {
return 0
}
return gamedata.GetIntValue(data, "ItemId")
}
func GetLowChargeId(Id int) int {
data, err := gamedata.GetDataByIntKey(CFG_PASS_TEMPLATE, Id)
if err != nil {
return 0
}
return gamedata.GetIntValue(data, "LowChargeId")
}
func GetHighChargeId(Id int) int {
data, err := gamedata.GetDataByIntKey(CFG_PASS_TEMPLATE, Id)
if err != nil {
return 0
}
return gamedata.GetIntValue(data, "HighChargeId")
}
func GetNewLevel(Template int, Score int, Reward []int) []int {
data, err := gamedata.GetData(CFG_PASS)
if err != nil {
return nil
}
NewReward := make([]int, 0)
for _, v := range data {
if gamedata.GetIntValue(v, "Template") != Template {
continue
}
LevelScore := gamedata.GetIntValue(v, "TotalScore")
Index := gamedata.GetIntValue(v, "Level")
if Score >= LevelScore && !slices.Contains(Reward, Index) {
NewReward = append(NewReward, Index)
}
}
return NewReward
}
func GetFreeChargeItems(Template int, Reward []int) []*item.Item {
data, err := gamedata.GetData(CFG_PASS)
if err != nil {
return nil
}
Items := make([]*item.Item, 0)
for _, v := range data {
if gamedata.GetIntValue(v, "Template") != Template {
continue
}
Index := gamedata.GetIntValue(v, "Level")
if slices.Contains(Reward, Index) {
Items = append(Items, gamedata.GetItemList(data, "FreeReward")...)
}
}
return Items
}
func GetLowChargeItems(Template int, Reward []int) []*item.Item {
data, err := gamedata.GetData(CFG_PASS)
if err != nil {
return nil
}
Items := make([]*item.Item, 0)
for _, v := range data {
if gamedata.GetIntValue(v, "Template") != Template {
continue
}
Index := gamedata.GetIntValue(v, "Level")
if slices.Contains(Reward, Index) {
Items = append(Items, gamedata.GetItemList(data, "LowReward")...)
}
}
return Items
}
func GetHighChargeItems(Template int, Reward []int) []*item.Item {
data, err := gamedata.GetData(CFG_PASS)
if err != nil {
return nil
}
Items := make([]*item.Item, 0)
for _, v := range data {
if gamedata.GetIntValue(v, "Template") != Template {
continue
}
Index := gamedata.GetIntValue(v, "Level")
if slices.Contains(Reward, Index) {
Items = append(Items, gamedata.GetItemList(data, "HighReward")...)
}
}
return Items
}

View File

@ -7,6 +7,7 @@ import (
itemCfg "server/conf/item" itemCfg "server/conf/item"
mailCfg "server/conf/mail" mailCfg "server/conf/mail"
miningCfg "server/conf/mining" miningCfg "server/conf/mining"
passCfg "server/conf/pass"
raceCfg "server/conf/race" raceCfg "server/conf/race"
"server/game/mod/activity" "server/game/mod/activity"
"server/game/mod/item" "server/game/mod/item"
@ -114,16 +115,16 @@ func GetActivityInfoById(p *Player, Id int) *ActivityInfo {
func GetActivityStatus(p *Player, actType int) int { func GetActivityStatus(p *Player, actType int) int {
ActivityInfo := GetActivityInfo(p, actType) ActivityInfo := GetActivityInfo(p, actType)
if ActivityInfo == nil { if ActivityInfo == nil {
return 0 return ACT_STATUS_NOT_START
} }
Now := GoUtil.Now() Now := GoUtil.Now()
if Now < ActivityInfo.StartT { if Now < ActivityInfo.StartT {
return 0 return ACT_STATUS_NOT_START
} }
if Now > ActivityInfo.EndT { if Now > ActivityInfo.EndT {
return 2 return ACT_STATUS_END
} }
return 1 return ACT_STATUS_START
} }
func MiningBackData(p *Player) { func MiningBackData(p *Player) {
@ -218,6 +219,26 @@ func RedBackData(p *Player) {
p.PushClientRes(&msg.ResActRed{Red: result}) p.PushClientRes(&msg.ResActRed{Red: result})
} }
func ActPassBackData(p *Player) {
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_PASS)
if ActivityInfo == nil {
return
}
Status := GetActivityStatus(p, activity.ACT_TYPE_PASS)
Template := passCfg.GetTemplate(ActivityInfo.Id)
PassMod := p.PlayMod.getPassMod()
p.PushClientRes(&msg.ResActPass{
Id: int32(ActivityInfo.Id),
Status: int32(Status),
Template: int32(Template),
EndTime: int32(ActivityInfo.EndT),
LowPass: PassMod.LowPass > 0,
HighPass: PassMod.HighPass > 0,
Score: int32(PassMod.Num),
Reward: GoUtil.IntToInt32(PassMod.Reward),
})
}
func GetActivityItem(p *Player, ActType []int) []*item.Item { func GetActivityItem(p *Player, ActType []int) []*item.Item {
Items := make([]*item.Item, 0) Items := make([]*item.Item, 0)
for _, v := range ActType { for _, v := range ActType {
@ -240,6 +261,10 @@ func GetActivityItem(p *Player, ActType []int) []*item.Item {
ItemId := raceCfg.GetCoin(ActivityInfo.Id) ItemId := raceCfg.GetCoin(ActivityInfo.Id)
Item := item.NewItem(ItemId, 1) Item := item.NewItem(ItemId, 1)
Items = append(Items, Item) Items = append(Items, Item)
case activity.ACT_TYPE_PASS:
ItemId := passCfg.GetActivityItemId(ActivityInfo.Id)
Item := item.NewItem(ItemId, 1)
Items = append(Items, Item)
} }
} }
return Items return Items

View File

@ -3,6 +3,8 @@ package game
import ( import (
"server/GoUtil" "server/GoUtil"
activityCfg "server/conf/activity" activityCfg "server/conf/activity"
passCfg "server/conf/pass"
"server/game/mod/activity"
"server/game/mod/item" "server/game/mod/item"
MsgMod "server/game/mod/msg" MsgMod "server/game/mod/msg"
"server/game/mod/piggyBank" "server/game/mod/piggyBank"
@ -74,6 +76,36 @@ func ActivityFire(p *Player, ChargeId int) {
p.BackDataActivity() p.BackDataActivity()
} }
func PassFire(p *Player, ChargeId int) {
ActivityStatus := GetActivityStatus(p, activity.ACT_TYPE_PASS)
if ActivityStatus != ACT_STATUS_START {
return
}
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_PASS)
if ActivityInfo == nil {
return
}
LowChargeId := passCfg.GetLowChargeId(ActivityInfo.Id)
PassMod := p.PlayMod.getPassMod()
Items := []*item.Item{}
if ChargeId == LowChargeId {
Items = PassMod.GetLowChargeItems()
}
HighChargeId := passCfg.GetHighChargeId(ActivityInfo.Id)
if ChargeId == HighChargeId {
Items = PassMod.GetHighChargeItems()
}
if len(Items) == 0 {
return
}
err := p.HandleItem(Items, msg.ITEM_POP_LABEL_PassCharge.String())
if err != nil {
log.Debug("PassFire err : %s", err)
return
}
p.PlayMod.save()
}
func PlayroomFire(p *Player, ChargeId int) { func PlayroomFire(p *Player, ChargeId int) {
PlayroomMod := p.PlayMod.getPlayroomMod() PlayroomMod := p.PlayMod.getPlayroomMod()
Item := PlayroomMod.Fire(ChargeId) Item := PlayroomMod.Fire(ChargeId)

View File

@ -851,6 +851,9 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqCatnipPlay", ReqCatnipPlay) // 猫草大作战游戏转盘 RegisterMsgProcessFunc("ReqCatnipPlay", ReqCatnipPlay) // 猫草大作战游戏转盘
RegisterMsgProcessFunc("ReqCatnipReward", ReqCatnipReward) // 猫草大作战领取奖励 RegisterMsgProcessFunc("ReqCatnipReward", ReqCatnipReward) // 猫草大作战领取奖励
RegisterMsgProcessFunc("ReqCatnipGrandReward", ReqCatnipGrandReward) // 猫草大作战领取大奖 RegisterMsgProcessFunc("ReqCatnipGrandReward", ReqCatnipGrandReward) // 猫草大作战领取大奖
// 活动通行证
RegisterMsgProcessFunc("ReqActPass", ReqActPass) // 请求活动通行证数据
RegisterMsgProcessFunc("ReqActPassReward", ReqActPassReward) // 领取活动通行证奖励
// #region playroom // #region playroom
RegisterMsgProcessFunc("ReqPlayroom", ReqPlayroom) // 请求playroom数据 RegisterMsgProcessFunc("ReqPlayroom", ReqPlayroom) // 请求playroom数据
RegisterMsgProcessFunc("ReqPlayroomInfo", ReqPlayroomInfo) // 请求playroom拜访信息 RegisterMsgProcessFunc("ReqPlayroomInfo", ReqPlayroomInfo) // 请求playroom拜访信息

View File

@ -769,6 +769,14 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
}) })
} }
BackDataType[item.ITEM_TYPE_PLAYROOM_DRESS_SET] = struct{}{} BackDataType[item.ITEM_TYPE_PLAYROOM_DRESS_SET] = struct{}{}
case item.ITEM_TYPE_ACT_PASS: // 活动通行证
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_PASS)
if ActivityInfo == nil {
continue
}
PassMod := p.PlayMod.getPassMod()
PassMod.AddExp(v.Num)
ActPassBackData(p)
default: default:
err := ItemMod.AddItem(v.Id, v.Num) err := ItemMod.AddItem(v.Id, v.Num)
p.TeLog("asset_change", map[string]interface{}{ p.TeLog("asset_change", map[string]interface{}{

View File

@ -5143,3 +5143,31 @@ func ReqCatnipRefuse(player *Player, buf []byte) error {
}) })
return nil return nil
} }
func ReqActPass(player *Player, buf []byte) error {
ActPassBackData(player)
return nil
}
func ReqActPassReward(player *Player, buf []byte) error {
PassMod := player.PlayMod.getPassMod()
Items, NewLevel := PassMod.GetRewardItems()
err := player.HandleItem(Items, msg.ITEM_POP_LABEL_ActPassReward.String())
if err != nil {
player.SendErrClienRes(&msg.ResActPassReward{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.TeLog("act_pass_reward", map[string]interface{}{
"NewLevel": NewLevel,
"Items": Items,
})
player.PlayMod.save()
player.PushClientRes(&msg.ResActPassReward{
Code: msg.RES_CODE_SUCCESS,
RewardLevel: GoUtil.IntToInt32(NewLevel),
})
return nil
}

View File

@ -23,6 +23,7 @@ const (
ACT_TYPE_ADD_GIFT = 5 // 加送礼包 ACT_TYPE_ADD_GIFT = 5 // 加送礼包
ACT_TYPE_SUPER_GIFT = 6 // 超值加购礼包 ACT_TYPE_SUPER_GIFT = 6 // 超值加购礼包
ACT_TYPE_CATNIP = 7 // 猫草大作战 ACT_TYPE_CATNIP = 7 // 猫草大作战
ACT_TYPE_PASS = 8 // 通行证
) )
const ( const (

View File

@ -57,6 +57,7 @@ const (
ITEM_TYPE_PLAYROOM_DECORATION_SET = 113 // playroom装饰套装 ITEM_TYPE_PLAYROOM_DECORATION_SET = 113 // playroom装饰套装
ITEM_TYPE_PLAYROOM_DRESS_SET = 114 // playroom服饰套装 ITEM_TYPE_PLAYROOM_DRESS_SET = 114 // playroom服饰套装
ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱 ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱
ITEM_TYPE_ACT_PASS = 116 // 通行证活动道具
) )
func (i *ItemMod) InitData() { func (i *ItemMod) InitData() {

View File

@ -1,17 +1,86 @@
package pass package pass
import (
"server/GoUtil"
passCfg "server/conf/pass"
"server/game/mod/item"
)
type PassMod struct { type PassMod struct {
LowPass int // 低级通行证 LowPass int64 // 低级通行证
HighPass int // 高级通行证 HighPass int64 // 高级通行证
Num int // 积分 Num int // 积分
FreeReward []int // 免费奖励领取情况 Reward []int // 免费奖励领取情况
LowReward []int // 付费奖励领取情况 Id int
HighReward []int // 高级奖励领取情况
} }
func (p *PassMod) InitData() { func (p *PassMod) InitData() {
} }
func (p *PassMod) ZeroUpdate(Id int) {} func (p *PassMod) ZeroUpdate(Id int) {
p.Login(Id)
}
func (p *PassMod) Login() {} func (p *PassMod) GetRewardItems() ([]*item.Item, []int) {
NewLevel := passCfg.GetNewLevel(passCfg.GetTemplate(p.Id), p.Num, p.Reward)
if len(NewLevel) == 0 {
return nil, nil
}
Items := make([]*item.Item, 0)
Items = append(Items, passCfg.GetFreeChargeItems(passCfg.GetTemplate(p.Id), p.Reward)...)
if p.LowPass != 0 {
Items = append(Items, passCfg.GetLowChargeItems(passCfg.GetTemplate(p.Id), p.Reward)...)
}
if p.HighPass != 0 {
Items = append(Items, passCfg.GetHighChargeItems(passCfg.GetTemplate(p.Id), p.Reward)...)
}
p.Reward = append(p.Reward, NewLevel...)
return Items, NewLevel
}
func (p *PassMod) Login(Id int) int {
OldId := p.Id
if Id == 0 {
p.Id = 0
return OldId
}
if p.Id == Id {
return 0
}
p.Id = Id
p.LowPass = 0
p.HighPass = 0
p.Num = 0
p.Reward = make([]int, 0)
return p.Id
}
func (p *PassMod) GetLowChargeItems() []*item.Item {
if p.LowPass != 0 {
return nil
}
Template := passCfg.GetTemplate(p.Id)
if Template == 0 {
return nil
}
Items := passCfg.GetLowChargeItems(Template, p.Reward)
p.LowPass = GoUtil.Now()
return Items
}
func (p *PassMod) GetHighChargeItems() []*item.Item {
if p.HighPass != 0 {
return nil
}
Template := passCfg.GetTemplate(p.Id)
if Template == 0 {
return nil
}
Items := passCfg.GetHighChargeItems(Template, p.Reward)
p.HighPass = GoUtil.Now()
return Items
}
func (p *PassMod) AddExp(Score int) {
p.Num += Score
}

File diff suppressed because it is too large Load Diff