hxp
2019-01-10 54531eb1ab1a76b508129e21ec5b7c32a1c7d0dc
5722 【后端】【1.5】跨服BOSS开发(跨服boss地图支持挂机经验)
10个文件已修改
70 ■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_SetPlayerAttr.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
@@ -818,7 +818,7 @@
#        return
    vsRoomID = curPlayer.GetVsRoomId()
    if vsRoomID and PlayerControl.GetCrossRealmState(curPlayer) == 1:
    if vsRoomID and PlayerControl.GetCrossMapID(curPlayer) == ChConfig.Def_FBMapID_CrossRealmPK:
        GameWorld.DebugLog("玩家跨服PK状态,不能取消匹配!vsRoomID=%s" % vsRoomID, curPlayer.GetPlayerID())
        return
    
@@ -1774,7 +1774,7 @@
                    matchPlayer.MaxProDef = readyPlayerInfo["MaxProDef"]
                    break
                
            PlayerControl.SetCrossRealmState(player, ChConfig.Def_FBMapID_CrossRealmPK)
            PlayerControl.SetCrossMapID(player, ChConfig.Def_FBMapID_CrossRealmPK)
            SetIsCrossPKMatching(player, 0)
            
            # 通知匹配成功,可进入跨服
@@ -1817,7 +1817,7 @@
            GameWorld.DebugLog("    房间ID不同, playerID=%s" % (playerID))
            continue
        player.SetDict(ChConfig.Def_PlayerKey_IsLoginToMergeServer, 0)
        PlayerControl.SetCrossRealmState(player, 0)
        PlayerControl.SetCrossMapID(player, 0)
        
    return
@@ -1908,7 +1908,7 @@
    overInfoData = PyDataManager.GetCrossPKUnNotifyOverInfoManager().GetPlayerUnNotifyOverInfo(playerID)
    if not overInfoData:
        return
    PlayerControl.SetCrossRealmState(curPlayer, 0)
    PlayerControl.SetCrossMapID(curPlayer, 0)
    PlayerControl.SetVsRoomId(curPlayer, 0)
    
    zoneID = overInfoData.ZoneID
ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
@@ -101,7 +101,7 @@
            curPlayer = playerManager.GetActivePlayerAt(i)
            if curPlayer == None:
                continue
            PlayerControl.SetCrossRealmState(curPlayer, 0)
            PlayerControl.SetCrossMapID(curPlayer, 0)
            curPlayer.Kick(0)
            
    # 广播所有子服,本服务器进入维护
@@ -121,7 +121,7 @@
            curPlayer = playerManager.GetActivePlayerAt(i)
            if curPlayer == None:
                continue
            PlayerControl.SetCrossRealmState(curPlayer, 0)
            PlayerControl.SetCrossMapID(curPlayer, 0)
            
    # 通知地图
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isOpen)
@@ -139,7 +139,7 @@
    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ExitCrossServer, playerID, [serverGroupID])
    
    # 设置非跨服状态,踢下线
    PlayerControl.SetCrossRealmState(curPlayer, 0)
    PlayerControl.SetCrossMapID(curPlayer, 0)
    curPlayer.Kick(0)
    GameWorld.Log("PlayerExitCrossServer...serverGroupID=%s" % serverGroupID, playerID)
    return
@@ -152,7 +152,7 @@
    if not curPlayer:
        GameWorld.Log("    退出跨服时本服玩家不在线!", playerID)
        return
    PlayerControl.SetCrossRealmState(curPlayer, 0)
    PlayerControl.SetCrossMapID(curPlayer, 0)
    return
