| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package mapPlayer
- import (
- "f1-game/internal/code"
- "f1-game/internal/enum"
- "f1-game/internal/event"
- nameEvent "f1-game/internal/name/event"
- nameRemote "f1-game/internal/name/remote"
- "f1-game/internal/pb"
- "f1-game/internal/types"
- assetOrigin "f1-game/nodes/game/player/asset/origin"
- mapFacade "f1-game/nodes/map/internal/facade"
- "f1-game/nodes/map/player/player"
- cfacade "github.com/cherry-game/cherry/facade"
- )
- // 初始化地图货币路由接口
- func (p *actorPlayer) initAsset() {
- p.Remote().Register(nameRemote.MapPlayer_AssetAdd, p.assetAdd)
- p.Remote().Register(nameRemote.MapPlayer_AssetSub, p.assetSub)
- p.Remote().Register(nameRemote.MapPlayer_AssetCheck, p.assetCheck)
- p.Event().Register(nameEvent.Item_Add, p.onPlayerGloryUpdate)
- }
- // assetAdd 添加资产
- func (p *actorPlayer) assetAdd(req *pb.PlayerAddAssets) (*pb.AssetList, int32) {
- var (
- ao = assetOrigin.Get(req.Origin)
- mapAddAssets = types.Assets{}
- push = p.isOnline
- )
- for _, asset := range req.AddAssets {
- if !enum.IsMapCurrency(asset.Id) && !enum.IsLeagueCurrency(asset.Id) {
- continue
- }
- mapAddAssets.AddAsset(&types.Asset{
- ID: asset.Id,
- Num: asset.Num,
- })
- }
- // 玩家在线才推送
- retAssets, errCode := mapFacade.Storage.AssetAdds(p.playerID, mapAddAssets, ao, push)
- rsp := retAssets.ToAssetListProto()
- return &rsp, errCode
- }
- // assetSub 扣除资产
- func (p *actorPlayer) assetSub(req *pb.PlayerAddAssets) (*pb.AssetList, int32) {
- var (
- ao = assetOrigin.Get(req.Origin)
- mapAddAssets = types.Assets{}
- )
- // 过滤game节点的资源,避免循环callWait
- for _, asset := range req.AddAssets {
- if !enum.IsMapCurrency(asset.Id) {
- continue
- }
- mapAddAssets.AddAsset(&types.Asset{
- ID: asset.Id,
- Num: asset.Num,
- })
- }
- if len(mapAddAssets) == 0 {
- return nil, code.IllegalArgument
- }
- retAssets, errCode := mapFacade.Storage.AssetSubs(p.playerID, mapAddAssets, ao, true)
- rsp := retAssets.ToAssetListProto()
- return &rsp, errCode
- }
- // assetSub 检测地图资产
- func (p *actorPlayer) assetCheck(req *pb.AssetList) int32 {
- var (
- mapAssets = types.Assets{}
- )
- for _, asset := range req.List {
- mapAssets.AddAsset(&types.Asset{
- ID: asset.Id,
- Num: asset.Num,
- })
- }
- if !mapFacade.Storage.IsAllEnough(p.playerID, mapAssets) {
- return code.CurrencyNotEnough
- }
- return code.OK
- }
- // 武勋更新
- func (p *actorPlayer) onPlayerGloryUpdate(e cfacade.IEventData) {
- evt, ok := e.(*event.ItemAdd)
- if !ok {
- return
- }
- for _, asset := range evt.Assets() {
- if asset.ID == enum.ItemIDFeat {
- player.Service().SyncPlayerGloryRank(p.playerID)
- return
- }
- }
- }
|