hch
2019-05-14 a772159cbbe5a267e623ec2c4a56b13cc96f3b09
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipWash.py
@@ -18,6 +18,7 @@
import PlayerControl
import ChConfig
import GameWorld
import IpyGameDataPY
#---------------------------------------------------------------------
#逻辑实现
@@ -28,70 +29,83 @@
#  @remarks 函数详细说明.
def OnExec(curPlayer, cmdList):
    if not cmdList:
        GameWorld.DebugAnswer(curPlayer, "重置所有部位洗练信息: SetEquipWash 0")
        GameWorld.DebugAnswer(curPlayer, "设置所有部位洗练信息: SetEquipWash 洗练等级 当前等级洗练属性百分比")
        GameWorld.DebugAnswer(curPlayer, "设置指定部位洗练信息: SetEquipWash 装备位 洗练等级 当前等级洗练属性百分比")
        __GMHelpAnswer(curPlayer)
        return
    
    placeList = Operate_EquipWash.GetAllEquipWashPlace()
    classLV = 0
    allIndexList = Operate_EquipWash.GetAllEquipWashPlace()
    syncPlace = -1
    if len(cmdList) == 1 and cmdList[0] == 0:
        for place in placeList:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashLV % (place), 0)
        for index in allIndexList:
            Operate_EquipWash.SetEquipWashLV(curPlayer, index, 0)
            for attrNum in range(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValue % (place, attrNum), 0)
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValueTemp % (place, attrNum), 0)
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValue % (index, attrNum), 0)
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValueTemp % (index, attrNum), 0)
        GameWorld.DebugLog("重置所有洗练数据")
                
    elif len(cmdList) == 2:
        isSync = False
        washLV, attrPer = cmdList
        for place in placeList:
            maxWashLV = Operate_EquipWash.GetEquipWashMaxLV(curPlayer, place)
            if maxWashLV < 1:
        for equipPackindex in allIndexList:
            ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackindex})
            if not ipyData:
                continue
            __SetEquipPlaceWashLV(curPlayer, place, washLV, attrPer, maxWashLV)
            equipPlace = ipyData.GetEquipPlace()
            maxWashLV = Operate_EquipWash.GetEquipWashMaxLV(curPlayer, equipPackindex, equipPlace)
            #if maxWashLV < 1:
            #    continue
            __SetEquipPlaceWashLV(curPlayer, equipPackindex, equipPlace, washLV, attrPer, maxWashLV)
            isSync = True
        if not isSync:
            return
            
    elif len(cmdList) == 3:
        place, washLV, attrPer = cmdList
        if place not in placeList:
    elif len(cmdList) == 4:
        classLV, place, washLV, attrPer = cmdList
        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
        if not ipyData:
            return
        syncPlace = place
        maxWashLV = Operate_EquipWash.GetEquipWashMaxLV(curPlayer, place)
        if maxWashLV < 1:
            return
        __SetEquipPlaceWashLV(curPlayer, place, washLV, attrPer, maxWashLV)
        gridIndex = ipyData.GetGridIndex()
        syncPlace = gridIndex
        maxWashLV = Operate_EquipWash.GetEquipWashMaxLV(curPlayer, gridIndex, place)
        #if maxWashLV < 1:
        #    return
        __SetEquipPlaceWashLV(curPlayer, gridIndex, place, washLV, attrPer, maxWashLV)
        
    else:
        __GMHelpAnswer(curPlayer)
        return
    
    Operate_EquipWash.RefreshEquipWashAttr(curPlayer)
    Operate_EquipWash.RefreshEquipWashAttr(curPlayer, classLV)
    Operate_EquipWash.Sycn_EquipWashInfo(curPlayer, syncPlace)
    return
def __SetEquipPlaceWashLV(curPlayer, place, washLV, attrPer, maxWashLV):
def __SetEquipPlaceWashLV(curPlayer, equipPackindex, place, washLV, attrPer, maxWashLV):
    washLV = min(maxWashLV, washLV)
    washLV = max(1, washLV)
    washLV = max(0, washLV)
    attrPer = max(0, attrPer)
    attrPer = min(100, attrPer)
    
    washType = Operate_EquipWash.GetEquipWashType(place)
    washData = Operate_EquipWash.GetEquipWashData(washType, washLV)
    preWashData = None if washLV <= 1 else Operate_EquipWash.GetEquipWashData(washType, washLV - 1)
    preWashData = None if washLV <= 0 else Operate_EquipWash.GetEquipWashData(washType, washLV - 1)
    
    #GameWorld.DebugLog("设置洗练: place=%s,washType=%s,washLV=%s,attrPer=%s" % (place, washType, washLV, attrPer))
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashLV % (place), washLV - 1)
    Operate_EquipWash.SetEquipWashLV(curPlayer, equipPackindex, washLV)
    for attrNum in range(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):
        preMaxValue = 0 if not preWashData else getattr(preWashData, "GetAttrMax%s" % attrNum)()
        curMaxValue = getattr(washData, "GetAttrMax%s" % attrNum)()
        value = preMaxValue + int((curMaxValue - preMaxValue) * attrPer / 100.0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValue % (place, attrNum), value)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValueTemp % (place, attrNum), 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValue % (equipPackindex, attrNum), value)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValueTemp % (equipPackindex, attrNum), 0)
        #GameWorld.DebugLog("    attrNum=%s,value=%s" % (attrNum, value))
        
    return
def __GMHelpAnswer(curPlayer):
    GameWorld.DebugAnswer(curPlayer, "重置所有部位洗练: SetEquipWash 0")
    GameWorld.DebugAnswer(curPlayer, "设置所有部位洗练: SetEquipWash 等级 百分比")
    GameWorld.DebugAnswer(curPlayer, "设置指定部位洗练: SetEquipWash 阶级 装备位 等级 百分比")
    return