ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py
@@ -6,35 +6,25 @@
#
# @todo:古宝
# @author hxp
# @date 2023-01-5
# @date 2025-10-11
# @version 1.0
#
# 详细描述: 古宝
#
#-------------------------------------------------------------------------------
#"""Version = 2023-01-5 15:30"""
#"""Version = 2025-10-11 21:00"""
#-------------------------------------------------------------------------------
import GameWorld
import IpyGameDataPY
import ItemControler
import PlayerGubao
import PlayerControl
import ChConfig
#---------------------------------------------------------------------
#逻辑实现
## GM命令执行入口
#  @param curPlayer 当前玩家
#  @param msgList 参数列表
#  @return None
#  @remarks 函数详细说明.
def OnExec(curPlayer, msgList):
    
    if not msgList:
        GameWorld.DebugAnswer(curPlayer, "重置古宝: Gubao 0")
        GameWorld.DebugAnswer(curPlayer, "设置古宝: Gubao 古宝ID 等级 星级")
        GameWorld.DebugAnswer(curPlayer, "设置效果: Gubao e 古宝ID 效果类型  进度值")
        GameWorld.DebugAnswer(curPlayer, "设置古宝: Gubao 古宝ID [等级 星级 层级]")
        GameWorld.DebugAnswer(curPlayer, "设置碎片: Gubao p 古宝ID 数量")
        return
    
@@ -46,21 +36,18 @@
            for index in range(ipyDataMgr.GetGubaoCount()):
                ipyData = ipyDataMgr.GetGubaoByIndex(index)
                gubaoID = ipyData.GetGubaoID()
                if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoPiece % gubaoID):
                    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoPiece % gubaoID, 0)
                    if gubaoID not in gubaoIDList:
                        gubaoIDList.append(gubaoID)
                _, star = PlayerGubao.GetGubaoLVInfo(curPlayer, gubaoID)
                if not star:
                itemID = ipyData.GetUnlockItemID()
                if ItemControler.GetItemCountByID(curPlayer, itemID):
                    ItemControler.SetItemCountByID(curPlayer, itemID, 0) # 重置
                if not PlayerGubao.IsGubaoActivated(curPlayer, gubaoID):
                    continue
                if gubaoID not in gubaoIDList:
                    gubaoIDList.append(gubaoID)
                PlayerGubao.SetGubaoLVInfo(curPlayer, gubaoID, 0, 0)
                for effType in PlayerGubao.NeedGubaoItemEffValueTypeList:
                    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), 0)
            PlayerGubao.Sync_GubaoItemEffInfo(curPlayer, force=True)
                PlayerGubao.SetGubaoInfo(curPlayer, gubaoID, 0, 0, 0)
            GameWorld.DebugAnswer(curPlayer, "重置古宝OK")
        else:
            return
    elif value1 == "p":
        gubaoID = msgList[1] if len(msgList) > 1 else 0
        pieceCount = msgList[2] if len(msgList) > 2 else 0
@@ -68,49 +55,37 @@
        if not ipyData:
            GameWorld.DebugAnswer(curPlayer, "不存在该古宝!gubaoID=%s" % gubaoID)
            return
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoPiece % gubaoID, pieceCount)
        GameWorld.DebugAnswer(curPlayer, "设置碎片数量: ID:%s,数量:%s" % (gubaoID, pieceCount))
        PlayerGubao.Sync_GubaoPieceInfo(curPlayer, [gubaoID])
        return
    elif len(msgList) == 3:
        gubaoID, lv, star = msgList
        ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
        if not ipyData:
            GameWorld.DebugAnswer(curPlayer, "不存在该古宝!gubaoID=%s" % gubaoID)
            return
        starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
        if not starIpyData:
            GameWorld.DebugAnswer(curPlayer, "不存在该古宝星级!gubaoID=%s,star=%s" % (gubaoID, star))
            return
        gubaoType = ipyData.GetGubaoType()
        quality = ipyData.GetGubaoQuality()
        lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", gubaoType, quality, lv)
        if not lvIpyData:
            GameWorld.DebugAnswer(curPlayer, "不存在该古宝品质等级!gubaoID=%s,gubaoType=%s,quality=%s,lv=%s" % (gubaoID, gubaoType, quality, lv))
            return
        GameWorld.DebugAnswer(curPlayer, "设置古宝:%s,等级(%s),星(%s)" % (gubaoID, lv, star))
        PlayerGubao.SetGubaoLVInfo(curPlayer, gubaoID, lv, star)
        gubaoIDList.append(gubaoID)
    elif value1 == "e":
        if len(msgList) != 4:
            return
        _, gubaoID, effType, effValue = msgList
        if effType not in PlayerGubao.NeedGubaoItemEffValueTypeList:
            GameWorld.DebugAnswer(curPlayer, "古宝效果值类型仅包含:%s" % str(PlayerGubao.NeedGubaoItemEffValueTypeList))
            return
        ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
        if not ipyData:
            GameWorld.DebugAnswer(curPlayer, "不存在该古宝!gubaoID=%s" % gubaoID)
            return
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), effValue)
        PlayerGubao.Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
        GameWorld.DebugAnswer(curPlayer, "设置古宝:%s,效果类型(%s),值(%s)" % (gubaoID, effType, effValue))
    else:
        itemID = ipyData.GetUnlockItemID()
        ItemControler.SetItemCountByID(curPlayer, itemID, pieceCount)
        GameWorld.DebugAnswer(curPlayer, "设置古宝(%s)碎片ID:%s,数量:%s" % (gubaoID, itemID, pieceCount))
        return
    
    else:
        gubaoID = value1
        lv = msgList[1] if len(msgList) > 1 else 1
        star = msgList[2] if len(msgList) > 2 else 0
        layer = msgList[3] if len(msgList) > 3 else 0
        ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
        if not ipyData:
            GameWorld.DebugAnswer(curPlayer, "不存在该古宝!gubaoID=%s" % gubaoID)
            return
        quality = ipyData.GetGubaoQuality()
        layer = min(layer, ipyData.GetSpecEffLayerMax())
        starIpyDataList = IpyGameDataPY.GetIpyGameDataList("GubaoStar", quality)
        if starIpyDataList:
            lastStarIpyData = starIpyDataList[-1]
            star = min(star, lastStarIpyData.GetGubaoStar())
        lvIpyDataList = IpyGameDataPY.GetIpyGameDataList("GubaoLV", quality)
        if lvIpyDataList:
            lastLVIpyData = lvIpyDataList[-1]
            lv = min(lv, lastLVIpyData.GetLessEqualLV())
        GameWorld.DebugAnswer(curPlayer, "设置古宝:%s,级(%s),星(%s),层(%s)" % (gubaoID, lv, star, layer))
        PlayerGubao.SetGubaoInfo(curPlayer, gubaoID, lv, star, layer)
        gubaoIDList.append(gubaoID)
    PlayerGubao.RefreshGubaoAttr(curPlayer)
    PlayerGubao.Sync_GubaoInfo(curPlayer, gubaoIDList)
    PlayerGubao.Sync_GubaoPieceInfo(curPlayer, gubaoIDList)
    PlayerGubao.Sync_GubaoInfo(curPlayer, gubaoIDList)
    return