From 1ea73e1885835466265ce788d93556b7030ee0e8 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期日, 30 十二月 2018 18:42:00 +0800 Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(GM工具增加子服服务器维护,文字翻译版) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 216 ++++++++++++++++------------------------------------- 1 files changed, 67 insertions(+), 149 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 8cd64f1..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 Operate_EquipSuitCompose +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 @@ -110,6 +102,7 @@ import PlayerFairyCeremony import ChNetSendPack import FamilyRobBoss +import FBHelpBattle import PyGameData import PlayerCoin import PlayerGeTui @@ -246,6 +239,11 @@ #同步GameServer自己的地图ID curPlayer.Sync_GameServer_MapID() + # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送 + # !!!必要发送的数据要注意位置 + if GameWorld.IsCrossServer(): + curPlayer.SetForbiddenSyncClientState(True) + SyncGuideState(curPlayer) #初始化玩家背包 @@ -254,8 +252,8 @@ #通知玩家物品信息 __Sync_PackDetel(curPlayer) - #更新主服ID信息 - #UpdatePlayerServerGroupID(curPlayer) + #更新服务器组ID + PlayerControl.UpdPlayerServerGroupID(curPlayer) #上线学习技能 SkillCommon.PlayerLoginCheckLearnSkill(curPlayer) @@ -302,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) @@ -476,10 +477,9 @@ # # # 时装 # PlayerCoat.OnLogin_Coat(curPlayer) -# -# # 跨服匹配 -# PlayerMergePK.MergePKOnLogin(curPlayer) -# PlayerMergeKing.MergePKOnLogin(curPlayer) + + # 跨服PK + PlayerCrossRealmPK.DoPlayerLogin(curPlayer) # 自定义货币值同步 PlayerControl.NotifyPlayerAllCurrency(curPlayer) @@ -524,7 +524,6 @@ #仙魔之争 GameLogic_XMZZ.OnXMZZLogin(curPlayer) PlayerOnlinePrize.OnPlayerLogin(curPlayer) - GameLogic_SealDemon.NotifyFMTDouble(curPlayer) #装备分解 PlayerEquipDecompose.PlayerLogin(curPlayer) #防沉迷 @@ -557,7 +556,10 @@ SyncLittleHelper(curPlayer) # 聊天气泡框 SyncChatBubbleBoxState(curPlayer) - + # 副本助战 + FBHelpBattle.DoPlayerLogin(curPlayer) + # 聚魂 + PlayerGatherSoul.PlayerLogin(curPlayer) curPlayer.SetState(0) # 脱机挂恢复为正常上线 curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线 tjgTime = PlayerTJG.GetTJGTime(curPlayer) @@ -567,6 +569,13 @@ # 如果被禁言的,上线同步前端 if curPlayer.GetGMForbidenTalk(): curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, curPlayer.GetGMForbidenTalk(), False) + + # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送 + # !!!必要发送的数据要注意位置 + if GameWorld.IsCrossServer(): + curPlayer.SetForbiddenSyncClientState(False) + PlayerControl.SetCrossRealmState(curPlayer, 1) # 因为主服上传数据之前该值为1,所以登录跨服后在跨服服务器要设置为1 + return @@ -687,8 +696,21 @@ itemManager = curPlayer.GetItemManager() for packIndex in ChConfig.Def_PlayerLoginInitPackIndexList: - itemManager.GetPack(packIndex).Sync_Refresh() - + rolePack = itemManager.GetPack(packIndex) + rolePack.Sync_Refresh() + + # 刷下装备评分,仓库可以暂不处理,取出装备后登录触发刷新 + for i in xrange(rolePack.GetCount()): + curItem = rolePack.GetAt(i) + if curItem.IsEmpty(): + continue + newScore = ItemCommon.CalcEquipGS(curItem) + hisScore = ItemCommon.GetEquipGearScore(curItem) + if hisScore != newScore: + ItemCommon.SetEquipGearScore(curItem, newScore) + GameWorld.Log("登录更新装备评分: packType=%s,i=%s,hisScore=%s,newScore=%s,itemID=%s,guid=%s" + % (packIndex, i, hisScore, newScore, curItem.GetItemTypeID(), curItem.GetGUID()), curPlayer.GetPlayerID()) + for packIndex in ChConfig.Def_VPackCnt_Dict.keys(): ItemControler.Sync_VPackItem_Refresh(curPlayer, packIndex) @@ -765,7 +787,7 @@ # @remarks 上线时通知离线时间(离线挂机功能) def __Sync_PlayerOffline(curPlayer, tick): #---等级限制--- - if GameWorld.IsMergeServer(): + if GameWorld.IsCrossServer(): return PlayerTJG.TJGDeadOffline(curPlayer) @@ -775,7 +797,7 @@ # if curPlayer.GetLV() < lvLimit: # return # -# if GameWorld.IsMergeServer(): +# if GameWorld.IsCrossServer(): # return # # #当前离线时间(分) @@ -804,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 #--------------------------------------------------------------------- @@ -1324,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) @@ -2448,7 +2455,6 @@ GameWorld.Log("PlayerDisconnect!" , curPlayer.GetPlayerID()) - PlayerMergeEvent.BroadcastMergePlayerEvent() #下线了,将存储在字典中的真实XP值,设置给玩家,完成通知和存储 #curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue)) ####################################################################### @@ -2492,7 +2498,7 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RoomID, 0) #下线召回宠物 - #PetControl.ReCallFightPet(curPlayer) + PetControl.ReCallFightPet(curPlayer) PlayerTJG.CalcPlayerTJG(curPlayer, tick) @@ -3786,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() @@ -3801,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 @@ -3895,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] @@ -3908,15 +3915,22 @@ SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer , ChConfig.Def_SkillID_ReviveTired, tick, buffSkillLV) GameWorld.DebugLog(' 复活疲劳BUff buffSkillLV=%s'%(buffSkillLV)) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsAddReviveTired,0) + #复活后清除角色身上的打BOSS和PK状态 + validTime = IpyGameDataPY.GetFuncCfg("PKConfig", 4) * 1000 + if PlayerState.IsInPKState(curPlayer): + PlayerState.SetPKStateTick(curPlayer, tick - validTime) + if PlayerState.IsInBossState(curPlayer): + PlayerState.SetBossStateTick(curPlayer, tick- validTime) - #重算属性 playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.RefreshAllState() #设置血量 curPlayer.SetHP(curPlayer.GetMaxHP() * resetHpPercent / ChConfig.Def_MaxRateValue) - curPlayer.SetMP(curPlayer.GetMaxMP() * resetMpPercent / ChConfig.Def_MaxRateValue) + #curPlayer.SetMP(curPlayer.GetMaxMP() * resetMpPercent / ChConfig.Def_MaxRateValue) + #护盾 + PlayerControl.SetProDef(curPlayer, PlayerControl.GetMaxProDef(curPlayer)) #玩家复活后副本处理 FBLogic.OnPlayerRebornOver(curPlayer, playerRebornType) @@ -4721,7 +4735,7 @@ #@remarks 离线经验兑换 def PlayerExpExchange(index, curPackData, tick): # 跨服服务器功能限制 - if GameWorld.IsMergeServer(): + if GameWorld.IsCrossServer(): return #兑换公式字典 @@ -5114,93 +5128,10 @@ # 功能开启奖励 elif rewardType == ChConfig.Def_RewardType_OpenFunc: GameFuncComm.GetFuncOpenAward(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) + # 冰晶矿脉星级奖励 + elif rewardType == ChConfig.Def_RewardType_IceLodeStar: + GameLogic_IceLode.GetIceLodeStarAward(curPlayer, dataEx) + return @@ -5401,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 @@ -5631,7 +5549,7 @@ sendPack.Speed = curPlayer.GetSpeed() sendPack.MoveType = moveType # NotifyAll 做过滤或者数量处理 - PlayerControl.PyNotifyAll(curPlayer, sendPack, False, -1) + PlayerControl.PyNotifyAll(curPlayer, sendPack, False, 0) return def GetDownloadAward(curPlayer, dataEx): -- Gitblit v1.8.0