player_vip.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package player
  2. import (
  3. "f1-game/internal/code"
  4. "f1-game/internal/data"
  5. "f1-game/internal/enum"
  6. nameLocal "f1-game/internal/name/local"
  7. "f1-game/internal/pb"
  8. gameFacade "f1-game/nodes/game/internal/facade"
  9. assetOrigin "f1-game/nodes/game/player/asset/origin"
  10. cproto "github.com/cherry-game/cherry/net/proto"
  11. )
  12. func (p *actorPlayer) initVip() {
  13. p.Local().Register(nameLocal.Player_VipDailyReward, p.vipDailyReward)
  14. }
  15. // 领取每日VIP奖励
  16. func (p *actorPlayer) vipDailyReward(session *cproto.Session, req *pb.I32) {
  17. var (
  18. playerTable = p.PlayerTable()
  19. rewardType = enum.VipDailyRewardType(req.Value)
  20. )
  21. if !enum.IsVipDailyRewardType(rewardType) {
  22. p.ResponseCode(session, code.IllegalArgument)
  23. return
  24. }
  25. if playerTable.Vip.IsReceived(rewardType) {
  26. p.ResponseCode(session, code.VipDailyRewardReceived)
  27. return
  28. }
  29. playerTable.Vip.SetReceived(rewardType)
  30. switch rewardType {
  31. case enum.VipDailyRewardType_Exp:
  32. if addExp := data.VipDailyExp.GetExpByDay(playerTable.Stats.ContinueLoginDays); addExp > 0 {
  33. gameFacade.Vip.AddExp(p.playerID, addExp)
  34. }
  35. case enum.VipDailyRewardType_Box:
  36. if vipRow, found := data.Vip.GetByLevel(playerTable.Vip.Level); found {
  37. gameFacade.Asset.Adds(p.playerID, vipRow.DailyBox, assetOrigin.None, true)
  38. }
  39. }
  40. playerTable.Save2Queue()
  41. p.ResponseCode(session, code.OK)
  42. }