| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- package model
- import (
- "rocommon/util"
- "roserver/baseserver/model"
- "roserver/serverproto"
- "time"
- )
- type TowerManager struct {
- updateTimer util.ServerTimer //更新定时器
- initStartUp bool
- seasonStartTime, seasonEndTime time.Time
- refreshTime time.Time
- day int32 //周期
- isRefresh bool //已经有玩家到达1000层可以增加周期
- initFromDb bool
- initFromDb2 bool
- }
- func newTowerMag() *TowerManager {
- mag := &TowerManager{
- day: 1,
- }
- mag.updateTimer = util.NewDurationTimer(util.GetCurrentTime(), 5000)
- return mag
- }
- func (this *TowerManager) init(ms uint64) {
- nowTime := util.GetTimeByUint64(ms)
- if nowTime.Before(this.seasonEndTime) {
- return
- }
- msg := &serverproto.SSTowerWjRankUpdateReq{}
- SendRankService(msg)
- util.ErrorF("tower rank refresh time:%v now day:%v isFresh:%v", nowTime, this.day, this.isRefresh)
- //this.refreshTime = nowTime
- this.seasonEndTime = this.seasonEndTime.AddDate(0, 0, 7)
- }
- // 成功发送消息返回true
- func (this *TowerManager) initTowerWjInfoFromDB() bool {
- //util.InfoF("initCompetitionInfoFromDB send to db")
- ssReqMsg := &serverproto.SSGetServerCompetitionReq{}
- if SendDb(ssReqMsg) {
- return true
- }
- return false
- }
- // 获取当前已经开启的赛季ID(from db)
- func (this *TowerManager) DoUpdateTowerInfoFromDB(ssAckMsg *serverproto.SSGetServerCompetitionAck) {
- this.initFromDb2 = true
- if ssAckMsg.TowerInfo != nil {
- TowerMag.day = ssAckMsg.TowerInfo.Day
- TowerMag.isRefresh = ssAckMsg.TowerInfo.IsRefresh
- }
- }
- func getThisWeekendAt23PM() time.Time {
- now := time.Now()
- // 计算到本周日的天数差(Sunday=0,Monday=1...)
- daysUntilSunday := (7 - int(now.Weekday())) % 7
- // 本周日 23:00:00
- weekendAt23PM := time.Date(
- now.Year(),
- now.Month(),
- now.Day()+daysUntilSunday, // 跳到周日
- 23, 0, 0, 0, // 23:00:00
- now.Location(),
- )
- return weekendAt23PM
- }
- func (this *TowerManager) getSeasonTime(seasonId int32) (time.Time, time.Time) {
- resetTime := int64((model.ConvertArenaSeason.Reset + 1) * HourMs)
- diffDurationDay := model.ConvertArenaSeason.DiffDurationDay
- deltaTime := (diffDurationDay + resetTime) * int64(seasonId-1)
- loc := util.GetLoc()
- startTime := time.Unix(model.ConvertArenaSeason.StartTime.Unix()+deltaTime, 0).In(loc)
- endTime := time.Unix(model.ConvertArenaSeason.EndTime.Unix()+deltaTime, 0).In(loc)
- return startTime, endTime
- }
- func (this *TowerManager) Update(ms uint64) {
- if !this.initStartUp {
- //获取本周星期weekday的时间戳作为排行榜刷新时间
- this.seasonEndTime = getThisWeekendAt23PM()
- this.initStartUp = true
- }
- if !this.initFromDb {
- if this.initTowerWjInfoFromDB() {
- this.initFromDb = true
- }
- return
- }
- if !this.initFromDb2 {
- this.initFromDb = false
- return
- }
- this.init(ms)
- //if this.initStartUp && this.updateTimer.IsStart() && this.updateTimer.IsExpired(ms) {
- // if len(ServerStateCacheList) <= 0 {
- // ssStateMsg := &serverproto.SSGetGServerStateReq{
- // ServerType: model.SERVICE_NODE_TYPE_GLOBALCROSSMAP,
- // }
- // SendSocial(ssStateMsg)
- // }
- //}
- }
- func (this *TowerManager) GetRankReward(role uint64, selfRank int32) {
- if selfRank <= 0 || role == 0 {
- return
- }
- //获取排名奖励,发送邮件
- //for _, data := range model.ConvertTowerWjRankInfo[this.day] {
- // if selfRank >= data.Left && selfRank <= data.Right {
- // itemList := make([]*serverproto.KeyValueType, 0)
- // for k, v := range data.RewardList {
- // itemList = append(itemList, &serverproto.KeyValueType{
- // Key: k,
- // Value: v,
- // })
- // }
- // //发送邮件
- // AddMailOnlineAndOffline([]uint64{role}, model.GlobalMailyuanhangRankAward, int32(serverproto.MailType_MailType_GM),
- // itemList, []int32{int32(util.GetTimeSeconds())}, "无尽爬塔排行榜奖励", "恭喜您在无尽爬塔中獲得了第"+strconv.FormatInt(int64(selfRank), 10)+"名")
- // //判断是否有玩家达到1000层,到了周期难度+1
- // if this.isRefresh {
- // this.day++
- // this.isRefresh = false
- // ssNtfMsg := &serverproto.SSServerCompetitionInfoSaveNtf{
- // TowerInfo: &serverproto.TowerRound{Day: this.day, IsRefresh: this.isRefresh},
- // }
- // SendDb(ssNtfMsg)
- // }
- // util.InfoF("send rank award uid:%v award:%v", role, itemList)
- // break
- // }
- //}
- //
- //// 赛季第一名触发称号事件
- //var value int32 = 1
- //if selfRank != 1 {
- // value = role.roleTask.GetTypeCnt(int32(serverproto.TaskType_Eve_Arean_First)) * -1
- //} else {
- // TaskMagCheck(role, serverproto.TaskType_Eve_Arean_First_Cnt, 1)
- //}
- //role.roleTask.AddTypeCnt(serverproto.TaskType_Eve_Arean_First, value)
- //TaskMagCheck(role, serverproto.TaskType_Eve_Arean_First, rewardSeasonId)
- }
|