From 40e191811bd44f1476f3d99ed5932605c4416e48 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 01 六月 2019 22:25:06 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py |   70 ++++++++++++++++++++++++++---------
 1 files changed, 52 insertions(+), 18 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
index 60811e1..87d2866 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
@@ -28,7 +28,6 @@
 import ItemCommon
 import ChConfig
 import ChEquip
-import EventShell
 
 import random
 
@@ -37,9 +36,9 @@
 Def_EquipWashMaxAttrCount = 3 # 装备洗练最大洗练属性条数
 g_allIndexList = [] #可洗炼的部位缓存
 
-def OnEquipWashLogin(curPlayer):
-    Sycn_EquipWashInfo(curPlayer, isLogin=True)
-    return
+#def OnEquipWashLogin(curPlayer):
+#    Sycn_EquipWashInfo(curPlayer, isLogin=True)
+#    return
 
 def GetEquipWashMaxLV(curPlayer, equipPackindex, equipPlace):
     # @return: 0-未开放; >=1-该装备位最大可洗练等级
@@ -109,11 +108,11 @@
         return
     
     maxWashLV = GetEquipWashMaxLV(curPlayer, equipPackindex, equipPlace)
-    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipPackindex) + 1
+    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipPackindex)
     GameWorld.DebugLog("装备洗练: classLV=%s,equipPlace=%s,checkUseGoldAttr=%s,washType=%s,washLV=%s,maxWashLV=%s" 
                        % (classLV, equipPlace, checkUseGoldAttr, washType, washLV, maxWashLV), playerID)
     
-    if maxWashLV < 1:
+    if maxWashLV < washLV:
         return
         
     washData = GetEquipWashData(washType, washLV)
@@ -179,6 +178,14 @@
                 return
         GameWorld.DebugLog("随机范围属性%s, washValue=%s, %s~%s" % (attrNum, washValue, randValueMin, randValueMax))
         randValue = random.randint(randValueMin, randValueMax)
+        for _ in xrange(50):
+            if randValue != 0:
+                break
+            randValue = random.randint(randValueMin, randValueMax)
+            #GameWorld.DebugLog("随机值0,重新随机!")
+        if randValue == 0:
+            randValue = 1
+            #GameWorld.DebugLog("随机值还是0,强制设置为1!")
         randAttrDict[attrNum] = randValue
         if randValue <= 0:
             negativeValueCnt += 1
@@ -206,7 +213,7 @@
         return
     
     preWashData = None # 上一洗练等级数据
-    if washLV > 1:
+    if washLV > 0:
         preWashData = GetEquipWashData(washType, washLV - 1)
         if not preWashData:
             GameWorld.ErrLog("找不到上一级洗练数据,无法洗练!preWashLV=%s" % (washLV - 1))
@@ -301,9 +308,14 @@
     ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackindex})
     if not ipyData:
         return
+    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+    curEquip = curPack.GetAt(equipPackindex)
+    if not curEquip or curEquip.IsEmpty():
+        GameWorld.DebugLog("OnEquipWashAttrChangeOK() equip is empty")
+        return
     equipPlace = ipyData.GetEquipPlace()
     classLV = ipyData.GetClassLV()
-    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipPlace) + 1
+    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipPackindex)
     maxWashLV = GetEquipWashMaxLV(curPlayer, equipPackindex, equipPlace)
     GameWorld.DebugLog("确认洗练结果: classLV=%s, equipPlace=%s,isSave=%s,washLV=%s,maxWashLV=%s" 
                        % (classLV, equipPlace, isSave, washLV, maxWashLV), playerID)
@@ -311,7 +323,7 @@
     washType = GetEquipWashType(equipPlace)
     if washType is None:
         return
-    if maxWashLV < 1:
+    if maxWashLV < 0:
         return
     washData = GetEquipWashData(washType, washLV)
     if not washData:
@@ -322,7 +334,7 @@
         if washLV >= maxWashLV:
             GameWorld.DebugLog("已达到最大洗练等级,不可升级!", playerID)
             return
-        if CheckEquipWashLVUp(curPlayer, equipPackindex, classLV, equipPlace, washLV, washData):
+        if CheckEquipWashLVUp(curPlayer, curEquip, equipPackindex, washLV, washData):
             RefreshEquipWashAttr(curPlayer, classLV)
             Sycn_EquipWashInfo(curPlayer, equipPackindex)
             EquipWashSuccess(curPlayer)
