pet_home_server/src/server/game/ActivityFunc.go
2025-07-18 18:07:36 +08:00

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), // 锁
})
}