From c67a2d59e881e3d1df1a4142983e76e8fb5db24a Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 28 十二月 2018 21:26:28 +0800 Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(匹配规则优化,优先匹配同段位的,同段位不足两个人的支持按段位区间匹配) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 169 ++++++++------------------------------------------------ 1 files changed, 25 insertions(+), 144 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py index ad65c9f..befd498 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py @@ -18,7 +18,6 @@ import GameMap import ChConfig import EventShell -import SkillShell import BuffSkill import PlayerEventCounter import PlayerTeam @@ -57,10 +56,8 @@ import PlayerLoginDayAward import PlayerGodWeapon import PlayerWorldAverageLv -import GameLogic_ManorWar import PlayerGoldInvest import PlayerActivity -import PlayerTeHui import FBCommon import PlayerBindJadeWheel import BossHurtMng @@ -70,15 +67,12 @@ import PlayerDienstgrad import PlayerMixLoginDayAward import PlayerFreeGoods -import ShopItemManage import PlayerRecover import GameLogic_IceLode import PlayerEquipDecompose -import PlayerCoat import PlayerGreatMaster -import PlayerCostVIP -import PlayerMergeKing -import PlayerMergePK +import PlayerGatherSoul +import PlayerCrossRealmPK import GameFuncComm import PlayerMagicWeapon import GameLogic_TrialTower @@ -86,7 +80,6 @@ import PlayerBossReborn import Operate_EquipWash import PlayerTreasure -import PlayerMergeEvent import GameLogic_GodArea import PlayerRune import PlayerFamilyRedPacket @@ -101,7 +94,6 @@ import QuestCommon import PlayerTJG import GameLogic_XMZZ -import GameLogic_SealDemon import PlayerFlashSale import PlayerFlashGiftbag import PlayerCostRebate @@ -249,7 +241,7 @@ # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送 # !!!必要发送的数据要注意位置 - if GameWorld.IsMergeServer(): + if GameWorld.IsCrossServer(): curPlayer.SetForbiddenSyncClientState(True) SyncGuideState(curPlayer) @@ -260,8 +252,8 @@ #通知玩家物品信息 __Sync_PackDetel(curPlayer) - #更新主服ID信息 - #UpdatePlayerServerGroupID(curPlayer) + #更新服务器组ID + PlayerControl.UpdPlayerServerGroupID(curPlayer) #上线学习技能 SkillCommon.PlayerLoginCheckLearnSkill(curPlayer) @@ -308,7 +300,10 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FuncChangeLineID, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HighChangeLineID, 0) #GameWorld.DebugLog("离线超过10秒重置切线临时保存的相关记录值!leaveServerSecond=%s" % leaveServerSecond, curPlayer.GetPlayerID()) - + # 离线过久恢复为非跨服状态 + if PlayerControl.GetCrossRealmState(curPlayer): + PlayerControl.SetCrossRealmState(curPlayer, 0) + # 合服首登处理 __DoMixServerFirstLogin(curPlayer) PlayerBillboard.BillboardOnLogin(curPlayer) @@ -482,10 +477,9 @@ # # # 时装 # PlayerCoat.OnLogin_Coat(curPlayer) -# -# # 跨服匹配 -# PlayerMergePK.MergePKOnLogin(curPlayer) -# PlayerMergeKing.MergePKOnLogin(curPlayer) + + # 跨服PK + PlayerCrossRealmPK.DoPlayerLogin(curPlayer) # 自定义货币值同步 PlayerControl.NotifyPlayerAllCurrency(curPlayer) @@ -564,7 +558,8 @@ SyncChatBubbleBoxState(curPlayer) # 副本助战 FBHelpBattle.DoPlayerLogin(curPlayer) - + # 聚魂 + PlayerGatherSoul.PlayerLogin(curPlayer) curPlayer.SetState(0) # 脱机挂恢复为正常上线 curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线 tjgTime = PlayerTJG.GetTJGTime(curPlayer) @@ -577,8 +572,9 @@ # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送 # !!!必要发送的数据要注意位置 - if GameWorld.IsMergeServer(): + if GameWorld.IsCrossServer(): curPlayer.SetForbiddenSyncClientState(False) + PlayerControl.SetCrossRealmState(curPlayer, 1) # 因为主服上传数据之前该值为1,所以登录跨服后在跨服服务器要设置为1 return @@ -791,7 +787,7 @@ # @remarks 上线时通知离线时间(离线挂机功能) def __Sync_PlayerOffline(curPlayer, tick): #---等级限制--- - if GameWorld.IsMergeServer(): + if GameWorld.IsCrossServer(): return PlayerTJG.TJGDeadOffline(curPlayer) @@ -801,7 +797,7 @@ # if curPlayer.GetLV() < lvLimit: # return # -# if GameWorld.IsMergeServer(): +# if GameWorld.IsCrossServer(): # return # # #当前离线时间(分) @@ -830,20 +826,6 @@ # # curPlayer.Syn_OfflineTimeRefresh(int(curOfflineMinutes)) # curPlayer.Syn_OfflineTimeQueryResult() #=============================================================================== - return - -def UpdatePlayerServerGroupID(curPlayer): - # 更新自己的服务器组ID, 跨服服务器不处理 - if GameWorld.IsMergeServer(): - return - serverGroupID = GameWorld.GetServerGroupID() - if not serverGroupID: - return - playerServerGroupID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ServerGroupID) - if playerServerGroupID != serverGroupID: - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ServerGroupID, serverGroupID) - GameWorld.DebugLog("更新玩家所属服务器组ID: serverGroupID=%s" % serverGroupID) - return #--------------------------------------------------------------------- @@ -1350,8 +1332,7 @@ #设置阵营 if curPlayer.GetFaction() != ChConfig.CampType_Neutral \ - and GameWorld.GetMap().GetMapID() not in ChConfig.Def_MapID_NeedCamp \ - and GameWorld.GetMap().GetMapID() not in ReadChConfig.GetEvalChConfig("MapID_NeedCamp"): + and FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID()) not in ChConfig.Def_MapID_NeedCamp: #重置阵营 curPlayer.SetFaction(ChConfig.CampType_Neutral) BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_Justice, tick) @@ -2474,7 +2455,6 @@ GameWorld.Log("PlayerDisconnect!" , curPlayer.GetPlayerID()) - PlayerMergeEvent.BroadcastMergePlayerEvent() #下线了,将存储在字典中的真实XP值,设置给玩家,完成通知和存储 #curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue)) ####################################################################### @@ -3812,7 +3792,7 @@ #@param mapBornPlace 复活位置,默认0为原地 #@return 返回值无意义 #@remarks 自定义函数, 玩家复活 -def PlayerRebornByType(curPlayer, playerRebornType, tick, mapBornPlace=0): +def PlayerRebornByType(curPlayer, playerRebornType, tick, mapBornPlace=0, isAddSuperBuff=True): curPlayerID = curPlayer.GetID() curVipLv = curPlayer.GetVIPLv() @@ -3827,7 +3807,7 @@ #复活冷却时间(秒) rebornTime = GetRebronTime(curPlayer, playerRebornType) #冷却时间到了 - if not CanRebornByTimeOver(curPlayer, rebornTime): + if playerRebornType != ChConfig.rebornType_System and not CanRebornByTimeOver(curPlayer, rebornTime): PlayerControl.NotifyCode(curPlayer, 'RebornCD') return False @@ -3921,7 +3901,8 @@ FBLogic.OnResetFBRebornPlacePos(curPlayer, mapBornPlace, tick) #复活加无敌Buff - SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer , ChConfig.Def_SkillID_LimitSuperBuff, tick) + if isAddSuperBuff: + SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer , ChConfig.Def_SkillID_LimitSuperBuff, tick) #复活疲劳BUff if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsAddReviveTired): findBuff = SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_ReviveTired)[0] @@ -4754,7 +4735,7 @@ #@remarks 离线经验兑换 def PlayerExpExchange(index, curPackData, tick): # 跨服服务器功能限制 - if GameWorld.IsMergeServer(): + if GameWorld.IsCrossServer(): return #兑换公式字典 @@ -5150,94 +5131,7 @@ # 冰晶矿脉星级奖励 elif rewardType == ChConfig.Def_RewardType_IceLodeStar: GameLogic_IceLode.GetIceLodeStarAward(curPlayer, dataEx) - -# -# # 充值豪礼奖励 -# elif rewardType == ShareDefine.Def_RewardType_GoldGift: -# PlayerGoldGift.GetPlayerGoldGift(curPlayer, dataEx) -# -# # 累计签到奖励 -# #elif rewardType == ShareDefine.Def_RewardType_DaySign: -# # PlayerSignDay.GiveSignCntAward(curPlayer, dataEx) -# -# # 天天首充奖励 -# elif rewardType == ShareDefine.Def_RewardType_DailyGold: -# PlayerGoldGift.GetPlayerDailyGoldChargeGift(curPlayer) -# -# # 单日充值多选一礼包 -# elif rewardType == ShareDefine.Def_RewardType_SingleGoldGift: -# giftLV = 0 # 默认第一档0 -# if dataExStr: -# try: -# giftLV = int(dataExStr) -# except: -# GameWorld.ErrLog("单日充值多选一礼包奖励档错误!%s" % dataExStr) -# PlayerGoldGift.GetSingleGoldGift(curPlayer, dataEx, giftLV, 0) -# -# # 当日充值无限领取礼包 -# elif rewardType == ShareDefine.Def_RewardType_UnlimitedGoldGift: -# PlayerGoldGift.GetSingleGoldGift(curPlayer, 0, 0, 1) -# -# # 登陆签到奖励 -# #elif rewardType == ShareDefine.Def_RewardType_DayLoginSign: -# # PlayerSignDay.GetDaySignAward(curPlayer, dataEx) -# -# # 跨服PK奖励 -# elif rewardType == ShareDefine.Def_RewardType_MergePKAward: -# PlayerMergePK.OnQueryMergePKAward(curPlayer, dataEx, GameWorld.ToIntDef(dataExStr), tick) -# -# # 王者争霸全服荣耀奖励 -# elif rewardType == ShareDefine.Def_RewardType_ServerHonour: -# PlayerMergeKing.GetMergeKingAward_ServerHonour(curPlayer) -# -# # 王者争霸晋级排名奖励 -# elif rewardType == ShareDefine.Def_RewardType_MergeKingRank: -# PlayerMergeKing.GetMergeKingAward_Rank(curPlayer) -# -# # 王者争霸竞猜积分奖励 -# elif rewardType == ShareDefine.Def_RewardType_MergeKingSupport: -# PlayerMergeKing.GetMergeKingAward_Support(curPlayer, dataEx, tick) -# -# # QQ成长礼包奖励 -# elif rewardType in [ShareDefine.Def_RewardType_QQUpYellow, ShareDefine.Def_RewardType_QQUpBlue]: -# PlayerQQ.GetQQUpReward(curPlayer, rewardType, dataEx) -# -# # QQ新手礼包奖励 -# elif rewardType == ShareDefine.Def_RewardType_QQNewMan: -# PlayerQQ.GetQQNewManAward(curPlayer, rewardType, dataEx) -# -# # QQ每日礼包奖励 -# elif rewardType == ShareDefine.Def_RewardType_QQDayGift: -# PlayerQQ.GetQQDayGift(curPlayer, rewardType, dataEx) -# -# # Qzone成长礼包奖励 -# elif rewardType == ShareDefine.Def_RewardType_QzoneUp: -# PlayerQQ.GetQzoneUpReward(curPlayer, rewardType, dataEx) -# -# # Qzone新手礼包奖励 -# elif rewardType == ShareDefine.Def_RewardType_QzoneNewMan: -# PlayerQQ.GetQzoneNewManAward(curPlayer, rewardType, dataEx) -# -# # Qzone每日礼包奖励 -# elif rewardType == ShareDefine.Def_RewardType_QzoneDayGift: -# PlayerQQ.GetQzoneDayGift(curPlayer, rewardType, dataEx) -# -# # 消费VIP等级奖励 -# elif rewardType == ShareDefine.Def_RewardType_CostVIPLV: -# PlayerCostVIP.GetCostVIPAward(curPlayer, dataEx) -# -# # 消费VIP成长奖励 -# elif rewardType == ShareDefine.Def_RewardType_CostVIPGrowUp: -# PlayerCostVIP.GetVIPGrowUpAward(curPlayer, dataEx) -# # 转生领奖 -# elif rewardType == ShareDefine.Def_RewardType_Reincarnation: -# PlayerReincarnation.GetReincarnationAward(curPlayer, dataEx) -# # 跨服boss首次参与奖励 -# elif rewardType == ShareDefine.Def_RewardType_MergeBossFirstJoinAward: -# GameLogic_MergeBoss.OnGetMergeBossFirstJoinAward(curPlayer) -# # 悬赏任务积分奖励 -# elif rewardType == ShareDefine.Def_RewardType_ArrestTaskAward: -# PlayerArrestTask.OnGetArrestPointAward(curPlayer, dataEx) + return @@ -5438,19 +5332,6 @@ sendMsg = "%s" % str([tagMapID, tagLineID, npcIDList]) curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_NPCCnt, 0, 'NPCCnt', sendMsg, len(sendMsg)) - return - - -## 跨服赛报名状态 -# @param index 玩家索引 -# @param tick 当前时间 -# @return None -def SendRegisterState(curPlayer, state): - resultPack = ChPyNetSendPack.tagMergeWarRegisterState() - resultPack.Clear() - - resultPack.RegisterState = state - NetPackCommon.SendFakePack(curPlayer, resultPack) return -- Gitblit v1.8.0