6805 【后端】【2.0】副本前端化(增加可否进入自定义场景通用判断,增加回包,木桩怪上限调整为10个)
| | |
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 11
|
| | | RegisterPackCount = 13
|
| | |
|
| | | PacketCMD_1=0xA5
|
| | | PacketSubCMD_1=0x08
|
| | |
| | | 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
|
| | |
| | | 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]
|
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
| | | ''' 召唤私有专属木桩怪
|
| | | '''
|
| | |
|
| | | maxCount = 5
|
| | | maxCount = 10
|
| | | nowCount = 0
|
| | | # 只允许存在一个私有木桩
|
| | | indexList = range(curPlayer.GetSummonCount())
|
| | |
| | |
|
| | | 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
|
| | |
| | | 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))
|
| | |
| | | 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
|
| | | #
|