pet_home_server/src/server/game/activity_func.go
2026-04-15 17:18:27 +08:00

717 lines
22 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package game
import (
"fmt"
activityCfg "server/conf/activity"
catnipCfg "server/conf/catnip"
dailyTaskCfg "server/conf/daily_task"
guesscolorCfg "server/conf/guess_color"
languageCfg "server/conf/language"
miningCfg "server/conf/mining"
orderCfg "server/conf/order"
passCfg "server/conf/pass"
raceCfg "server/conf/race"
"server/game/mod/activity"
"server/game/mod/item"
"server/game/mod/mail"
GoUtil "server/game_util"
"server/msg"
"sort"
"gitea.bywaystudios.com/pet_home/leaf/log"
)
// 活动模块 登录
func (p *Player) ActivityLogin() {
ItemMod := p.PlayMod.getItemMod()
// 通用登录处理检查旧Activity道具并通过邮件退还
handleSimpleLogin := func(actType int, loginFn func(int) int) {
ActivityId := p.GetActivityId(actType)
OldId := loginFn(ActivityId)
if OldId == 0 {
return
}
var ItemId int
switch actType {
case activity.ACT_TYPE_MINING:
ItemId = miningCfg.GetActivityItemId(OldId)
case activity.ACT_TYPE_GUESS_COLOR:
ItemId = guesscolorCfg.GetActivityItemId(OldId)
case activity.ACT_TYPE_RACE:
ItemId = raceCfg.GetCoin(OldId)
case activity.ACT_TYPE_PASS:
ItemId = passCfg.GetActivityItemId(OldId)
default:
return
}
ItemNum := ItemMod.GetItem(ItemId)
if ItemNum != 0 {
ItemMod.AddItem(ItemId, -ItemNum)
p.SendActivityMail(item.ITEM_ENERGY_ID, ItemNum, OldId, nil)
}
}
// 挖矿
handleSimpleLogin(activity.ACT_TYPE_MINING, p.PlayMod.getMiningMod().Login)
// 猜颜色
handleSimpleLogin(activity.ACT_TYPE_GUESS_COLOR, p.PlayMod.getGuessColorMod().Login)
// 赛跑
handleSimpleLogin(activity.ACT_TYPE_RACE, p.PlayMod.getRaceMod().Login)
// 猫草大作战
catnipActivityId := p.GetActivityId(activity.ACT_TYPE_CATNIP)
CatnipMod := p.PlayMod.getCatnipMod()
oldId, catnipUnReward := CatnipMod.Login(catnipActivityId)
if oldId != 0 && len(catnipUnReward) > 0 {
// 清空猫草大作战数据无需发邮件
MailMod := p.PlayMod.getMailMod()
MailMod.SendMail(&mail.MailStruct{
Title: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, "backend_gardenend_mail_title"),
TitleEn: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, "backend_gardenend_mail_title"),
Content: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, "backend_gardenend_mail_content"),
ContentEn: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, "backend_gardenend_mail_content"),
TitlePtBr: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, "backend_gardenend_mail_title"),
ContentPtBr: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, "backend_gardenend_mail_content"),
TitleEsLatam: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, "backend_gardenend_mail_title"),
ContentEsLatam: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, "backend_gardenend_mail_content"),
Items: catnipUnReward,
Type: mail.MAIL_TYPE_NORMAL,
})
}
// 通行证
passActivityId := p.GetActivityId(activity.ACT_TYPE_PASS)
PassMod := p.PlayMod.getPassMod()
passOldId := PassMod.Login(passActivityId)
if passOldId != 0 {
ItemId := passCfg.GetActivityItemId(passOldId)
ItemNum := PassMod.Num
RewardItems, _ := PassMod.GetRewardItems()
if ItemNum != 0 {
ItemMod.AddItem(ItemId, -ItemNum)
p.SendActivityMail(ItemId, ItemNum, passActivityId, RewardItems)
}
}
// 初始化活动道具
initItem := p.GetMiningMod().GetInitItem()
if len(initItem) > 0 {
err := p.HandleItem(initItem, "")
if err != nil {
log.Debug("ActivityLogin initItem err : %s", err)
}
}
// 猫猫回礼登录
p.CatReturnGiftLogin()
}
// 发送活动邮件
func (p *Player) SendActivityMail(ItemId, ItemNum, ActivityId int, RewardItems []*item.Item) {
MailMod := p.PlayMod.getMailMod()
activity_title_key, mail_title_key, mail_content_key := activityCfg.GetActivityRecycleMail(ActivityId)
activity_title_zh := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, activity_title_key)
activity_title_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, activity_title_key)
activity_title_pt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, activity_title_key)
activity_title_es := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, activity_title_key)
mt_zh := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, mail_title_key)
mc_zh := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, mail_content_key)
mt_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, mail_title_key)
mc_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, mail_content_key)
mt_pt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, mail_title_key)
mc_pt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, mail_content_key)
mt_es := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, mail_title_key)
mc_es := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, mail_content_key)
Items := []*item.Item{item.NewItem(ItemId, ItemNum)}
Items = append(Items, RewardItems...)
MailMod.SendMail(&mail.MailStruct{
Title: fmt.Sprintf(mt_zh, activity_title_zh),
Content: fmt.Sprintf(mc_zh, activity_title_zh),
TitleEn: fmt.Sprintf(mt_en, activity_title_en),
ContentEn: fmt.Sprintf(mc_en, activity_title_en),
TitlePtBr: fmt.Sprintf(mt_pt, activity_title_pt),
ContentPtBr: fmt.Sprintf(mc_pt, activity_title_pt),
TitleEsLatam: fmt.Sprintf(mt_es, activity_title_es),
ContentEsLatam: fmt.Sprintf(mc_es, activity_title_es),
Items: Items,
Type: mail.MAIL_TYPE_NORMAL,
})
}
// 发送活动邮件
func (p *Player) SendActivityMail2(items []*item.Item, mail_title, mail_content string) {
MailMod := p.PlayMod.getMailMod()
mt_zh := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, mail_title)
mc_zh := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, mail_content)
mt_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, mail_title)
mc_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, mail_content)
mt_pt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, mail_title)
mc_pt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, mail_content)
mt_es := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, mail_title)
mc_es := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, mail_content)
MailMod.SendMail(&mail.MailStruct{
Title: mt_zh,
Content: mc_zh,
TitleEn: mt_en,
ContentEn: mc_en,
TitlePtBr: mt_pt,
ContentPtBr: mc_pt,
TitleEsLatam: mt_es,
ContentEsLatam: mc_es,
Items: items,
Type: mail.MAIL_TYPE_NORMAL,
})
}
// 活动模块 零点更新
func (p *Player) ActivityZeroUpdate() {
p.ActivityLogin()
type zeroHandler struct {
actType int
updateFn func(int)
}
handlers := []zeroHandler{
{activity.ACT_TYPE_MINING, func(id int) { p.PlayMod.getMiningMod().ZeroUpdate(id) }},
{activity.ACT_TYPE_GUESS_COLOR, func(id int) { p.PlayMod.getGuessColorMod().ZeroUpdate(id) }},
{activity.ACT_TYPE_RACE, func(id int) { p.PlayMod.getRaceMod().ZeroUpdate(id) }},
{activity.ACT_TYPE_PASS, func(id int) { p.PlayMod.getPassMod().ZeroUpdate(id) }},
{activity.ACT_TYPE_CATNIP, func(id int) { p.PlayMod.getCatnipMod().ZeroUpdate(id) }},
}
for _, h := range handlers {
if info := p.GetActivityInfo(h.actType); info != nil {
h.updateFn(info.Id)
}
}
}
func (p *Player) CatReturnGiftLogin() {
p.CatReturnGiftZeroUpdate()
}
// 猫猫回礼0点更新
func (p *Player) CatReturnGiftZeroUpdate() {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_CAT_RETURN_GIFT)
var aid int
var id int
if activityInfo != nil {
id = activityInfo.Id
aid = activityInfo.AId
}
oldId, oldScore, oldReward := p.GetCatReturnGiftMod().ZeroUpdate(id, aid)
if oldId != 0 {
log.Debug("CatReturnGiftZeroUpdate oldId : %d, oldScore : %d, oldReward : %d", oldId, oldScore, oldReward)
cfg := G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(oldId)
items := make([]*item.Item, 0)
if cfg != nil {
for _, v := range cfg.RewardList {
if oldScore >= int(v.Total) && oldReward < int(v.Id) {
items = item.Merge(items, item.MsgToItem(v.Reward))
if v.StarReward > 0 {
items = item.Merge(items, []*item.Item{item.NewItem(item.ITEM_STAR_ID, GoUtil.FormatStarItemNum(int(v.StarReward), p.GetOrderFactor()))})
}
}
}
}
if len(items) > 0 {
p.SendActivityMail2(items, "backend_milestone_mail_title", "backend_milestone_mail_content")
}
}
}
// 获取活动信息
func (p *Player) GetActivityInfo(actType int) *ActivityInfo {
for _, v := range p.activity {
if v.Type == actType {
return v
}
}
return nil
}
// 获取活动ID
func (p *Player) GetActivityId(actType int) int {
for _, v := range p.activity {
if v.Type == actType {
return v.Id
}
}
return 0
}
// 根据活动ID获取活动信息
func (p *Player) GetActivityInfoById(Id int) *ActivityInfo {
for _, v := range p.activity {
if v.Id == Id {
return v
}
}
return nil
}
// 获取活动状态
func (p *Player) GetActivityStatus(actType int) int {
activityInfo := p.GetActivityInfo(actType)
if activityInfo == nil {
return ACT_STATUS_NOT_START
}
now := GoUtil.Now()
if now < activityInfo.StartT {
return ACT_STATUS_NOT_START
}
if now > activityInfo.EndT {
return ACT_STATUS_END
}
return ACT_STATUS_START
}
// 挖矿活动数据返回
func (p *Player) MiningBackData() {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_MINING)
if activityInfo == nil {
return
}
status := p.GetActivityStatus(activity.ACT_TYPE_MINING)
template := miningCfg.GetTemplate(activityInfo.Id)
DecorateMod := p.PlayMod.getDecorateMod()
orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId())
passRewardList := miningCfg.GetPassItemList(orderFactor)
resPassRewardList := make(map[int32]*msg.ItemList)
for k, v := range passRewardList {
resPassRewardList[int32(k)] = item.ItemListToMsg(v)
}
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()),
PassReward: resPassRewardList,
})
}
// 猜颜色活动数据返回
func (p *Player) GuessColorBackData() {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_GUESS_COLOR)
if activityInfo == nil {
return
}
status := p.GetActivityStatus(activity.ACT_TYPE_GUESS_COLOR)
GuessColorMod := p.PlayMod.getGuessColorMod()
mapList := make([]*msg.GuessColorInfo, 0, len(GuessColorMod.MapList))
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 (p *Player) RaceBackData() {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_RACE)
if activityInfo == nil {
return
}
status := p.GetActivityStatus(activity.ACT_TYPE_RACE)
RaceMod := p.PlayMod.getRaceMod()
opponent := make([]*msg.Raceopponent, 0, len(RaceMod.Opponent))
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 (p *Player) RedBackData() {
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 (p *Player) GetMiningItemId() int {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_MINING)
if activityInfo == nil {
return 0
}
return miningCfg.GetActivityItemId(activityInfo.Id)
}
// 通行证活动数据返回
func (p *Player) ActPassBackData() {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_PASS)
if activityInfo == nil {
return
}
status := p.GetActivityStatus(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 (p *Player) GetActivityItem(ActType []int) []*item.Item {
items := make([]*item.Item, 0)
now := GoUtil.Now()
for _, v := range ActType {
activityInfo := p.GetActivityInfo(v)
if activityInfo == nil {
continue
}
status := ACT_STATUS_START
if now < activityInfo.StartT {
status = ACT_STATUS_NOT_START
} else if now > activityInfo.EndT {
status = ACT_STATUS_END
}
if status != ACT_STATUS_START {
continue
}
switch v {
case activity.ACT_TYPE_MINING:
itemInfo := miningCfg.GetLoseItem(activityInfo.Id)
items = item.Merge(items, itemInfo)
case activity.ACT_TYPE_GUESS_COLOR:
itemInfo := guesscolorCfg.GetLoseItem(activityInfo.Id)
items = item.Merge(items, itemInfo)
case activity.ACT_TYPE_RACE:
itemId := raceCfg.GetCoin(activityInfo.Id)
itemInfo := item.NewItem(itemId, 1)
items = append(items, itemInfo)
case activity.ACT_TYPE_PASS:
itemId := passCfg.GetActivityItemId(activityInfo.Id)
itemInfo := item.NewItem(itemId, 1)
items = append(items, itemInfo)
}
}
return items
}
// 猫草大作战活动数据返回
func (p *Player) CatnipBackData() {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_CATNIP)
if activityInfo == nil {
return
}
CatnipMod := p.PlayMod.getCatnipMod()
status := p.GetActivityStatus(activity.ACT_TYPE_CATNIP)
if CatnipMod == nil {
return
}
FriendMod := p.PlayMod.getFriendMod()
gameList := make([]*msg.CatnipGame, 0, len(CatnipMod.Game))
for _, v := range CatnipMod.Game {
gameInfo := &msg.CatnipGame{
Id: int32(v.Id),
Progress: int32(v.Progress),
Status: int32(v.Status),
Reward: GoUtil.SliceIntToInt32(v.Reward),
Emoji: int32(v.EmojiId),
FriendProgress: int32(v.PartnerAdd),
SendEmoji: int32(v.SendEmoji),
}
if v.Partner != 0 {
playerData := G_getGameLogic().GetResSimplePlayerByUid(v.Partner)
if playerData != nil {
gameInfo.Partner = playerData
}
}
gameList = append(gameList, gameInfo)
}
tmpData := make(map[int]*msg.CatnipInvite)
for uid, info := range CatnipMod.InviteList {
tmpData[uid] = &msg.CatnipInvite{
Uid: int64(uid),
Time: info.Time,
Type: 1,
}
}
for uid, info := range CatnipMod.BeInvitedList {
tmpData[uid] = &msg.CatnipInvite{
Uid: int64(uid),
Time: info.Time,
Type: 2,
}
}
for uid := range FriendMod.NewFriendList {
partnerList := p.GetCatnipPartner(uid)
if len(GoUtil.IntSlice(partnerList)) >= 4 {
tmpData[uid] = &msg.CatnipInvite{
Uid: int64(uid),
Type: 3,
}
continue
}
if _, ok := tmpData[uid]; !ok {
tmpData[uid] = &msg.CatnipInvite{
Uid: int64(uid),
Type: 0,
}
}
}
for _, v := range CatnipMod.Game {
if invite, ok := tmpData[v.Partner]; ok {
invite.Type = 4 // 已参与游戏的好友不显示邀请
}
}
inviteList := make([]*msg.CatnipInvite, 0, len(tmpData))
for _, v := range tmpData {
resPlayerSimple := G_getGameLogic().GetResSimplePlayerByUid(int(v.Uid))
if resPlayerSimple != nil {
v.Player = resPlayerSimple
}
inviteList = append(inviteList, v)
}
template := catnipCfg.GetTemplateId(CatnipMod.Id)
res := &msg.ResCatnip{
Id: int32(CatnipMod.Id),
EndTime: int32(activityInfo.EndT),
Status: int32(status),
Template: int32(template),
GameList: gameList,
Multiply: int32(CatnipMod.Mul),
FriendList: inviteList,
}
p.PushClientRes(res)
}
func (p *Player) GetChampshipActivityId() (int, int) {
var todayActivityId int
var yesterdayActivityId int
activiyCfgList := G_GameLogicPtr.ActivityMgr.GetActivityList()
now := GoUtil.Now()
level := p.GetBaseMod().GetLevel()
type sortData struct {
Id int
EndTime int64
}
var sortList []sortData
for _, v := range activiyCfgList {
if v.Type != activity.ACT_TYPE_CHAMPION {
continue
}
if v.Level > level {
continue
}
if v.Startime <= now && v.Endtime >= now {
todayActivityId = v.Id
}
if v.Endtime < now {
sortList = append(sortList, sortData{Id: v.Id, EndTime: v.Endtime})
}
}
if len(sortList) > 0 {
sort.Slice(sortList, func(i, j int) bool {
return sortList[i].EndTime > sortList[j].EndTime
})
yesterdayActivityId = sortList[0].Id
}
return todayActivityId, yesterdayActivityId
}
func (p *Player) GetTodayAndYesterdayActivityId(atype int) (int, int) {
var todayActivityId int
var yesterdayActivityId int
activiyCfgList := G_GameLogicPtr.ActivityMgr.GetActivityList()
now := GoUtil.Now()
level := p.GetBaseMod().GetLevel()
type sortData struct {
Id int
EndTime int64
}
var sortList []sortData
for _, v := range activiyCfgList {
if v.Type != atype {
continue
}
if v.Level > level {
continue
}
if v.Startime <= now && v.Endtime >= now {
todayActivityId = v.Id
}
if v.Endtime < now {
sortList = append(sortList, sortData{Id: v.Id, EndTime: v.Endtime})
}
}
if len(sortList) > 0 {
sort.Slice(sortList, func(i, j int) bool {
return sortList[i].EndTime > sortList[j].EndTime
})
yesterdayActivityId = sortList[0].Id
}
return todayActivityId, yesterdayActivityId
}
func (p *Player) ChampionshipZeroUpdate() {
todayActivityId, _ := p.GetChampshipActivityId()
ChampionshipMod := p.PlayMod.getChampshipMod()
aid := ChampionshipMod.AId
var items []*item.Item
items = p.GetChampshipReward(aid)
if len(items) > 0 {
p.SendActivityMail2(items, "backend_championship_mail_title", "backend_championship_mail_content")
p.PushClientRes(p.GetMailMod().BackData())
}
p.PlayMod.getChampshipMod().ZeroUpdate(todayActivityId)
}
func (p *Player) GetChampshipReward(id int) []*item.Item {
ChampionshipMod := p.PlayMod.getChampshipMod()
if id == 0 { // 兼容旧数据之前没有活动id的只要发放一次奖励
DecorateMod := p.PlayMod.getDecorateMod()
orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId())
return ChampionshipMod.GetReward(0, orderFactor)
}
if ChampionshipMod == nil {
return nil
}
cfg := G_GameLogicPtr.ActivityMgr.GetChampshipCfg(id)
if cfg == nil {
return nil
}
DecorateMod := p.PlayMod.getDecorateMod()
orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId())
var maxRewardId int
var items []*item.Item
for _, v := range cfg.GetJackpotList() {
if ChampionshipMod.GetScore() >= int(v.Total) && int(v.Id) > ChampionshipMod.GetRewardId() {
maxRewardId = int(v.Id)
items = item.Merge(items, item.MsgToItem(v.Items))
if v.StarReward > 0 {
itemNum := GoUtil.FormatStarItemNum(int(v.StarReward), orderFactor)
starItem := item.NewItem(item.ITEM_STAR_ID, itemNum)
items = item.Merge(items, []*item.Item{starItem})
}
}
}
ChampionshipMod.SetRewardId(maxRewardId)
return items
}
func (p *Player) GetChampshipRankReward(rank, aid int) ([]*item.Item, error) {
ChampionshipMod := p.PlayMod.getChampshipMod()
if aid == 0 { // 兼容旧数据之前没有活动id的只要发放一次奖励
return ChampionshipMod.GetRankReward(rank, aid)
}
if ChampionshipMod == nil {
return nil, fmt.Errorf("championship mod is nil")
}
if ChampionshipMod.HasRankReward() {
return nil, fmt.Errorf("rank reward has been received")
}
cfg := G_GameLogicPtr.ActivityMgr.GetChampshipCfg(aid)
if cfg == nil {
return nil, fmt.Errorf("championship config is nil")
}
ChampionshipMod.SetRankReward()
rankRewardList := cfg.GetRankList()
var items []*item.Item
for _, v := range rankRewardList {
if rank <= int(v.Max) && rank >= int(v.Min) {
items = item.Merge(items, item.MsgToItem(v.Items))
return items, nil
}
}
return nil, fmt.Errorf("no rank reward found for rank %d", rank)
}
func (p *Player) GetDailyTaskActivityId() int {
var activityId int
activiyCfgList := G_GameLogicPtr.ActivityMgr.GetActivityList()
now := GoUtil.Now()
level := p.GetBaseMod().GetLevel()
activityIds := dailyTaskCfg.GetActivityIds()
for _, v := range activiyCfgList {
if !GoUtil.InArray(v.Type, activityIds) {
continue
}
if v.Level > level {
continue
}
if v.Startime <= now && v.Endtime >= now {
activityId = v.Id
break
}
}
return activityId
}
// 猫猫回礼返回
func (p *Player) CatReturnGiftBackData() {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_CAT_RETURN_GIFT)
if activityInfo == nil {
return
}
_, YestdayAid := p.GetTodayAndYesterdayActivityId(activity.ACT_TYPE_CAT_RETURN_GIFT)
cfg := G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(activityInfo.Id)
if cfg == nil {
return
}
CatReturnGiftMod := p.GetCatReturnGiftMod()
score := CatReturnGiftMod.GetScore()
reward := CatReturnGiftMod.GetReward()
// 清理期展示旧活动配置
if GoUtil.Now()-activityInfo.StartT < int64(cfg.ClearTime) {
cfg = G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(YestdayAid)
score = CatReturnGiftMod.GetLastScore()
reward = CatReturnGiftMod.GetLastReward()
}
res := &msg.ResCatReturnGift{
StartTime: activityInfo.StartT,
EndTime: activityInfo.EndT,
Cfg: cfg,
Score: int32(score),
Reward: int32(reward),
}
p.PushClientRes(res)
}