From 5c27c43c293460a98a1374504c07533ddf17d24f Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 03 六月 2019 19:32:21 +0800
Subject: [PATCH] 7067 【2.0】【后端】丹炉新增批量炼丹

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py |   83 ++++++++++++++++++++++-------------------
 1 files changed, 45 insertions(+), 38 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
index 04958df..56bd17f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
@@ -76,7 +76,7 @@
     if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_RefineStove):
         GameWorld.DebugLog("炼丹炉功能未开启!", playerID)
         return
-
+    refineTimes = max(1, clientPack.AlchemyTimes)
     alchemyID = clientPack.AlchemyID
     doType = clientPack.DoType
     GameWorld.DebugLog("玩家炼丹: alchemyID=%s, doType=%s" % (alchemyID, doType), playerID)
@@ -119,9 +119,11 @@
         if curAlchemyItemID:
             GameWorld.DebugLog('当前丹类型已在炼丹中! curAlchemyItemID=%s' % curAlchemyItemID)
             return
+        if refineTimes < 1:
+            return
         # 基础固定消耗
         needMaterialDict = alchemyIpyData.GetMaterial()
-
+        needMaterialDict = {itemID:itemCnt*refineTimes for itemID, itemCnt in needMaterialDict.items()}
         itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
         lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needMaterialDict, itemPack, False)
         if lackItemDict:
@@ -132,6 +134,7 @@
         ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, ChConfig.ItemDel_Alchemy)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyItemID % alchemType, alchemyItemID)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyStartTime % alchemyID, curTime)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyTimes % alchemyID, refineTimes)
 
         Sycn_AlchemyMsg(curPlayer, alchemyID, False)
         #日常任务
@@ -149,33 +152,36 @@
         if curAlchemyItemID != alchemyItemID:
             GameWorld.DebugLog('开炉丹药ID错误 curAlchemyItemID=%s' % curAlchemyItemID)
             return
+        refineTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyTimes % alchemyID)
+        refineTimes = max(1, refineTimes)
         startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyStartTime % alchemyID)
         passTime = max(0, curTime - startTime)
-        if passTime < alchemyIpyData.GetNeedTime():
+        if passTime < alchemyIpyData.GetNeedTime() * refineTimes:
             GameWorld.DebugLog('开炉丹药,时间未到  passTime=%s' % passTime)
             return
         alchemyQuality = alchemyIpyData.GetAlchemyQuality()
-        appointInfo = [] #定制配置 [数量,成功率]
-        alchemyCustomizedDict = IpyGameDataPY.GetFuncEvalCfg('alchemyCustomized', 1, {})
-        if alchemyID in alchemyCustomizedDict:
-            alchemyCnt = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_AlchemyCnt, alchemyID, False)
-            alchemyCntDict = alchemyCustomizedDict[alchemyID]
-            if alchemyCnt + 1 in alchemyCntDict:
-                appointInfo = alchemyCntDict[alchemyCnt + 1]
+
+        # appointInfo = [] #定制配置 [数量,成功率]
+        # alchemyCustomizedDict = IpyGameDataPY.GetFuncEvalCfg('alchemyCustomized', 1, {})
+        # if alchemyID in alchemyCustomizedDict:
+        #     alchemyCnt = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_AlchemyCnt, alchemyID, False)
+        #     alchemyCntDict = alchemyCustomizedDict[alchemyID]
+        #     if alchemyCnt + 1 in alchemyCntDict:
+        #         appointInfo = alchemyCntDict[alchemyCnt + 1]
 
         
         #成功率
-        if appointInfo:
-            successRate = appointInfo[1]
-        elif alchemType == DefStoveType2:
-            successRate = ShareDefine.Def_MaxRateValue  #仙丹必定成功
-        elif alchemType == DefStoveType1:
-            #灵丹成功率公式 参数 curLuckValue:慧根  alchemyLV:炼丹等级 alchemyQuality:丹药等级  qualityNeedLuck:要求慧根
-            qualityNeedLuck = IpyGameDataPY.GetFuncEvalCfg('alchemySuccess', 2, {}).get(str(alchemyQuality), 0)
-            successRate = eval(IpyGameDataPY.GetFuncCompileCfg('alchemySuccess'))
-        else:
-            return
-        isSuccess = GameWorld.CanHappen(successRate)
+        # if appointInfo:
+        #     successRate = appointInfo[1]
+        # elif alchemType == DefStoveType2:
+        #     successRate = ShareDefine.Def_MaxRateValue  #仙丹必定成功
+        # elif alchemType == DefStoveType1:
+        #     #灵丹成功率公式 参数 curLuckValue:慧根  alchemyLV:炼丹等级 alchemyQuality:丹药等级  qualityNeedLuck:要求慧根
+        #     qualityNeedLuck = IpyGameDataPY.GetFuncEvalCfg('alchemySuccess', 2, {}).get(str(alchemyQuality), 0)
+        #     successRate = eval(IpyGameDataPY.GetFuncCompileCfg('alchemySuccess'))
+        # else:
+        #     return
+        isSuccess = 1 #GameWorld.CanHappen(successRate)
         resultCnt = 0  #丹药数量 0代表失败
         if isSuccess:
             needSpace = 1
