From c63ffd10aecb12b2e09dae603cf9a0f824f6482c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 10 十二月 2025 15:46:15 +0800
Subject: [PATCH] 16 卡牌服务端(合成目标物品与材料物品不在同一背包时支持合成;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py | 79 +++++++++++++++++++++++++++++++++------
1 files changed, 66 insertions(+), 13 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py
index dd9af87..feef973 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py
@@ -22,6 +22,7 @@
import GameFuncComm
import ChConfig
import ShareDefine
+import PlayerOnline
## GM命令执行入口
# @param curPlayer 当前玩家
@@ -43,7 +44,8 @@
else:
openFuncID = cmdList[1] if len(cmdList) > 1 else 0
DoGMOpenFunc(curPlayer, openFuncID)
-
+ PlayerOnline.GetOnlinePlayer(curPlayer).ReCalcAllAttr()
+
PrintFuncOpenState(curPlayer)
return
@@ -87,36 +89,51 @@
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(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()
@@ -137,7 +154,12 @@
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关闭功能
@@ -149,10 +171,13 @@
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
@@ -177,8 +202,36 @@
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
--
Gitblit v1.8.0