活动通行证
This commit is contained in:
parent
099f76a1ce
commit
702d216a06
122
src/server/conf/pass/passCfg.go
Normal file
122
src/server/conf/pass/passCfg.go
Normal 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
|
||||
}
|
||||
@ -7,6 +7,7 @@ import (
|
||||
itemCfg "server/conf/item"
|
||||
mailCfg "server/conf/mail"
|
||||
miningCfg "server/conf/mining"
|
||||
passCfg "server/conf/pass"
|
||||
raceCfg "server/conf/race"
|
||||
"server/game/mod/activity"
|
||||
"server/game/mod/item"
|
||||
@ -114,16 +115,16 @@ func GetActivityInfoById(p *Player, Id int) *ActivityInfo {
|
||||
func GetActivityStatus(p *Player, actType int) int {
|
||||
ActivityInfo := GetActivityInfo(p, actType)
|
||||
if ActivityInfo == nil {
|
||||
return 0
|
||||
return ACT_STATUS_NOT_START
|
||||
}
|
||||
Now := GoUtil.Now()
|
||||
if Now < ActivityInfo.StartT {
|
||||
return 0
|
||||
return ACT_STATUS_NOT_START
|
||||
}
|
||||
if Now > ActivityInfo.EndT {
|
||||
return 2
|
||||
return ACT_STATUS_END
|
||||
}
|
||||
return 1
|
||||
return ACT_STATUS_START
|
||||
}
|
||||
|
||||
func MiningBackData(p *Player) {
|
||||
@ -218,6 +219,26 @@ func RedBackData(p *Player) {
|
||||
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 {
|
||||
Items := make([]*item.Item, 0)
|
||||
for _, v := range ActType {
|
||||
@ -240,6 +261,10 @@ func GetActivityItem(p *Player, ActType []int) []*item.Item {
|
||||
ItemId := raceCfg.GetCoin(ActivityInfo.Id)
|
||||
Item := item.NewItem(ItemId, 1)
|
||||
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
|
||||
|
||||
@ -3,6 +3,8 @@ package game
|
||||
import (
|
||||
"server/GoUtil"
|
||||
activityCfg "server/conf/activity"
|
||||
passCfg "server/conf/pass"
|
||||
"server/game/mod/activity"
|
||||
"server/game/mod/item"
|
||||
MsgMod "server/game/mod/msg"
|
||||
"server/game/mod/piggyBank"
|
||||
@ -74,6 +76,36 @@ func ActivityFire(p *Player, ChargeId int) {
|
||||
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) {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
Item := PlayroomMod.Fire(ChargeId)
|
||||
|
||||
@ -851,6 +851,9 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqCatnipPlay", ReqCatnipPlay) // 猫草大作战游戏转盘
|
||||
RegisterMsgProcessFunc("ReqCatnipReward", ReqCatnipReward) // 猫草大作战领取奖励
|
||||
RegisterMsgProcessFunc("ReqCatnipGrandReward", ReqCatnipGrandReward) // 猫草大作战领取大奖
|
||||
// 活动通行证
|
||||
RegisterMsgProcessFunc("ReqActPass", ReqActPass) // 请求活动通行证数据
|
||||
RegisterMsgProcessFunc("ReqActPassReward", ReqActPassReward) // 领取活动通行证奖励
|
||||
// #region playroom
|
||||
RegisterMsgProcessFunc("ReqPlayroom", ReqPlayroom) // 请求playroom数据
|
||||
RegisterMsgProcessFunc("ReqPlayroomInfo", ReqPlayroomInfo) // 请求playroom拜访信息
|
||||
|
||||
@ -769,6 +769,14 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
})
|
||||
}
|
||||
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:
|
||||
err := ItemMod.AddItem(v.Id, v.Num)
|
||||
p.TeLog("asset_change", map[string]interface{}{
|
||||
|
||||
@ -5143,3 +5143,31 @@ func ReqCatnipRefuse(player *Player, buf []byte) error {
|
||||
})
|
||||
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
|
||||
}
|
||||
|
||||
@ -23,6 +23,7 @@ const (
|
||||
ACT_TYPE_ADD_GIFT = 5 // 加送礼包
|
||||
ACT_TYPE_SUPER_GIFT = 6 // 超值加购礼包
|
||||
ACT_TYPE_CATNIP = 7 // 猫草大作战
|
||||
ACT_TYPE_PASS = 8 // 通行证
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@ -57,6 +57,7 @@ const (
|
||||
ITEM_TYPE_PLAYROOM_DECORATION_SET = 113 // playroom装饰套装
|
||||
ITEM_TYPE_PLAYROOM_DRESS_SET = 114 // playroom服饰套装
|
||||
ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱
|
||||
ITEM_TYPE_ACT_PASS = 116 // 通行证活动道具
|
||||
)
|
||||
|
||||
func (i *ItemMod) InitData() {
|
||||
|
||||
@ -1,17 +1,86 @@
|
||||
package pass
|
||||
|
||||
import (
|
||||
"server/GoUtil"
|
||||
passCfg "server/conf/pass"
|
||||
"server/game/mod/item"
|
||||
)
|
||||
|
||||
type PassMod struct {
|
||||
LowPass int // 低级通行证
|
||||
HighPass int // 高级通行证
|
||||
Num int // 积分
|
||||
FreeReward []int // 免费奖励领取情况
|
||||
LowReward []int // 付费奖励领取情况
|
||||
HighReward []int // 高级奖励领取情况
|
||||
LowPass int64 // 低级通行证
|
||||
HighPass int64 // 高级通行证
|
||||
Num int // 积分
|
||||
Reward []int // 免费奖励领取情况
|
||||
Id int
|
||||
}
|
||||
|
||||
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
Loading…
Reference in New Issue
Block a user