| | |
| | | # @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: 物品实例
|
| | |
| | | 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 当前玩家
|