game_player.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package actorRemote
  2. import (
  3. capp "f1-game/internal/cherry_app"
  4. "f1-game/internal/code"
  5. "f1-game/internal/enum"
  6. "f1-game/internal/extend/utils"
  7. nameActor "f1-game/internal/name/actor"
  8. nameRemote "f1-game/internal/name/remote"
  9. "f1-game/internal/pb"
  10. "f1-game/internal/types"
  11. assetOrigin "f1-game/nodes/game/player/asset/origin"
  12. cfacade "github.com/cherry-game/cherry/facade"
  13. clog "github.com/cherry-game/cherry/logger"
  14. )
  15. type gamePlayer struct {
  16. }
  17. func newGamePlayer() *gamePlayer {
  18. return &gamePlayer{}
  19. }
  20. func (p *gamePlayer) AssetAdd(gameNodeID string, playerID int64, addAssets types.Assets, ao assetOrigin.Origin) (*pb.AssetList, int32) {
  21. return p.assetOpt(gameNodeID, playerID, nameRemote.Player_AssetAdd, addAssets, ao)
  22. }
  23. // AssetAddAsync 异步添加资产
  24. func (p *gamePlayer) AssetAddAsync(gameNodeID string, playerID int64, addAssets types.Assets, ao assetOrigin.Origin) {
  25. var (
  26. req = &pb.PlayerAddAssets{
  27. AddAssets: addAssets.ToProto(),
  28. Origin: ao.ID,
  29. }
  30. path = cfacade.NewChildPath(gameNodeID, nameActor.GamePlayer, playerID)
  31. )
  32. errCode := capp.Call(path, nameRemote.Player_AssetAdd, req)
  33. if code.IsFail(errCode) {
  34. clog.Warnf("[playerID=%d] add assets failed. errCode: %d", playerID, errCode)
  35. }
  36. }
  37. func (p *gamePlayer) AssetCheck(gameNodeID string, playerID int64, assets types.Assets) int32 {
  38. var (
  39. req = &pb.AssetList{
  40. List: assets.ToProto(),
  41. }
  42. rsp = &pb.I32{}
  43. path = cfacade.NewChildPath(gameNodeID, nameActor.GamePlayer, playerID)
  44. )
  45. errCode := capp.CallWait(path, nameRemote.Player_AssetCheck, req, rsp)
  46. if code.IsFail(errCode) {
  47. return errCode
  48. }
  49. return rsp.Value
  50. }
  51. func (p *gamePlayer) AssetSub(gameNodeID string, playerID int64, subAssets types.Assets, ao assetOrigin.Origin) (*pb.AssetList, int32) {
  52. return p.assetOpt(gameNodeID, playerID, nameRemote.Player_AssetSub, subAssets, ao)
  53. }
  54. func (p *gamePlayer) assetOpt(gameNodeID string, playerID int64, fn string, assets types.Assets, ao assetOrigin.Origin) (*pb.AssetList, int32) {
  55. var (
  56. req = &pb.PlayerAddAssets{
  57. AddAssets: assets.ToProto(),
  58. Origin: ao.ID,
  59. }
  60. rsp = &pb.AssetList{}
  61. path = cfacade.NewChildPath(gameNodeID, nameActor.GamePlayer, playerID)
  62. )
  63. errCode := capp.CallWait(path, fn, req, rsp)
  64. return rsp, errCode
  65. }
  66. // 调用gm指令
  67. func (p *gamePlayer) SendGM(gameNodeID string, playerID int64, gm string) int32 {
  68. req := &pb.Str{
  69. Value: gm,
  70. }
  71. errCode := p.CallWait(gameNodeID, playerID, nameRemote.Player_SendGM, req, nil)
  72. return errCode
  73. }
  74. // 获取玩家信息
  75. func (p *gamePlayer) GetPlayerInfo(gameNodeID string, playerID int64) (int32, *pb.PlayerDetailInfo) {
  76. req := &pb.I64{
  77. Value: playerID,
  78. }
  79. resp := &pb.PlayerDetailInfo{}
  80. errCode := p.CallWait(gameNodeID, playerID, nameRemote.Player_GetInfo, req, resp)
  81. return errCode, resp
  82. }
  83. func (p *gamePlayer) GamePlayerCallSystemMsg(gameNodeID string, playerID int64, msgType enum.ChatMsgType, asserts types.Assets, points types.Points, params ...any) {
  84. targetPath := cfacade.NewChildPath(gameNodeID, nameActor.GamePlayer, playerID)
  85. req := &pb.ParamsTemplate{
  86. Type: int32(msgType),
  87. Params: utils.ToStringSlice(params...),
  88. }
  89. if asserts != nil {
  90. assertListProto := asserts.ToAssetListProto()
  91. req.Assets = &assertListProto
  92. }
  93. if points != nil {
  94. req.Points = points.ToProtos()
  95. }
  96. capp.Call(targetPath, nameRemote.Player_ChatMapSystemMsg, req)
  97. }
  98. func (p *gamePlayer) CallWait(gameNodeID string, playerID int64, funcName string, req, resp any) int32 {
  99. path := cfacade.NewChildPath(gameNodeID, nameActor.GamePlayer, playerID)
  100. return capp.CallWait(path, funcName, req, resp)
  101. }
  102. func (p *gamePlayer) Call(gameNodeID string, playerID int64, funcName string, req any) int32 {
  103. path := cfacade.NewChildPath(gameNodeID, nameActor.GamePlayer, playerID)
  104. return capp.Call(path, funcName, req)
  105. }