From 8418473f574503da7bcd4891e9b9ce4af456147f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 23 九月 2019 15:36:25 +0800
Subject: [PATCH] 8279 【后端】【主干】开服排行榜的奖励过天通过邮件发放

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py |   99 ++++++++++++++++++++++++++++++++++---------------
 1 files changed, 69 insertions(+), 30 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py
index 8a1e138..45152c8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py
@@ -27,6 +27,7 @@
 import IpyGameDataPY
 import FormulaControl
 import DataRecordPack
+import PlayerSuccess
 
 g_GatherSoulLVExpDict = {}  #经验缓存
 g_gatherSoulLVAttrDict = {}  #属性缓存
@@ -67,17 +68,17 @@
             exp = eval(IpyGameDataPY.GetFuncCompileCfg('GatherSoulLevelUp'))
             g_GatherSoulLVExpDict[lv] = exp
             
-        qualityPerDict = IpyGameDataPY.GetFuncEvalCfg('GatherSoulLevelUp', 2, {})
-        if itemColor in qualityPerDict:
-            exp *= float(qualityPerDict[itemColor])
-
-        soulGrade = ipyData.GetSoulGrade()
-        exp *= float(IpyGameDataPY.GetFuncEvalCfg('GatherSoulLevelUp', 4, {}).get(soulGrade, 1))
+        qualityPerDict = IpyGameDataPY.GetFuncEvalCfg('GatherSoulLevelUp', 2, {}).get(str(itemData.GetType()), {})
+        if str(itemColor) in qualityPerDict:
+            exp *= float(qualityPerDict[str(itemColor)])
             
         attrTypeCnt = len(ipyData.GetAttrType())
         specialPer = IpyGameDataPY.GetFuncEvalCfg('GatherSoulLevelUp', 3, {}).get(attrTypeCnt, 1)
         exp *= float(specialPer)
-    return exp
+        
+    soulGrade = ipyData.GetSoulGrade()
+    exp *= float(IpyGameDataPY.GetFuncEvalCfg('GatherSoulLevelUp', 5, {}).get(soulGrade, 1))
+    return int(exp)
 
 
 ## 获取聚魂属性数值
@@ -221,6 +222,7 @@
     RefreshGatherSoulAttr(curPlayer)
     PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
     Sync_GatherSoulHoleInfo(curPlayer)
+    DoGatherSoulSuccessLogic(curPlayer)
     return True
 
 
@@ -280,7 +282,7 @@
         RefreshGatherSoulAttr(curPlayer)
         PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
         Sync_GatherSoulHoleInfo(curPlayer)
-        
+        DoGatherSoulSuccessLogic(curPlayer)
     GameWorld.DebugLog("聚魂升级!placeType=%s,placeIndex=%s,GatherSoulData=%s,updGatherSoulData=%s" 
                        % (placeType, placeIndex, GatherSoulData, updGatherSoulData), playerID)
     return
@@ -323,9 +325,9 @@
             curEff = itemData.GetEffectByIndex(0)
             soulDust = curEff.GetEffectValue(0)
         else:
-    
+            #先计算升级消耗的材料
             soulDust = 0
-            for lv in xrange(GatherSoulItemPlusLV + 1):
+            for lv in xrange(1, GatherSoulItemPlusLV + 1):
                 soulDust += GetGatherSoulNeedExp(GatherSoulItemID, lv)
                     
             #多属性的先拆解成单属性的聚魂
@@ -333,12 +335,18 @@
             for itemID in soulidList:
                 giveMaterialDict[itemID] = giveMaterialDict.get(itemID, 0) + 1
                 needPackSpace += 1
-            
+            if not soulidList and not soulSplinters and not soulCore:
+                #不能拆解的则要算0级的分解
+                soulDust += GetGatherSoulNeedExp(GatherSoulItemID, 0)
+                
+
         totalSoulSplinters += soulSplinters
         totalSoulCore += soulCore
         totalSoulDust += soulDust
         delPlaceDict[place] = [GatherSoulData, soulidList, int(soulDust), soulSplinters, soulCore]
         
