170 lines
4.2 KiB
Go
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
|
|
}
|