hxp
2019-03-25 217627970593db2f63ddb62d6c3d4c5e787871fe
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetAttrPoint.py
@@ -11,22 +11,16 @@
# @version 1.0
#
#---------------------------------------------------------------------
"""Version = 2017-12-15 17:40"""
#"""Version = 2017-12-15 17:40"""
#---------------------------------------------------------------------
#导入
import ChPlayer
import PlayerControl
import GameWorld
import ItemCommon
import ShareDefine
import DataRecordPack
import IpyGameDataPY
import ItemCommon
import ChConfig
import math
#---------------------------------------------------------------------
#全局变量
#---------------------------------------------------------------------
#---------------------------------------------------------------------
##批量使用物品
# @param curPlayer: 玩家实例
# @param curRoleItem: 物品实例
@@ -36,57 +30,57 @@
def BatchUseItem(curPlayer, curRoleItem, tick, useCnt, exData):
    curEff = curRoleItem.GetEffectByIndex(0)
    effectID = curEff.GetEffectID()
    if effectID == ChConfig.Def_Effect_ResetAttrPoint:
        resetAttrID = exData
        resetCnt = curEff.GetEffectValue(0)
    else:
        resetAttrID = curEff.GetEffectValue(0) # 属性ID
        resetCnt = curEff.GetEffectValue(1) #重置点数
    if effectID not in ChConfig.Def_Effect_ResetAttrPoint:
        return
    resetID = curEff.GetEffectValue(0)
    resetPoint = curEff.GetEffectValue(0) * useCnt
    if not DoResetAttrPoint(curPlayer, resetID, resetPoint):
        return
    
    if resetAttrID not in [ShareDefine.Def_Effect_STR,ShareDefine.Def_Effect_PHY,ShareDefine.Def_Effect_CON,ShareDefine.Def_Effect_PNE]:
        return
    if not resetCnt:
        return
    freePoint = curPlayer.GetFreePoint()
    #扣除物品
    ItemCommon.DelItem(curPlayer, curRoleItem, useCnt, True, ChConfig.ItemDel_ResetAttrPoint)
    return True, useCnt
    baseSTR, basePNE, basePHY, baseCON = PlayerControl.GetPlayerBasePoint(curPlayer.GetJob())
    # 读出分配前的属性点错误
    if (baseSTR, basePNE, basePHY, baseCON) == (0, 0, 0, 0):
        GameWorld.Log("(baseSTR, basePNE, basePHY, baseCON) == (0, 0, 0, 0), Reset attribute Fail!")
        return False
def DoResetAttrPoint(curPlayer, resetID, resetPoint, useItemID=0):
    '''重置灵根属性点
    @param resetID: 重置属性ID,0为重置全部
    @param resetPoint: 重置点数,0为重置全部
    '''
    
    if resetAttrID == ShareDefine.Def_Effect_STR:
        baseValue = baseSTR
        keyStr = 'BaseSTR'
    elif resetAttrID == ShareDefine.Def_Effect_PHY:
        baseValue = basePHY
        keyStr = 'BasePHY'
    elif resetAttrID == ShareDefine.Def_Effect_CON:
        baseValue = baseCON
        keyStr = 'BaseCON'
    elif resetAttrID == ShareDefine.Def_Effect_PNE:
        baseValue = basePNE
        keyStr = 'BasePNE'
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    canResetIDList = [ipyDataMgr.GetRolePointByIndex(index).GetAttrID() for index in xrange(ipyDataMgr.GetRolePointCount())]
    if resetID == 0:
        resetIDList = canResetIDList
        resetValueList = [resetPoint for _ in xrange(len(canResetIDList))]
    elif resetID in canResetIDList:
        resetIDList = [resetID]
        resetValueList = [resetPoint]
    else:
        return
    curValue = getattr(curPlayer, 'Get%s'%keyStr)()
    if curValue <= baseValue:
        GameWorld.Log('    Item_ResetAttrPoint 该属性点没有可洗的点数 resetAttrID=%s'%resetAttrID)
        return
    realUseCnt = min(useCnt, int(math.ceil((curValue-baseValue)/float(resetCnt))))
    resetPoint = min(curValue-baseValue, realUseCnt * resetCnt)
    curPlayer.SetFreePoint(freePoint+resetPoint)
    getattr(curPlayer, 'Set%s'%keyStr)(curValue-resetPoint)
    DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_ResetPoint, {'resetAttrID':resetAttrID,'resetPoint':resetPoint})
    resetPointTotal = 0
    for i, resetID in enumerate(resetIDList):
        resetPoint = resetValueList[i]
        curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % resetID)
        if not resetPoint:
            realResetPoint = curPoint
        else:
            realResetPoint = min(resetPoint, curPoint)
        resetPointTotal += realResetPoint
        updPoint = max(curPoint - realResetPoint, 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AddPointValue % resetID, updPoint)
        if useItemID:
            PlayerControl.NotifyCode(curPlayer, 'WashPoint2', [useItemID, resetID, realResetPoint, updPoint])
    freePoint = curPlayer.GetFreePoint()
    curPlayer.SetFreePoint(freePoint + resetPointTotal)
    ChPlayer.NotifyPlayerBasePoint(curPlayer, resetIDList)
    DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_ResetPoint, {'resetAttrID':resetID, 'resetPoint':resetPoint})
    #刷新人物所有状态
    playerControl = PlayerControl.PlayerControl(curPlayer)
    playerControl.RefreshPlayerAttrState()
    #扣除物品
    ItemCommon.DelItem(curPlayer, curRoleItem, realUseCnt, True, ChConfig.ItemDel_ResetAttrPoint)
    PlayerControl.NotifyCode(curPlayer, 'WashPoint2', [curRoleItem.GetItemTypeID(), resetAttrID, resetPoint, curValue-resetPoint-baseValue])
    return True, realUseCnt
    return True
## 逻辑实现 //返回值为是否使用成功(外层通知特效)
#  @param curPlayer 当前玩家