+    if not delPlaceDict:
+        return
     if delPlaceDict:
         ItemCommon.DelVPackItem(curPlayer, packIndex, delPlaceDict.keys(), ChConfig.ItemDel_GatherSoul)
     addDataDict = {"delPlaceDict":delPlaceDict, "isAuto":isAuto}
@@ -357,30 +365,33 @@
         PlayerControl.NotifyCode(curPlayer, 'hwj_20170807_1', [totalSoulCore, ShareDefine.TYPE_Price_SoulCore])
         
     if giveMaterialDict:
-        emptySpace = ItemCommon.GetItemPackSpace(curPlayer, ShareDefine.rptGatherSoul, 1)
+        emptySpace = ItemCommon.GetItemPackSpace(curPlayer, ShareDefine.rptGatherSoul, needPackSpace)
         if emptySpace < needPackSpace:
-            giveMaterialList = [[itemID, itemCnt, 1] for itemID, itemCnt in giveMaterialDict.items()]
+            giveMaterialList = [[itemID, itemCnt, 0] for itemID, itemCnt in giveMaterialDict.items()]
             PlayerControl.SendMailByKey('JHBagFull1', [curPlayer.GetID()], giveMaterialList)
         else:
-            for itemID, itemCnt in giveMaterialDict.items:
-                ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 1, [ShareDefine.rptGatherSoul])
-    GameWorld.DebugLog("聚魂分解: isAuto=%s,PlaceIndexList=%s, delPlaceDict=%s" % (isAuto, placeList, delPlaceDict))
+            for itemID, itemCnt in giveMaterialDict.items():
+                ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [ShareDefine.rptGatherSoul])
+    GameWorld.DebugLog("聚魂分解: isAuto=%s,PlaceIndexList=%s, delPlaceDict=%s, giveMaterialDict=%s" % (isAuto, placeList, delPlaceDict, giveMaterialDict))
+    if not isAuto:
+        curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitGatherSoulDecompose, 1)
     return
 
 
-def __GetGatherSoulSplitMaterial(gathersoulID, soulidList=[], soulSplinters=0, soulCore=0):
+def __GetGatherSoulSplitMaterial(gathersoulID):
     ##拆解多属性聚魂 返回单属性聚魂ID,材料
+    soulidList, soulSplinters, soulCore= [], 0, 0
     compoundIpyData = IpyGameDataPY.GetIpyGameDataNotLog('GatherSoulCompound', gathersoulID)
     if compoundIpyData:
         materialList = compoundIpyData.GetNeedItem()
         soulSplinters += compoundIpyData.GetNeedSoulSplinters()
         soulCore += compoundIpyData.GetNeedSoulCore()
         for itemID in materialList:
-            soulIpyData = GetGatherSoulIpyData(itemID)
-            if soulIpyData and len(soulIpyData.GetAttrType()) > 1:
-                __GetGatherSoulSplitMaterial(itemID, soulidList, soulSplinters, soulCore)
-            else:
-                soulidList.append(itemID)
+#            soulIpyData = GetGatherSoulIpyData(itemID)
+#            if soulIpyData and len(soulIpyData.GetAttrType()) > 1:
+#                __GetGatherSoulSplitMaterial(itemID, soulidList, soulSplinters, soulCore)
+#            else:
+            soulidList.append(itemID)
     return soulidList, soulSplinters, soulCore
 
 
@@ -409,16 +420,18 @@
     
     materialsIDList = []
     materialsLVDict = {}
-    indexList1 = []  #背包的聚魂索引
-    indexList2 = []  #孔索引
+    indexList1, dataList1 = [], []  #背包的聚魂索引
+    indexList2, dataList2 = [], []  #孔索引
     for i, placeType in enumerate(packList):
         index = indexList[i]
         if placeType == 0:
             GatherSoulData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_VPackItem % (ShareDefine.rptGatherSoul, index))  # 聚魂背包中的值
             indexList1.append(index)
+            dataList1.append(GatherSoulData)
         else:
             GatherSoulData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GatherSoulHoleData % (index), 0)
             indexList2.append(index)
+            dataList2.append(GatherSoulData)
         if not GatherSoulData:
             continue
         GatherSoulItemID = ItemControler.GetGatherSoulItemID(GatherSoulData)
