6805 【后端】【2.0】副本前端化(增加可否进入自定义场景通用判断,增加回包,木桩怪上限调整为10个)
5个文件已修改
240 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -315,7 +315,7 @@
Writer = hxp
Releaser = hxp
RegType = 0
RegisterPackCount = 11
RegisterPackCount = 13
PacketCMD_1=0xA5
PacketSubCMD_1=0x08
@@ -361,13 +361,21 @@
PacketSubCMD_11=0x0A
PacketCallFunc_11=OnFBBuyBuff
PacketCMD_12=0xA2
PacketSubCMD_12=0x31
PacketCallFunc_12=OnClientStartCustomScene
PacketCMD_13=0xA2
PacketSubCMD_13=0x33
PacketCallFunc_13=OnClientExitCustomScene
;玩家相关
[ChPlayer]
ScriptName = Player\ChPlayer.py
Writer = hxp
Releaser = hxp
RegType = 0
RegisterPackCount = 23
RegisterPackCount = 21
PacketCMD_1 = 0xA5
PacketSubCMD_1 = 0x04
@@ -445,21 +453,13 @@
PacketSubCMD_19=0x08
PacketCallFunc_19=OnRefreshMainServerRole
PacketCMD_20=0xA2
PacketSubCMD_20=0x31
PacketCallFunc_20=OnClientStartCustomScene
PacketCMD_20=0xB2
PacketSubCMD_20=0x06
PacketCallFunc_20=OnAddPoint
PacketCMD_21=0xB2
PacketSubCMD_21=0x06
PacketCallFunc_21=OnAddPoint
PacketCMD_22=0xA2
PacketSubCMD_22=0x33
PacketCallFunc_22=OnClientExitCustomScene
PacketCMD_23=0xB2
PacketSubCMD_23=0x07
PacketCallFunc_23=OnResetAttrPoint
PacketSubCMD_21=0x07
PacketCallFunc_21=OnResetAttrPoint
;购买相关的
[BuySomething]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py
@@ -35,26 +35,12 @@
        GameWorld.DebugAnswer(curPlayer, "开启所有功能: OpenFunc 1")
        GameWorld.DebugAnswer(curPlayer, "开启指定功能: OpenFunc 1 功能ID")
        GameWorld.DebugAnswer(curPlayer, "关闭所有功能: OpenFunc 0")
        GameWorld.DebugAnswer(curPlayer, "关闭指定功能: OpenFunc 0 功能ID")
    else:
        state = cmdList[0]
        if not state:
            curPlayer.SetLV(1)
            curPlayer.SetOfficialRank(0)
            ipyDataMgr = IpyGameDataPY.IPY_Data()
            for i in xrange(ipyDataMgr.GetTreasureCount()):
                ipyData = ipyDataMgr.GetTreasureByIndex(i)
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponLV % ipyData.GetID(), 0)
            for keyNum in xrange(8):
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch % keyNum, 0)
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_GameFuncAwardState % keyNum, 0)
            needLV, needMagicWeaponIDList, needRealmLV, needMissionIDList = __GetOpenFuncLimit([])
            for missionID in needMissionIDList:
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % missionID, 0)
            GameFuncComm.Sync_FuncOpenState(curPlayer, isSyncUnOpen=True)
            GameWorld.DebugAnswer(curPlayer, "关闭所有功能!")
            closeFuncID = cmdList[1] if len(cmdList) > 1 else 0
            DoGMCloseFunc(curPlayer, closeFuncID)
        else:
            openFuncID = cmdList[1] if len(cmdList) > 1 else 0
            DoGMOpenFunc(curPlayer, openFuncID)
@@ -168,3 +154,55 @@
            needMissionIDList.append(limitMissionID)
    return needLV, needMagicWeaponIDList, needRealmLV, needMissionIDList
