| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- package signIn
- import (
- capp "f1-game/internal/cherry_app"
- "f1-game/internal/code"
- "f1-game/internal/data"
- "f1-game/internal/facade"
- nameRoute "f1-game/internal/name/route"
- "f1-game/internal/sessions"
- "f1-game/nodes/map/internal/db"
- "time"
- ctime "github.com/cherry-game/cherry/extend/time"
- cproto "github.com/cherry-game/cherry/net/proto"
- )
- const (
- maxReSignInDays int32 = 1
- )
- func Service() *service {
- return &service{}
- }
- type service struct {
- facade.PlayerServiceBase[*db.MapPlayerTable]
- }
- func (p *service) OnLogin(playerTable *db.MapPlayerTable, session *cproto.Session) {
- // 刷新库ID
- p.refreshPoolID(playerTable)
- }
- func (p *service) OnReset(playerTable *db.MapPlayerTable, time *ctime.CherryTime, byLogin bool) {
- if !playerTable.Stats.IsCanReset() {
- return
- }
- // 检测刷新库ID
- p.refreshPoolID(playerTable)
- // 重置每日补签次数
- playerTable.SignIn.ReSignInCount = 0
- playerTable.Save2Queue()
- if !byLogin {
- p.ChangePush(playerTable)
- }
- }
- func (p *service) Push(playerTable *db.MapPlayerTable, session *cproto.Session) {
- resp := playerTable.SignIn.ToProto()
- // 获取当前签到天数
- resp.CurrentSignInDays = p.GetCurrentDay(playerTable)
- sessions.PushWithSession(session, nameRoute.PushMapPlayer_SignIn, resp)
- }
- func (p *service) ChangePush(playerTable *db.MapPlayerTable) {
- session, found := sessions.GetSession(playerTable.PlayerID)
- if !found {
- return
- }
- p.Push(playerTable, session)
- }
- func (p *service) getOpenServerDays() int32 {
- nodeTable, found := db.GetMapNodeTable(capp.NodeID())
- if !found || nodeTable.FirstStartTime <= 0 {
- return 1
- }
- var (
- now = ctime.Now()
- firstTime = ctime.NewTime(time.UnixMilli(nodeTable.FirstStartTime), false).StartOfDay()
- )
- openDays := firstTime.DiffInDaysWithAbs(&now)
- openDays = openDays + 1
- if openDays <= 0 {
- return 1
- }
- return int32(openDays)
- }
- // 刷新签到库
- func (p *service) refreshPoolID(playerTable *db.MapPlayerTable) {
- var (
- openDays = p.getOpenServerDays()
- round, currentPoolID = data.SignIn.GetCurrentPoolID(openDays)
- )
- // 当前签到轮次和库无变更 不需要更新
- if round == playerTable.SignIn.Round && currentPoolID == playerTable.SignIn.PoolID {
- return
- }
- // 更新签到库ID&重置已签到天数
- playerTable.SignIn.Round = round
- playerTable.SignIn.PoolID = currentPoolID
- playerTable.SignIn.SignInDays.Clear()
- playerTable.Save2Queue()
- }
- // 获取当前签到天数
- func (p *service) GetCurrentDay(playerTable *db.MapPlayerTable) int32 {
- // 获取当前签到天数
- openDays := p.getOpenServerDays()
- return data.SignIn.GetCurrenSignInDays(openDays)
- }
- // 检测是否可以补签
- // curReSignInDay 当前补签天数
- // canReSignInDays 可以补签的天数
- func (p *service) CheckCanReSignIn(playerTable *db.MapPlayerTable, curReSignInDay, canReSignInDays int32) int32 {
- poolID := playerTable.SignIn.PoolID
- if poolID <= 0 {
- return code.IllegalArgument
- }
- list, found := data.SignIn.ListByPoolID(poolID)
- if !found {
- return code.SignInPoolNotFound
- }
- for _, row := range list {
- if !playerTable.SignIn.HasSignedIn(row.Days) {
- canReSignInDays--
- if row.Days == curReSignInDay {
- return code.OK
- }
- // 如果满足补签天数用完,说明当前补签的天数不符合
- if canReSignInDays <= 0 {
- return code.SignInReSignNotCan
- }
- }
- }
- return code.SignInNoMissedDays
- }
|