From 70bda4c2b79cd0972c63aaf5fac29dd6b6e7f5bb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 29 三月 2019 15:23:48 +0800
Subject: [PATCH] 6410 【后端】【2.0】装备评分

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetAttrPoint.py |  106 ++++++++++++++++++++++++++---------------------------
 1 files changed, 52 insertions(+), 54 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetAttrPoint.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetAttrPoint.py
index bd91a90..baf0bc9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetAttrPoint.py
+++ b/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 DataRecordPack
+import IpyGameDataPY
 import ItemCommon
-import ShareDefine
-import PlayerSuccess
 import ChConfig
-import math
-#---------------------------------------------------------------------
-#全局变量
-#---------------------------------------------------------------------
 
-
-#---------------------------------------------------------------------
 ##批量使用物品
 # @param curPlayer: 玩家实例
 # @param curRoleItem: 物品实例
@@ -36,57 +30,61 @@
 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 != ChConfig.Def_Effect_ResetAttrPoint:
+        return
+    resetID = curEff.GetEffectValue(0)
+    if not resetID and exData:
+        resetID = exData
+    resetPoint = curEff.GetEffectValue(1) * useCnt
+    if not DoResetAttrPoint(curPlayer, resetID, resetPoint, curRoleItem.GetItemTypeID()):
+        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)
+    
+    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)
+        if not realResetPoint:
+            continue
+        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 当前玩家

--
Gitblit v1.8.0