pet_home_server/src/server/game/ActivityFunc.go
2024-12-04 15:03:08 +08:00

170 lines
4.2 KiB
Go

package game
import (
"server/GoUtil"
miningCfg "server/conf/mining"
"server/game/mod/item"
"server/msg"
)
// 活动模块 登录
func ActivityLogin(p *Player) {
ActivityInfo := GetActivityInfo(p, ACT_TYPE_MINING)
if ActivityInfo != nil {
MiningMod := p.PlayMod.getMiningMod()
MiningMod.Login(ActivityInfo.Id)
}
ActivityInfo = GetActivityInfo(p, ACT_TYPE_GUESS_COLOR)
if ActivityInfo != nil {
GuessColorMod := p.PlayMod.getGuessColorMod()
GuessColorMod.Login(ActivityInfo.Id)
}
}
// 活动模块 零点更新
func ActivityZeroUpdate(p *Player) {
ActivityInfo := GetActivityInfo(p, ACT_TYPE_MINING)
if ActivityInfo != nil {
MiningMod := p.PlayMod.getMiningMod()
MiningMod.ZeroUpdate(ActivityInfo.Id)
}
ActivityInfo = GetActivityInfo(p, ACT_TYPE_GUESS_COLOR)
if ActivityInfo != nil {
GuessColorMod := p.PlayMod.getGuessColorMod()
GuessColorMod.ZeroUpdate(ActivityInfo.Id)
}
}
func GetActivityInfo(p *Player, actType int) *ActivityInfo {
for _, v := range p.activity {
if v.Type == actType {
return v
}
}
return nil
}
func GetActivityStatus(p *Player, actType int) int {
ActivityInfo := GetActivityInfo(p, actType)
if ActivityInfo == nil {
return 0
}
Now := GoUtil.Now()
if Now < ActivityInfo.StartT {
return 0
}
if Now > ActivityInfo.EndT {
return 2
}
return 1
}
func MiningBackData(p *Player) {
ActivityInfo := GetActivityInfo(p, ACT_TYPE_MINING)
if ActivityInfo == nil {
return
}
Status := GetActivityStatus(p, ACT_TYPE_MINING)
Template := miningCfg.GetTemplate(ActivityInfo.Id)
MiningMod := p.PlayMod.getMiningMod()
p.PushClientRes(&msg.ResMining{
Id: int32(ActivityInfo.Id),
Status: int32(Status),
EndTime: int32(ActivityInfo.EndT),
Template: int32(Template),
Pass: int32(MiningMod.GetPass()),
Gem: GoUtil.IntToInt32(MiningMod.GetGem()),
Map: MiningMod.GetMap(),
Mining: int32(MiningMod.GetMining()),
})
}
func GuessColorBackData(p *Player) {
ActivityInfo := GetActivityInfo(p, ACT_TYPE_GUESS_COLOR)
if ActivityInfo == nil {
return
}
Status := GetActivityStatus(p, ACT_TYPE_GUESS_COLOR)
GuessColorMod := p.PlayMod.getGuessColorMod()
Color := make([]int32, 0)
Pos := make([]int32, 0)
for k, v := range GuessColorMod.Answer {
if GuessColorMod.Progress[k] > 0 {
Pos = append(Pos, int32(k))
continue
}
Color = append(Color, int32(v))
}
p.PushClientRes(&msg.ResGuessColor{
Id: int32(ActivityInfo.Id),
Status: int32(Status),
EndTime: int32(ActivityInfo.EndT),
Pass: int32(GuessColorMod.Pass),
Opponent: &msg.Opponent{
Name: GuessColorMod.Opponent.Name,
Face: int32(GuessColorMod.Opponent.Face),
Avatar: int32(GuessColorMod.Opponent.Avatar),
Progress: int32(GuessColorMod.Opponent.Progress),
},
Color: Color,
Pos: Pos,
})
}
func RaceBackData(p *Player) {
ActivityInfo := GetActivityInfo(p, ACT_TYPE_RACE)
if ActivityInfo == nil {
return
}
Status := GetActivityStatus(p, ACT_TYPE_RACE)
RaceMod := p.PlayMod.getRaceMod()
Opponent := make([]*msg.Raceopponent, 0)
for _, v := range RaceMod.Opponent {
Opponent = append(Opponent, &msg.Raceopponent{
Id: int32(v.Id),
Image: int32(v.Image),
Progress: int32(v.Progress),
})
}
p.PushClientRes(&msg.ResRace{
Id: int32(ActivityInfo.Id),
Status: int32(Status),
EndTime: int32(ActivityInfo.EndT),
Pass: int32(RaceMod.Pass),
GameStartTime: int32(RaceMod.StartTime),
Progress: int32(RaceMod.Progress),
GameEndTime: int32(RaceMod.EndTime),
Opponent: Opponent,
})
}
func RedBackData(p *Player) {
result := make(map[int32]int32)
Now := GoUtil.Now()
for _, v := range p.activity {
if v.StartT < Now && v.EndT > Now {
result[int32(v.Type)] = int32(p.GetRed(v))
}
}
p.PushClientRes(&msg.ResActRed{Red: result})
}
func GetActivityItem(p *Player, ActType []int) []*item.Item {
Items := make([]*item.Item, 0)
for _, v := range ActType {
Status := GetActivityStatus(p, v)
if Status != ACT_STATUS_START {
continue
}
switch v {
case ACT_TYPE_MINING:
Item := miningCfg.GetLoseItem(v)
Items = item.Merge(Items, Item)
case ACT_TYPE_GUESS_COLOR:
Item := miningCfg.GetLoseItem(v)
Items = item.Merge(Items, Item)
}
}
return Items
}