def DoGMCloseFunc(curPlayer, closeFuncID):
    ## GM关闭功能
    if not closeFuncID:
        curPlayer.SetLV(1)
        curPlayer.SetOfficialRank(0)
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for i in xrange(ipyDataMgr.GetTreasureCount()):
            ipyData = ipyDataMgr.GetTreasureByIndex(i)
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponLV % ipyData.GetID(), 0)
        for keyNum in xrange(8):
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch % keyNum, 0)
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_GameFuncAwardState % keyNum, 0)
        needLV, needMagicWeaponIDList, needRealmLV, needMissionIDList = __GetOpenFuncLimit([])
        for missionID in needMissionIDList:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % missionID, 0)
        GameFuncComm.Sync_FuncOpenState(curPlayer, isSyncUnOpen=True)
        GameWorld.DebugAnswer(curPlayer, "关闭所有功能!")
        return
    if not GameFuncComm.GetFuncCanUse(curPlayer, closeFuncID):
        GameWorld.DebugLog("功能已关闭,不需要重复关闭! closeFuncID=%s" % closeFuncID, curPlayer.GetPlayerID())
        return
    ipyData = IpyGameDataPY.GetIpyGameData("FuncOpenLV", closeFuncID)
    if not ipyData:
        return
    limitLV = ipyData.GetLimitLV()
    if limitLV and curPlayer.GetLV() >= limitLV:
        curPlayer.SetLV(max(1, limitLV - 1))
        PlayerControl.SetPlayerTotalExp(curPlayer, 0)
    limitRealmLV = ipyData.GetLimiRealmLV()
    if limitRealmLV and curPlayer.GetOfficialRank() >= limitRealmLV:
        curPlayer.SetOfficialRank(max(0, limitRealmLV - 1))
    limitMagicWeaponID = ipyData.GetLimitMagicWeapon()
    if limitMagicWeaponID:
        mwID = limitMagicWeaponID / 100
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponLV % mwID, 0)
    limitMissionID = ipyData.GetLimitMissionID()
    if limitMissionID:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % limitMissionID, 0)
    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, closeFuncID, 0)
    GameFuncComm.Sync_FuncOpenState(curPlayer, isSyncUnOpen=True)
    GameWorld.DebugAnswer(curPlayer, "关闭功能: %s" % closeFuncID)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -1959,7 +1959,7 @@
    ''' 召唤私有专属木桩怪
    '''
    
    maxCount = 5
    maxCount = 10
    nowCount = 0
    # 只允许存在一个私有木桩
    indexList = range(curPlayer.GetSummonCount())
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -229,64 +229,6 @@
    
    return
#// A2 31 前端开始自定义场景 #tagCMClientStartCustomScene
#
#struct    tagCMClientStartCustomScene
#{
#    tagHead        Head;
#    DWORD        MapID;
#    WORD        FuncLineID;
#};
def OnClientStartCustomScene(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    DoEnterCustomScene(curPlayer, clientData.MapID, clientData.FuncLineID)
    return
#// A2 33 前端退出自定义场景 #tagCMClientExitCustomScene
#
#struct    tagCMClientExitCustomScene
#{
#    tagHead        Head;
#};
def OnClientExitCustomScene(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    DoExitCustomScene(curPlayer)
    return
def DoEnterCustomScene(curPlayer, mapID, lineID):
    ## 进入自定义场景状态
    curPlayer.SetCanAttack(False)
    curPlayer.SetVisible(False)
    curPlayer.SetSight(0)
    curPet = curPlayer.GetPetMgr().GetFightPet()
    if curPet:
        curPet.SetVisible(False)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 1) # 由于前端不一定有发mapID,所以这里额外记录这个状态,不能直接用mapID判断
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneMapID, mapID)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneLineID, lineID)
    GameWorld.Log("玩家开始自定义场景!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
    if mapID:
        FBLogic.OnEnterCustomScene(curPlayer, mapID, lineID)
    return
def DoExitCustomScene(curPlayer):
    ## 退出自定义场景状态
    curPlayer.SetCanAttack(True)
    curPlayer.SetVisible(True)
    curPlayer.SetSight(1)
    curPlayer.RefreshView()
    curPlayer.SetSight(ChConfig.Def_PlayerSight_Default)
    curPlayer.RefreshView()
    curPet = curPlayer.GetPetMgr().GetFightPet()
    if curPet:
        curPet.SetVisible(True)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 0)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneMapID, 0)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneLineID, 0)
    GameWorld.Log("玩家退出自定义场景!", curPlayer.GetPlayerID())
    return
