| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- package mapPlayer
- import (
- "f1-game/internal/code"
- "f1-game/internal/data"
- "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"
- ao "f1-game/nodes/game/player/asset/origin"
- assetOrigin "f1-game/nodes/game/player/asset/origin"
- "f1-game/nodes/map/internal/db"
- mapFacade "f1-game/nodes/map/internal/facade"
- "f1-game/nodes/map/player/facility"
- "f1-game/nodes/map/player/player"
- "f1-game/nodes/map/player/season"
- 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.EventRegister(nameEvent.Item_Add, p.onItemAddUpdate)
- p.EventRegister(nameEvent.Map_PlayerTileSiege, p.onTileSiegeAddContribution)
- p.EventRegister(nameEvent.Lord_FacilityUp, p.onFacilityUpAddContribution)
- }
- // 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) onItemAddUpdate(e cfacade.IEventData) {
- evt, ok := e.(*event.ItemAdd)
- if !ok {
- return
- }
- // 获得功勋、帝国晶矿和联盟贡献值
- var addFeat, addCrystalMine, addLeagueContribute int64
- for _, asset := range evt.Assets() {
- switch asset.ID {
- case enum.ItemIDFeat:
- // 武勋
- addFeat += asset.Num
- case enum.ItemIDCrystalMine:
- // 帝国金矿(沙盘经验)
- addCrystalMine += asset.Num
- case enum.ItemIDContribution:
- // 联盟贡献值
- addLeagueContribute += asset.Num
- }
- }
- // 获得帝国晶矿
- if addCrystalMine > 0 {
- // 转化成个人贡献值 按照比例折算
- leagueContribute := data.Const.CalCrystalMineToLeagueCon(addCrystalMine)
- mapFacade.Storage.AssetAddOne(p.playerID, enum.ItemIDContribution, leagueContribute, ao.None, p.isOnline)
- p.Warn("get league contribut value. playerID=%d, value=%d", p.playerID, leagueContribute)
- }
- // 更新个人功勋排行榜
- if addFeat > 0 {
- player.Service().SyncPlayerFeatRank(p.playerID)
- }
- // 刷新联盟经验
- player.Service().CheckAndAddLeagueExp(p.playerID, addFeat, addLeagueContribute)
- // 刷新玩家赛季积分
- season.Service().UpdatePlayerSeasonScore(p.playerID, addFeat, addLeagueContribute)
- }
- // 攻城值转换成联盟贡献值
- func (p *actorPlayer) onTileSiegeAddContribution(e cfacade.IEventData) {
- playerTable := db.GetMapPlayerTable(p.playerID)
- // 未加入联盟 跳过
- if playerTable.LeagueID <= 0 {
- return
- }
- evt, ok := e.(*event.TileSiege)
- if !ok {
- return
- }
- // 计算贡献值
- tileSiege := evt.TileSiege()
- // 获得联盟贡献
- leagueContribute := data.Const.CalSiegeToLeagueCon(int64(tileSiege.Value))
- if leagueContribute <= 0 {
- return
- }
- // 获得联盟贡献值
- mapFacade.Storage.AssetAddOne(p.playerID, enum.ItemIDContribution, leagueContribute, ao.None, p.isOnline)
- }
- // 城建创建繁荣度差值增加联盟贡献
- func (p *actorPlayer) onFacilityUpAddContribution(e cfacade.IEventData) {
- playerTable := db.GetMapPlayerTable(p.playerID)
- // 未加入联盟 跳过
- if playerTable.LeagueID <= 0 {
- return
- }
- evt, ok := e.(*event.FacilityUp)
- if !ok {
- return
- }
- var (
- facilityID = evt.FacilityID()
- curLevel = evt.Level()
- preLevel = curLevel - 1
- )
- // 声望差值
- diffPrestige := facility.Service().GetFacilityLevelDiffPrestige(facilityID, preLevel, curLevel)
- if diffPrestige <= 0 {
- return
- }
- // 获得联盟贡献值
- leagueContribute := data.Const.CalFacilityToLeagueCon(diffPrestige)
- if leagueContribute <= 0 {
- return
- }
- // 获得联盟贡献
- mapFacade.Storage.AssetAddOne(p.playerID, enum.ItemIDContribution, leagueContribute, ao.None, p.isOnline)
- }
|