1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/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 DataRecordPack
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)
    DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_ResetPoint, {'resetAttrID':resetAttrID,'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
 
 
## Âß¼­ÊµÏÖ //·µ»ØÖµÎªÊÇ·ñʹÓóɹ¦(Íâ²ãÍ¨ÖªÌØÐ§)
#  @param curPlayer µ±Ç°Íæ¼Ò
#  @param curRoleItem µ±Ç°Ö÷½ÇʹÓõÄÎïÆ·
#  @param tick µ±Ç°Ê±¼ä
#  @return True or False ·µ»ØÖµÎªÊÇ·ñʹÓóɹ¦(Íâ²ãÍ¨ÖªÌØÐ§)
#  @remarks º¯ÊýÏêϸ˵Ã÷.
def UseItem(curPlayer, curRoleItem, tick):
    return BatchUseItem(curPlayer, curRoleItem, tick, 1, 0)