#// A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole
#
#struct tagCMRefreshMainServerRole
@@ -316,7 +258,7 @@
        CrossRealmPlayer.DoExitCrossRealm(curPlayer)
        
    if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
        DoExitCustomScene(curPlayer)
        PlayerFB.DoExitCustomScene(curPlayer)
        
    msgInfo = ""
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "RefreshMainServerRole", msgInfo, len(msgInfo))
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
@@ -453,6 +453,82 @@
    FBLogic.OnClientStartFB(curPlayer, tick)
    return
#// A2 31 前端开始自定义场景 #tagCMClientStartCustomScene
#
#struct    tagCMClientStartCustomScene
#{
#    tagHead        Head;
#    DWORD        MapID;
#    WORD        FuncLineID;
#};
def OnClientStartCustomScene(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    mapID = clientData.MapID
    funcLineID = clientData.FuncLineID
    DoEnterCustomScene(curPlayer, mapID, funcLineID, tick)
    return
#// A2 33 前端退出自定义场景 #tagCMClientExitCustomScene
#
#struct    tagCMClientExitCustomScene
#{
#    tagHead        Head;
#};
def OnClientExitCustomScene(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    DoExitCustomScene(curPlayer)
    return
def DoEnterCustomScene(curPlayer, mapID, lineID, tick):
    ## 进入自定义场景状态
    resultPack = ChPyNetSendPack.tagMCStartCustomSceneResult()
    resultPack.MapID = mapID
    resultPack.FuncLineID = lineID
    #进入副本通用检查
    fbIpyData = None if not mapID else FBCommon.GetFBIpyData(mapID)
    fbLineIpyData = None if not mapID else FBCommon.GetFBLineIpyData(mapID, lineID)
    if PlayerControl.CheckMoveToFB(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, tick) != ShareDefine.EntFBAskRet_OK:
        resultPack.Result = 0
        NetPackCommon.SendFakePack(curPlayer, resultPack)
        return
    curPlayer.SetCanAttack(False)
    curPlayer.SetVisible(False)
    curPlayer.SetSight(0)
    curPet = curPlayer.GetPetMgr().GetFightPet()
    if curPet:
        curPet.SetVisible(False)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 1) # 由于前端不一定有发mapID,所以这里额外记录这个状态,不能直接用mapID判断
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneMapID, mapID)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneLineID, lineID)
    GameWorld.Log("玩家开始自定义场景!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
    if mapID:
        FBLogic.OnEnterCustomScene(curPlayer, mapID, lineID)
    #通知进入状态
    resultPack.Result = 1
    NetPackCommon.SendFakePack(curPlayer, resultPack)
    return
def DoExitCustomScene(curPlayer):
    ## 退出自定义场景状态
    curPlayer.SetCanAttack(True)
    curPlayer.SetVisible(True)
    curPlayer.SetSight(1)
    curPlayer.RefreshView()
    curPlayer.SetSight(ChConfig.Def_PlayerSight_Default)
    curPlayer.RefreshView()
    curPet = curPlayer.GetPetMgr().GetFightPet()
    if curPet:
        curPet.SetVisible(True)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 0)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneMapID, 0)
    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneLineID, 0)
    GameWorld.Log("玩家退出自定义场景!", curPlayer.GetPlayerID())
    return
#// B1 08 刷新自定义副本奖励 #tagCMRefreshCustomFBPrize
#