#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#---------------------------------------------------------------------
|
#
|
#---------------------------------------------------------------------
|
##@package Item_ResetAttrPoint
|
# @todo: Ï´µã¾íÖá
|
#
|
# @author: xdh
|
# @date 2017-12-15
|
# @version 1.0
|
#
|
#---------------------------------------------------------------------
|
"""Version = 2017-12-15 17:40"""
|
#---------------------------------------------------------------------
|
#µ¼Èë
|
import PlayerControl
|
import GameWorld
|
import ItemCommon
|
import ShareDefine
|
import PlayerSuccess
|
import ChConfig
|
import math
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
#---------------------------------------------------------------------
|
|
|
#---------------------------------------------------------------------
|
##ÅúÁ¿Ê¹ÓÃÎïÆ·
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @param curRoleItem: ÎïÆ·ÊµÀý
|
# @param tick: ʱ¼ä´Á
|
# @param useCnt: ʹÓøöÊý
|
# @return:
|
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 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()
|
|
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
|
|
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'
|
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)
|
#Ë¢ÐÂÈËÎïËùÓÐ״̬
|
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
|
|
|
## Â߼ʵÏÖ //·µ»ØÖµÎªÊÇ·ñʹÓóɹ¦(Íâ²ãÍ¨ÖªÌØÐ§)
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param curRoleItem µ±Ç°Ö÷½ÇʹÓõÄÎïÆ·
|
# @param tick µ±Ç°Ê±¼ä
|
# @return True or False ·µ»ØÖµÎªÊÇ·ñʹÓóɹ¦(Íâ²ãÍ¨ÖªÌØÐ§)
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def UseItem(curPlayer, curRoleItem, tick):
|
return BatchUseItem(curPlayer, curRoleItem, tick, 1, 0)
|
|