286 lines
7.5 KiB
Go
286 lines
7.5 KiB
Go
package game
|
|
|
|
import (
|
|
"server/GoUtil"
|
|
activityCfg "server/conf/activity"
|
|
guesscolorCfg "server/conf/guessColor"
|
|
itemCfg "server/conf/item"
|
|
mailCfg "server/conf/mail"
|
|
miningCfg "server/conf/mining"
|
|
raceCfg "server/conf/race"
|
|
"server/game/mod/activity"
|
|
"server/game/mod/item"
|
|
"server/game/mod/mail"
|
|
"server/msg"
|
|
)
|
|
|
|
// 活动模块 登录
|
|
func ActivityLogin(p *Player) {
|
|
ItemMod := p.PlayMod.getItemMod()
|
|
// 挖矿
|
|
ActivityId := GetActivityId(p, activity.ACT_TYPE_MINING)
|
|
MiningMod := p.PlayMod.getMiningMod()
|
|
OldId := MiningMod.Login(ActivityId)
|
|
if OldId != 0 {
|
|
ItemId := guesscolorCfg.GetActivityItemId(OldId)
|
|
ItemNum := ItemMod.GetItem(ItemId)
|
|
if ItemNum != 0 {
|
|
ItemMod.AddItem(ItemId, -ItemNum)
|
|
SendActivityMail(p, ItemId, ItemNum, ActivityId)
|
|
}
|
|
}
|
|
// 猜颜色
|
|
ActivityId = GetActivityId(p, activity.ACT_TYPE_GUESS_COLOR)
|
|
GuessColorMod := p.PlayMod.getGuessColorMod()
|
|
OldId = GuessColorMod.Login(ActivityId)
|
|
if OldId != 0 {
|
|
ItemId := guesscolorCfg.GetActivityItemId(OldId)
|
|
ItemNum := ItemMod.GetItem(ItemId)
|
|
if ItemNum != 0 {
|
|
ItemMod.AddItem(ItemId, -ItemNum)
|
|
SendActivityMail(p, ItemId, ItemNum, ActivityId)
|
|
}
|
|
}
|
|
|
|
// 赛跑
|
|
ActivityId = GetActivityId(p, activity.ACT_TYPE_RACE)
|
|
RaceMod := p.PlayMod.getRaceMod()
|
|
OldId = RaceMod.Login(ActivityId)
|
|
if OldId != 0 {
|
|
ItemId := guesscolorCfg.GetActivityItemId(OldId)
|
|
ItemNum := ItemMod.GetItem(ItemId)
|
|
if ItemNum != 0 {
|
|
ItemMod.AddItem(ItemId, -ItemNum)
|
|
SendActivityMail(p, ItemId, ItemNum, ActivityId)
|
|
}
|
|
}
|
|
}
|
|
|
|
func SendActivityMail(p *Player, ItemId, ItemNum, ActivityId int) {
|
|
MailMod := p.PlayMod.getMailMod()
|
|
ItemName, ItemNameEn := itemCfg.GetItemName(ItemId)
|
|
ActivityTitle, ActivityTitleEn := activityCfg.GetActivityTitle(ActivityId)
|
|
mt, mc, mt_en, mc_en := mailCfg.GetRecallMail(ActivityTitle, ActivityTitleEn, ItemName, ItemNameEn)
|
|
Items := []*item.Item{item.NewItem(ItemId, ItemNum)}
|
|
MailMod.Send(mt, "", mc, mt_en, "", mc_en, Items, mail.MAIL_TYPE_NORMAL)
|
|
}
|
|
|
|
// 活动模块 零点更新
|
|
func ActivityZeroUpdate(p *Player) {
|
|
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_MINING)
|
|
if ActivityInfo != nil {
|
|
MiningMod := p.PlayMod.getMiningMod()
|
|
MiningMod.ZeroUpdate(ActivityInfo.Id)
|
|
}
|
|
ActivityInfo = GetActivityInfo(p, activity.ACT_TYPE_GUESS_COLOR)
|
|
if ActivityInfo != nil {
|
|
GuessColorMod := p.PlayMod.getGuessColorMod()
|
|
GuessColorMod.ZeroUpdate(ActivityInfo.Id)
|
|
}
|
|
ActivityInfo = GetActivityInfo(p, activity.ACT_TYPE_RACE)
|
|
if ActivityInfo != nil {
|
|
RaceMod := p.PlayMod.getRaceMod()
|
|
RaceMod.ZeroUpdate(ActivityInfo.Id)
|
|
}
|
|
}
|
|
|
|
func GetActivityInfo(p *Player, actType int) *ActivityInfo {
|
|
for _, v := range p.activity {
|
|
if v.Type == actType {
|
|
return v
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func GetActivityId(p *Player, actType int) int {
|
|
for _, v := range p.activity {
|
|
if v.Type == actType {
|
|
return v.Id
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func GetActivityInfoById(p *Player, Id int) *ActivityInfo {
|
|
for _, v := range p.activity {
|
|
if v.Id == Id {
|
|
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, activity.ACT_TYPE_MINING)
|
|
if ActivityInfo == nil {
|
|
return
|
|
}
|
|
Status := GetActivityStatus(p, activity.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, activity.ACT_TYPE_GUESS_COLOR)
|
|
if ActivityInfo == nil {
|
|
return
|
|
}
|
|
|
|
Status := GetActivityStatus(p, activity.ACT_TYPE_GUESS_COLOR)
|
|
GuessColorMod := p.PlayMod.getGuessColorMod()
|
|
MapList := make([]*msg.GuessColorInfo, 0)
|
|
for _, v := range GuessColorMod.MapList {
|
|
MapList = append(MapList, &msg.GuessColorInfo{
|
|
Map: 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),
|
|
},
|
|
WinTime: int32(GuessColorMod.WinTime),
|
|
MapList: MapList,
|
|
OMap: GuessColorMod.OMap,
|
|
})
|
|
}
|
|
|
|
func RaceBackData(p *Player) {
|
|
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_RACE)
|
|
if ActivityInfo == nil {
|
|
return
|
|
}
|
|
Status := GetActivityStatus(p, activity.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),
|
|
Name: v.Name,
|
|
Face: int32(v.Face),
|
|
Avatar: int32(v.Avatar),
|
|
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,
|
|
Rank: int32(RaceMod.Rank),
|
|
})
|
|
}
|
|
|
|
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)
|
|
ActivityInfo := GetActivityInfo(p, v)
|
|
if ActivityInfo == nil {
|
|
continue
|
|
}
|
|
if Status != ACT_STATUS_START {
|
|
continue
|
|
}
|
|
switch v {
|
|
case activity.ACT_TYPE_MINING:
|
|
Item := miningCfg.GetLoseItem(ActivityInfo.Id)
|
|
Items = item.Merge(Items, Item)
|
|
case activity.ACT_TYPE_GUESS_COLOR:
|
|
Item := guesscolorCfg.GetLoseItem(ActivityInfo.Id)
|
|
Items = item.Merge(Items, Item)
|
|
case activity.ACT_TYPE_RACE:
|
|
ItemId := raceCfg.GetCoin(ActivityInfo.Id)
|
|
Item := item.NewItem(ItemId, 1)
|
|
Items = append(Items, Item)
|
|
}
|
|
}
|
|
return Items
|
|
}
|
|
|
|
func (p *Player) CatnipBackData() {
|
|
CatnipMod := p.PlayMod.getCatnipMod()
|
|
Status := GetActivityStatus(p, activity.ACT_TYPE_CATNIP)
|
|
if CatnipMod == nil {
|
|
return
|
|
}
|
|
GameList := make([]*msg.CatnipGame, 0)
|
|
for _, v := range CatnipMod.Game {
|
|
GameInfo := &msg.CatnipGame{
|
|
Id: int32(v.Id),
|
|
Progress: int32(v.Progress),
|
|
Status: int32(v.Status),
|
|
}
|
|
if v.Partner != 0 {
|
|
PlayerData := G_getGameLogic().GetResSimplePlayerByUid(v.Partner)
|
|
if PlayerData != nil {
|
|
GameInfo.Partner = PlayerData
|
|
}
|
|
}
|
|
GameList = append(GameList, GameInfo)
|
|
}
|
|
res := &msg.ResCatnip{
|
|
Id: int32(CatnipMod.Id),
|
|
Status: int32(Status),
|
|
GameList: GameList,
|
|
}
|
|
p.PushClientRes(res)
|
|
}
|
|
|
|
func (p *Player) SetCatnipGameLock(Uid int, GameId int) error {
|
|
ActivityInfo := GetActivityInfoById(p, activity.ACT_TYPE_CATNIP)
|
|
return G_GameLogicPtr.SetDataSync(int(p.M_DwUin), VAR_OP_CATNIP_LOCK, CatnipLock{
|
|
Uid: int(p.M_DwUin),
|
|
Partner: Uid,
|
|
GameId: GameId,
|
|
End: int(ActivityInfo.EndT), // 锁
|
|
})
|
|
}
|