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