| | |
| | | import GameFuncComm
|
| | | import ChConfig
|
| | | import ShareDefine
|
| | | import PlayerOnline
|
| | |
|
| | | ## GM命令执行入口
|
| | | # @param curPlayer 当前玩家
|
| | |
| | | else:
|
| | | openFuncID = cmdList[1] if len(cmdList) > 1 else 0
|
| | | DoGMOpenFunc(curPlayer, openFuncID)
|
| | | |
| | | PlayerOnline.GetOnlinePlayer(curPlayer).ReCalcAllAttr()
|
| | | |
| | | PrintFuncOpenState(curPlayer)
|
| | | return
|
| | |
|
| | |
| | | openFuncIDList = [openFuncID]
|
| | |
|
| | | if openFuncIDList:
|
| | | needLV, needRealmLV, needMissionIDList = __GetOpenFuncLimit(curPlayer, openFuncIDList)
|
| | | needLV, needRealmLV, needMissionIDList, needMainLevel = __GetOpenFuncLimit(curPlayer, openFuncIDList)
|
| | | if needRealmLV:
|
| | | openFuncIDList.append(ShareDefine.GameFuncID_Official)
|
| | | needLV, needRealmLV, needMissionIDList = __GetOpenFuncLimit(curPlayer, openFuncIDList)
|
| | | needLV, needRealmLV, needMissionIDList, needMainLevel = __GetOpenFuncLimit(curPlayer, openFuncIDList)
|
| | |
|
| | | GameWorld.DebugLog("GM处理等级开启功能: openFuncID=%s,openFuncIDList=%s,needLV=%s" % (openFuncID, openFuncIDList, needLV), curPlayer.GetPlayerID())
|
| | |
|
| | | # 优先处理升级
|
| | | if needLV:
|
| | | if needLV > 1:
|
| | | preLV = needLV - 1
|
| | | curPlayer.SetLV(preLV)
|
| | | PlayerControl.SetPlayerTotalExp(curPlayer, PlayerControl.GetTotalExpByPlayerLv(preLV))
|
| | | PlayerControl.PlayerControl(curPlayer).PlayerLvUp()
|
| | |
|
| | | |
| | | # 获取等级需要的境界
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in range(ipyDataMgr.GetRealmCount()):
|
| | | realmIpyData = ipyDataMgr.GetRealmByIndex(index)
|
| | | if realmIpyData.GetLv() > needRealmLV:
|
| | | needRealmLV = realmIpyData.GetLv()
|
| | | if realmIpyData.GetLVMax() >= needLV:
|
| | | break
|
| | | |
| | | GameWorld.DebugLog("GM处理境界开启功能: needRealmLV=%s" % needRealmLV, curPlayer.GetPlayerID())
|
| | | if needRealmLV:
|
| | | curPlayer.SetOfficialRank(max(1, needRealmLV - 1))
|
| | | curPlayer.SetOfficialRank(max(ChConfig.Def_InitOfficialRank, needRealmLV - 1))
|
| | | PlayerPrestigeSys.DoRealmLVUpLogic(curPlayer)
|
| | |
|
| | | GameWorld.DebugLog("GM处理任务开启功能: needMissionIDList=%s" % needMissionIDList, curPlayer.GetPlayerID())
|
| | | for limitMissionID in needMissionIDList:
|
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_MissionFinish % limitMissionID):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % limitMissionID, 1)
|
| | | |
| | | if needMainLevel:
|
| | | PlayerControl.SetMainLevelPassValue(curPlayer, needMainLevel)
|
| | | GameWorld.DebugLog("GM处理任务开启功能: needMissionIDList=%s,needMainLevel=%s" % (needMissionIDList, needMainLevel), curPlayer.GetPlayerID())
|
| | | #最后强制触发一次
|
| | | #if needMissionIDList:
|
| | | GameFuncComm.DoFuncOpenLogic(curPlayer, needMissionIDList)
|
| | | GameFuncComm.DoFuncOpenLogic(curPlayer, checkServerDay=False)
|
| | | return
|
| | |
|
| | | def __GetOpenFuncLimit(curPlayer, openFuncIDList):
|
| | | maxLV = PlayerControl.GetPlayerMaxLV(curPlayer)
|
| | | maxLV = PlayerControl.GetOpenMaxLV()
|
| | | needLV = 0
|
| | | needRealmLV = 0
|
| | | needMissionIDList = []
|
| | | needMainLevel = 0
|
| | |
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | funcOpenLVCount = ipyDataMgr.GetFuncOpenLVCount()
|
| | |
| | | limitMissionID = ipyData.GetLimitMissionID()
|
| | | if limitMissionID and limitMissionID not in needMissionIDList:
|
| | | needMissionIDList.append(limitMissionID)
|
| | | return needLV, needRealmLV, needMissionIDList
|
| | | |
| | | limitManLevel = ipyData.GetLimitManLevel()
|
| | | if limitManLevel and needMainLevel < limitManLevel:
|
| | | needMainLevel = limitManLevel
|
| | | |
| | | return needLV, needRealmLV, needMissionIDList, needMainLevel
|
| | |
|
| | | def DoGMCloseFunc(curPlayer, closeFuncID):
|
| | | ## GM关闭功能
|
| | | if not closeFuncID:
|
| | | curPlayer.SetLV(1)
|
| | | curPlayer.SetOfficialRank(1)
|
| | | curPlayer.SetOfficialRank(ChConfig.Def_InitOfficialRank)
|
| | |
|
| | | 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, needRealmLV, needMissionIDList = __GetOpenFuncLimit(curPlayer, [])
|
| | | needLV, needRealmLV, needMissionIDList, needMainLevel = __GetOpenFuncLimit(curPlayer, [])
|
| | | for missionID in needMissionIDList:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % missionID, 0)
|
| | | |
| | | |
| | | if needMainLevel:
|
| | | PlayerControl.SetMainLevelPassInfo(curPlayer, 1, 1, 0)
|
| | | |
| | | GameFuncComm.Sync_FuncOpenState(curPlayer, isSyncUnOpen=True)
|
| | | GameWorld.DebugAnswer(curPlayer, "关闭所有功能!")
|
| | | return
|
| | |
| | |
|
| | | limitRealmLV = ipyData.GetLimiRealmLV()
|
| | | if limitRealmLV and curPlayer.GetOfficialRank() >= limitRealmLV:
|
| | | curPlayer.SetOfficialRank(max(1, limitRealmLV - 1))
|
| | | curPlayer.SetOfficialRank(max(ChConfig.Def_InitOfficialRank, limitRealmLV - 1))
|
| | |
|
| | | limitMissionID = ipyData.GetLimitMissionID()
|
| | | if limitMissionID:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % limitMissionID, 0)
|
| | | |
| | | |
| | | limitManLevel = ipyData.GetLimitManLevel()
|
| | | if limitManLevel and PlayerControl.GetMainLevelPassValue(curPlayer) >= limitManLevel:
|
| | | __SetPassMainLevelWavePre(curPlayer)
|
| | | |
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, closeFuncID, 0)
|
| | | GameFuncComm.Sync_FuncOpenState(curPlayer, isSyncUnOpen=True)
|
| | | GameWorld.DebugAnswer(curPlayer, "关闭功能: %s" % closeFuncID)
|
| | | return
|
| | |
|
| | | def __SetPassMainLevelWavePre(curPlayer):
|
| | | ## 设置已过关主线进度到上一波
|
| | | passChapterID, passLevelNum, passWave = PlayerControl.GetMainLevelPassInfo(curPlayer) # 当前过关进度包含波,所以需要取上一关的
|
| | | if passWave > 0:
|
| | | passWave -= 1
|
| | | PlayerControl.SetMainLevelPassInfo(curPlayer, passChapterID, passLevelNum, passWave)
|
| | | return
|
| | | |
| | | passWave = 0
|
| | | if passLevelNum > 1:
|
| | | passLevelNum -= 1
|
| | | PlayerControl.SetMainLevelPassInfo(curPlayer, passChapterID, passLevelNum, passWave)
|
| | | return
|
| | | |
| | | if passChapterID > 1: # 取上一章节
|
| | | passChapterID -= 1
|
| | | levelDataList = IpyGameDataPY.GetIpyGameDataByCondition("MainLevel", {"ChapterID":passChapterID}, True)
|
| | | passLevelNum = len(levelDataList) if levelDataList else 0
|
| | | PlayerControl.SetMainLevelPassInfo(curPlayer, passChapterID, passLevelNum, passWave)
|
| | | return
|
| | | |
| | | PlayerControl.SetMainLevelPassInfo(curPlayer, 1, 1, 0)
|
| | | return
|