package mapPlayer import ( "f1-game/internal/code" "f1-game/internal/data" nameRemote "f1-game/internal/name/remote" "f1-game/internal/pb" ao "f1-game/nodes/game/player/asset/origin" "f1-game/nodes/map/internal/db" mapFacade "f1-game/nodes/map/internal/facade" signIn "f1-game/nodes/map/player/sign_in" cproto "github.com/cherry-game/cherry/net/proto" ) func (p *actorPlayer) initSignIn() { p.Local().Register(nameRemote.MapPlayer_DailySignIn, p.dailySignIn) p.Local().Register(nameRemote.MapPlayer_ReDailySignIn, p.reDailySignIn) p.Local().Register(nameRemote.MapPlayer_DailySignInReward, p.dailySignInReward) } func (p *actorPlayer) dailySignIn(session *cproto.Session, _ *pb.None) { var ( playerTable = db.GetMapPlayerTable(p.playerID) poolID = playerTable.SignIn.PoolID currentDay = signIn.Service().GetCurrentDay(playerTable) ) // 已签到过 if playerTable.SignIn.HasSignedIn(currentDay) { p.ResponseCode(session, code.SignInAlreadySigned) return } // 查看配置是否存在 signInRow, found := data.SignIn.GetByPoolIDDays(poolID, currentDay) if !found { p.ResponseCode(session, code.SignInConfigNotFound) return } _, errCode := mapFacade.Storage.AssetAdds(p.playerID, signInRow.Rewards, ao.SignInReward, true) if code.IsFail(errCode) { p.ResponseCode(session, errCode) return } // 更新签到数据 playerTable.SignIn.AddSignInDay(currentDay) playerTable.Save2Queue() resp := &pb.I32I32{ Key: currentDay, Value: playerTable.SignIn.TotalSignInDays, } p.Response(session, resp) } // 补签 func (p *actorPlayer) reDailySignIn(session *cproto.Session, req *pb.I32) { var ( playerTable = db.GetMapPlayerTable(p.playerID) reSignInDays = req.Value currentDays = signIn.Service().GetCurrentDay(playerTable) ) // 判断是否等于当天签到天数 if reSignInDays == currentDays { p.ResponseCode(session, code.SignInReSignNotCan) return } // 是否还有补签次数 if !playerTable.SignIn.HasReSignInCount() { p.ResponseCode(session, code.SignInReSignCountNotEnough) return } // 判断补签天数是否已经签到过 if playerTable.SignIn.HasSignedIn(reSignInDays) { p.ResponseCode(session, code.SignInAlreadySigned) return } var ( // TODO 当前总补签天数默认为1 后续如果接入vip增加补签天数再更新获取 totalReSignInDays = int32(1) canReSignInDays = totalReSignInDays - playerTable.SignIn.ReSignInCount ) // 补签次数不足 if canReSignInDays <= 0 { p.ResponseCode(session, code.SignInReSignCountNotEnough) return } // 检测是否可以补签 errCode := signIn.Service().CheckCanReSignIn(playerTable, reSignInDays, canReSignInDays) if code.IsFail(errCode) { p.ResponseCode(session, errCode) return } signInRow, found := data.SignIn.GetByPoolIDDays(playerTable.SignIn.PoolID, reSignInDays) if !found { p.ResponseCode(session, code.SignInConfigNotFound) return } _, errCode = mapFacade.Storage.AssetAdds(p.playerID, signInRow.Rewards, ao.ReSignInReward, true) if code.IsFail(errCode) { p.ResponseCode(session, errCode) return } playerTable.SignIn.AddSignInDay(reSignInDays) playerTable.SignIn.UseReSignInCount() playerTable.Save2Queue() resp := &pb.ReSignIn{ ReSignInDays: reSignInDays, TotalSignInDays: playerTable.SignIn.TotalSignInDays, ReSignInCount: playerTable.SignIn.ReSignInCount, } p.Response(session, resp) } // 领取累计签到奖励 func (p *actorPlayer) dailySignInReward(session *cproto.Session, req *pb.I32) { var ( playerTable = db.GetMapPlayerTable(p.playerID) rewardID = req.GetValue() ) signInRewardRow, found := data.SignInReward.GetByRewardID(rewardID) if !found { p.ResponseCode(session, code.SignInRewardConfigNotFound) return } if playerTable.SignIn.TotalSignInDays < signInRewardRow.NeedDays { p.ResponseCode(session, code.SignInDaysNotEnough) return } if playerTable.SignIn.HasReceivedAward(rewardID) { p.ResponseCode(session, code.SignInRewardAlreadyReceived) return } _, errCode := mapFacade.Storage.AssetAdds(p.playerID, signInRewardRow.CumRewards, ao.CumSignInReward) if code.IsFail(errCode) { p.ResponseCode(session, errCode) return } playerTable.SignIn.ReceiveAward(rewardID) playerTable.Save2Queue() resp := &pb.I32{ Value: rewardID, } p.Response(session, resp) }