@@ -186,20 +192,18 @@
             if alchemType == DefStoveType2:
                 resultCnt = 1 #仙丹必定为1
             elif alchemType == DefStoveType1:
-                if appointInfo:
-                    resultCnt = appointInfo[0]
-                else:
-                    ipyData = IpyGameDataPY.InterpolationSearch('AlchemyResult', 'LuckValue', curLuckValue, {'AlchemyQuality':alchemyIpyData.GetAlchemyQuality()})
-                    if not ipyData:
-                        GameWorld.ErrLog('AlchemyResult 配置错误 未找到该丹方数量 alchemyItemID=%s' % alchemyItemID, playerID)
-                        return
-                    resultCnt = GameWorld.GetResultByRandomList(ipyData.GetCntRateList())
+                ipyData = IpyGameDataPY.InterpolationSearch('AlchemyResult', 'LuckValue', curLuckValue, {'AlchemyQuality':alchemyIpyData.GetAlchemyQuality()})
+                if not ipyData:
+                    GameWorld.ErrLog('AlchemyResult 配置错误 未找到该丹方数量 alchemyItemID=%s' % alchemyItemID, playerID)
+                    return
+                resultCnt = GameWorld.GetResultByRandomList(ipyData.GetCntRateList())
             if not resultCnt:
                 GameWorld.ErrLog('AlchemyResult 配置错误 未随机出该丹方数量alchemyItemID=%s' % alchemyItemID, playerID)
                 return
             makeItemData = GameWorld.GetGameData().GetItemByTypeID(alchemyItemID)
             if not makeItemData:
                 return
+            resultCnt *=refineTimes
             ItemControler.GivePlayerItem(curPlayer, alchemyItemID, resultCnt, 0, [IPY_GameWorld.rptItem],
                                      event=[ChConfig.ItemGive_Refine, False, {}])
             #紫色及以上全服广播
@@ -210,30 +214,32 @@
                 PlayerControl.WorldNotify(0, "AchemyGreatSuccess", [curPlayer.GetPlayerName(), alchemyItemID])
 
             #任务
-            EventShell.EventRespons_RefineItem(curPlayer, alchemyQuality, alchemyItemID)
+            for _ in xrange(refineTimes):
+                EventShell.EventRespons_RefineItem(curPlayer, alchemyQuality, alchemyItemID)
         #重置
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyItemID % alchemType, 0)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyStartTime % alchemyID, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyTimes % alchemyID, 0)
         #加经验
-        addExp = alchemyIpyData.GetAlchemyExp()
+        addExp = alchemyIpyData.GetAlchemyExp() * refineTimes
         AddRefineExp(curPlayer, addExp, alchemyLV)
         #加次数
-        if alchemyID in alchemyCustomizedDict:
-            GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_AlchemyCnt, alchemyID, min(alchemyCnt + 1, 9), False)
+        # if alchemyID in alchemyCustomizedDict:
+        #     GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_AlchemyCnt, alchemyID, min(alchemyCnt + refineTimes, 9), False)
 
-        GameWorld.DebugLog('炼丹结果 alchemyItemID=%s,successRate=%s,isSuccess=%s,resultCnt=%s,appointInfo=%s' % (alchemyItemID, successRate, isSuccess, resultCnt, appointInfo), playerID)
+        GameWorld.DebugLog('炼丹结果 alchemyItemID=%s,refineTimes=%s,isSuccess=%s,resultCnt=%s' % (alchemyItemID, refineTimes, isSuccess, resultCnt), playerID)
 
         Sycn_AlchemyMsg(curPlayer, alchemyID, False, alchemyItemID, resultCnt)
 
         #完成1次炼丹成就
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_RefineItem, 1)
+        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_RefineItem, refineTimes)
         #完成1次X品质物品炼丹成就
         #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_RefineStoveColor, 1, [makeItemData.GetItemColor()])
 
 
-        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, 1)
-        PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, 1)
-        PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_Alchemy, 1)
+        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, refineTimes)
+        PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, refineTimes)
+        PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_Alchemy, refineTimes)
     return
 
 
@@ -295,6 +301,7 @@
         StoveInfo = ChPyNetSendPack.tagMCPlayerStoveInfo()
         StoveInfo.AlchemyID = alchemyID
         StoveInfo.StartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyStartTime % alchemyID)
+        StoveInfo.AlchemyTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyTimes % alchemyID)
         pack.InfoList.append(StoveInfo)
     pack.StoveCnt = len(pack.InfoList)
     NetPackCommon.SendFakePack(curPlayer, pack)

--
Gitblit v1.8.0