def SendCrossRealmReg(curPlayer, registerMap, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0):
@@ -226,7 +226,7 @@
    '''
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    GameWorld.ErrLog("某些异常情况下,前端强制发包退出跨服状态! ", curPlayer.GetPlayerID())
    PlayerControl.SetCrossRealmState(curPlayer, 0)
    PlayerControl.SetCrossMapID(curPlayer, 0)
    return
#// C0 02 查看跨服玩家信息 #tagCGViewCrossPlayerInfo
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
@@ -296,13 +296,10 @@
    SetMapServerPlayerAttrValue(curPlayer, "SetVsRoomId", roomID)
    return
## 跨服状态: 0-非跨服状态,1-跨服状态
def GetCrossRealmState(curPlayer): return curPlayer.GetExAttr5()
def SetCrossRealmState(curPlayer, value):
    ''' 设置玩家跨服状态
    @param isExitCrossRealm: 非跨服状态时是否通知前端退出跨服服务器
    '''
    curPlayer.SetExAttr5(1 if value else 0)
## 跨服状态所在地图ID: 0-非跨服状态,非0-跨服状态对应的地图ID
def GetCrossMapID(curPlayer): return curPlayer.GetExAttr5()
def SetCrossMapID(curPlayer, value):
    curPlayer.SetExAttr5(value)
    SetMapServerPlayerAttrValue(curPlayer, "SetExAttr5", value)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3328,7 +3328,6 @@
Def_Player_Dict_FromLineID = 'FromLineID'    # 最后一次离开的非中立常规地图,线路ID
Def_PlayerKey_CrossRegisterMap = "CrossRegisterMap"  #跨服注册活动地图, dataMapID
Def_PlayerKey_CrossMapID = "CrossMapID"  #玩家所在跨服地图ID
Def_PlayerKey_IsCrossPKMatching = "IsCrossPKMatching"  #是否跨服匹配中
Def_Player_Dict_FamilyTechLV = "FamilyTechLV_%s"    #家族科技等级, 参数(科技ID)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -240,7 +240,7 @@
    playerControl = PlayerControl.PlayerControl(curPlayer)
    playerControl.ReCalcAllState()
    
    if PlayerControl.GetCrossRealmState(curPlayer):
    if PlayerControl.GetCrossMapID(curPlayer):
        CrossRealmPlayer.DoExitCrossRealm(curPlayer)
        
    return
@@ -376,7 +376,7 @@
    # !!!必要发送的数据要注意位置
    if GameWorld.IsCrossServer():
        curPlayer.SetForbiddenSyncClientState(False)
        PlayerControl.SetCrossRealmState(curPlayer, curPlayer.GetMapID()) # 因为主服上传数据之前该值为0,所以登录跨服后在跨服服务器要设置为1
        PlayerControl.SetCrossMapID(curPlayer, curPlayer.GetMapID()) # 因为主服上传数据之前该值为0,所以登录跨服后在跨服服务器要设置为对应地图
        
    return
@@ -458,8 +458,8 @@
        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)
        if PlayerControl.GetCrossMapID(curPlayer):
            PlayerControl.SetCrossMapID(curPlayer, 0)
            
    # 合服首登处理
    __DoMixServerFirstLogin(curPlayer)
@@ -1008,7 +1008,7 @@
    SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick)
            
    #刷新玩家的视野
    if not GameWorld.IsCrossServer() and PlayerControl.GetCrossRealmState(curPlayer):
    if not GameWorld.IsCrossServer() and PlayerControl.GetCrossMapID(curPlayer):
        GameWorld.DebugLog("===登录本服地图时,处于跨服状态,不刷新视野!", curPlayer.GetPlayerID())
    else:
        PlayerState.ChangePlayerSigh(curPlayer, tick)
@@ -1362,7 +1362,7 @@
    firstMission = QuestCommon.GetCommonMission(curPlayer)
    if not (firstMission and firstMission.GetProperty(QuestCommon.Def_NewGuyNoSight) == 1):
        #刷新自己的视野
        if not GameWorld.IsCrossServer() and PlayerControl.GetCrossRealmState(curPlayer):
        if not GameWorld.IsCrossServer() and PlayerControl.GetCrossMapID(curPlayer):
            GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服状态,不设置可见!", curPlayer.GetPlayerID())
        else:
            curPlayer.RefreshView()
@@ -2330,7 +2330,7 @@
        GameWorld.DebugLog("跨服服务器不接受复活请求!")
        return
    
    if PlayerControl.GetCrossRealmState(curPlayer):
    if PlayerControl.GetCrossMapID(curPlayer):
        OnReqCrossServerReborn(curPlayer, rebornType)
        return
    
@@ -2349,7 +2349,7 @@
def OnReqCrossServerReborn(curPlayer, rebornType):
    ## 请求跨服服务器复活玩家
    
    crossMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_CrossMapID)
    crossMapID = PlayerControl.GetCrossMapID(curPlayer)
    if not crossMapID:
        GameWorld.DebugLog("当前无跨服地图!")
        return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
@@ -87,7 +87,7 @@
    GameWorld.SendMsgToClientServer(ShareDefine.CrossServerMsg_ExitCrossServer, playerID, [serverGroupID])
    
    # 设置非跨服状态,踢下线
    PlayerControl.SetCrossRealmState(curPlayer, 0)
    PlayerControl.SetCrossMapID(curPlayer, 0)
    curPlayer.Kick(IPY_GameWorld.disMapServerClose)
    GameWorld.Log("PlayerExitCrossServer...", curPlayer.GetPlayerID())
    return
@@ -112,6 +112,6 @@
    curPet = curPlayer.GetPetMgr().GetFightPet()
    if curPet:
        curPet.SetVisible(True)
    if PlayerControl.GetCrossRealmState(curPlayer):
        PlayerControl.SetCrossRealmState(curPlayer, 0)
    if PlayerControl.GetCrossMapID(curPlayer):
        PlayerControl.SetCrossMapID(curPlayer, 0)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -1575,7 +1575,7 @@
        GameWorld.DebugLog("跨服服务器不允许该操作!")
        return
    
    if GetCrossRealmState(curPlayer):
    if GetCrossMapID(curPlayer):
        GameWorld.ErrLog("玩家当前为跨服状态,不允许再次请求进入跨服!", curPlayer.GetPlayerID())
        return
    
@@ -5717,11 +5717,10 @@
def SetFBFuncLineID(curPlayer, funcLineID): return curPlayer.SetExAttr3(funcLineID, False, False)
def GetFBFuncLineID(curPlayer): return curPlayer.GetExAttr3()
## 跨服状态: 0-非跨服状态,1-跨服状态
def GetCrossRealmState(curPlayer): return curPlayer.GetExAttr5()
def SetCrossRealmState(curPlayer, value):
    NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_CrossMapID, value)
    curPlayer.SetExAttr5(1 if value else 0, False, True)
## 跨服状态所在地图ID: 0-非跨服状态,非0-跨服状态对应的地图ID
def GetCrossMapID(curPlayer): return curPlayer.GetExAttr5()
def SetCrossMapID(curPlayer, value):
    curPlayer.SetExAttr5(value, False, True)
    return
## 铜钱点, 支持铜钱超20亿
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -1504,7 +1504,8 @@
    
def ProcessAreaExp(curPlayer, tick):
    ##给场景经验
    mapID = GameWorld.GetMap().GetMapID()
    crossMapID = PlayerControl.GetCrossMapID(curPlayer)
    mapID = crossMapID if crossMapID else GameWorld.GetMap().GetMapID()
    neutralMapExpAwardDict = IpyGameDataPY.GetFuncEvalCfg('NeutralMapExpAward', 1, {})
    expAwardInfo = GameWorld.GetDictValueByKey(neutralMapExpAwardDict, mapID)
    if not expAwardInfo:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py
@@ -113,7 +113,7 @@
    
    if registerMap in ChConfig.RegisterEnter_CrossServerMapIDList:
        CrossRealmPlayer.DoEnterCrossRealm(curPlayer)
        PlayerControl.SetCrossRealmState(curPlayer, registerMap)
        PlayerControl.SetCrossMapID(curPlayer, registerMap)
        NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCStartEnterCrossServer())
        return
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_SetPlayerAttr.py
@@ -39,7 +39,7 @@
        if attrName == "SetExAttr5":
            if value:
                CrossRealmPlayer.DoEnterCrossRealm(curPlayer)
            elif PlayerControl.GetCrossRealmState(curPlayer):
            elif PlayerControl.GetCrossMapID(curPlayer):
                CrossRealmPlayer.DoExitCrossRealm(curPlayer)
                
        callObj = getattr(curPlayer, attrName)