@@ -439,14 +452,15 @@
             GameWorld.DebugLog('    聚魂合成 背包格子数量不足1个')
             return 
         
-    costMoneyDict = {ShareDefine.TYPE_Price_SoulSplinters:ipyData.GeNeedSoulSplinters(),
-                     ShareDefine.TYPE_Price_SoulCore:ipyData.GeNeedSoulSplinters(), }
-    for moneyType, costMoney in costMoneyDict:
+    costMoneyDict = {ShareDefine.TYPE_Price_SoulSplinters:ipyData.GetNeedSoulSplinters(),
+                     ShareDefine.TYPE_Price_SoulCore:ipyData.GetNeedSoulCore(), }
+    for moneyType, costMoney in costMoneyDict.items():
         if not PlayerControl.HaveMoney(curPlayer, moneyType, costMoney):
+            GameWorld.DebugLog('聚魂合成钱不够 moneyType=%s, costMoney=%s'%(moneyType, costMoney))
             return
     
     infoDict = {"TagItemID":tagItemID}
-    for moneyType, costMoney in costMoneyDict:
+    for moneyType, costMoney in costMoneyDict.items():
         PlayerControl.PayMoney(curPlayer, moneyType, costMoney, ChConfig.Def_Cost_ItemProduce, infoDict)
      
     totalPoint = 0
@@ -481,18 +495,43 @@
         RefreshGatherSoulAttr(curPlayer)
         PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
     #返还多余魂尘
+    totalPoint = int(totalPoint)
     if totalPoint > 0:
         PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_SoulDust, totalPoint)
     #给新物品
     curItem = ItemControler.GetOutPutItemObj(tagItemID)
     curItem.SetUserAttr(ShareDefine.Def_IudetGatherSoulLV, tagItemLV)
     PlayerItemControler = ItemControler.PlayerItemControler(curPlayer)
-    PlayerItemControler.PutInItem(ShareDefine.rptGatherSoul, curItem, event=[ChConfig.ItemGive_ItemCompound, False, {'indexList1':indexList1, 'indexList2':indexList2, 'soulDust':totalPoint}])
-    
+    PlayerItemControler.PutInItem(ShareDefine.rptGatherSoul, curItem, event=[ChConfig.ItemGive_ItemCompound, False, {'indexList1':dataList1, 'indexList2':dataList2, 'soulDust':totalPoint}])
+    GameWorld.DebugLog('    聚魂合成 成功')
     curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitGatherSoulCompound, 1)
     return
 
 
+def DoGatherSoulSuccessLogic(curPlayer):
+    #聚魂成就处理
+    #清掉#镶嵌X枚X品质聚魂的成就信息
+    PlayerSuccess.ResetSuccessByType(curPlayer, ShareDefine.SuccType_InlayGatherSoul)
+    totalLV = 0
+    GatherSoulUnlockDict = IpyGameDataPY.GetFuncEvalCfg("GatherSoulHole", 1, {})
+    maxGatherSoulHole = len(GatherSoulUnlockDict)
+    for holeNum in xrange(maxGatherSoulHole):
+        GatherSoulData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GatherSoulHoleData % holeNum, 0)
+        if not GatherSoulData:
+            continue
+        GatherSoulItemID = ItemControler.GetGatherSoulItemID(GatherSoulData)
+        itemData = GameWorld.GetGameData().GetItemByTypeID(GatherSoulItemID)
+        if not itemData:
+            continue
+#        if itemData.GetType() == ChConfig.Def_ItemType_GatherSoulCore:
+#            continue
+        itemColor = itemData.GetItemColor()
+        GatherSoulItemPlusLV = ItemControler.GetGatherSoulItemPlusLV(GatherSoulData) + 1 #客户端1开始
+        totalLV += GatherSoulItemPlusLV
+        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_InlayGatherSoul, 1, [itemColor])
+    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_GatherSoulLvUp, totalLV)
+    return
+
 def RefreshGatherSoulAttr(curPlayer):
     allAttrList = [{} for _ in range(4)]
     GatherSoulUnlockDict = IpyGameDataPY.GetFuncEvalCfg("GatherSoulHole", 1, {})

--
Gitblit v1.8.0