@@ -351,7 +363,7 @@
     Sycn_EquipWashInfo(curPlayer, equipPackindex)
     return
 
-def CheckEquipWashLVUp(curPlayer, equipPackindex, classLV, equipPlace, washLV, washData):
+def CheckEquipWashLVUp(curPlayer, curEquip, equipPackindex, washLV, washData):
     # 检查洗练类型升级
     
     for attrNum in range(1, Def_EquipWashMaxAttrCount + 1):
@@ -360,14 +372,32 @@
         if tempValue < getattr(washData, "GetAttrMax%s" % attrNum)():
             return
     washLV += 1
-    # 字典存储的从0开始,0代表1级,所以实际存进去的值需减1
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashLV % (equipPackindex), washLV - 1)
-    GameWorld.DebugLog("装备洗练等级升级: equipPackindex=%s,washLV=%s" % (equipPackindex, washLV), curPlayer.GetPlayerID())
+    SetEquipWashLV(curPlayer, equipPackindex, washLV)
     
     # 洗练广播
-    PlayerControl.WorldNotify(0, "WashCongratulation", [curPlayer.GetPlayerName(), curPlayer.GetPlayerID(), classLV, equipPlace, washLV])
+    itemID = curEquip.GetItemTypeID()
+    userData = curEquip.GetUserData()
+    guid = ItemCommon.CacheNotifyEquipDetailInfo(curPlayer, curEquip)
+    msgParamList = [curPlayer.GetPlayerName(), itemID, userData, guid, washLV]
+    PlayerControl.WorldNotify(0, "WashCongratulation", msgParamList)
     return True
 
+def SetEquipWashLV(curPlayer, index, setWashLV):
+    befWashLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % index)
+    if befWashLV == setWashLV:
+        return
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashLV % (index), setWashLV)
+    
+    # 同步更新洗练总等级
+    befTotalWashLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipWashLV)
+    updTotalWashLV = max(0, befTotalWashLV + setWashLV - befWashLV)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipWashLV, updTotalWashLV)
+    GameWorld.DebugLog("设置洗练等级: index=%s,befWashLV=%s,setWashLV=%s,befTotalWashLV=%s,updTotalWashLV=%s" 
+                       % (index, befWashLV, setWashLV, befTotalWashLV, updTotalWashLV))
+    return
+
+## 全身洗练总等级
+def GetTotalEquipWashLV(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipWashLV)
 
 def Sycn_EquipWashInfo(curPlayer, equipPackindex=-1, isLogin=False):
     hasValue = False
@@ -384,7 +414,7 @@
     for place in syncPlaceList:
         equipPart = ChPyNetSendPack.tagMCEquipPartXLAttr()
         equipPart.EquipPlace = place
-        equipPart.XLAttrLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % place) + 1
+        equipPart.XLAttrLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % place)
         equipPart.XLAttrList = []
         for attrNum in range(1, Def_EquipWashMaxAttrCount + 1):
             washValue = ChPyNetSendPack.tagMCEquipPartXLAttrValue()
@@ -415,7 +445,9 @@
 
 def CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, allAttrList):
     ## 装备位洗练属性
-    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipIndex) + 1
+    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipIndex)
+    maxWashLV = GetEquipWashMaxLV(curPlayer, equipIndex, equipPlace)
+    washLV = min(washLV, maxWashLV)
     washType = GetEquipWashType(equipPlace)
     if washType is None:
         return
@@ -425,7 +457,9 @@
     #GameWorld.DebugLog("装备位属性: equipPlace=%s,washLV=%s" % (equipPlace, washLV))
     for attrNum in range(1, Def_EquipWashMaxAttrCount + 1):
         attrID = getattr(washData, "GetAttrType%s" % attrNum)()
+        maxValue = getattr(washData, "GetAttrMax%s" % attrNum)()
         attrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (equipIndex, attrNum))
+        attrValue = min(attrValue, maxValue)
         #GameWorld.DebugLog("    attrNum=%s,attrID=%s, attrValue=%s" % (attrNum, attrID, attrValue))
         if attrValue:
             PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
@@ -437,7 +471,7 @@
 #        washTypeLV = 999
 #        placeList = GetEquipWashPlaceList(washType)
 #        for equipPlace in placeList:
-#            washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipPlace) + 1
+#            washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipPlace)
 #            washTypeLV = min(washTypeLV, washLV)
 #        
 #        if not washTypeLV:

--
Gitblit v1.8.0