From 21152959fd9bc31f762fd9ae9adf6c89a9a4c59b Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 05 七月 2019 11:00:12 +0800
Subject: [PATCH] 7858 【后端】【主干】上古战场玩家分配逻辑

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py |  102 +++++++++++++++++++++++++++-----------------------
 1 files changed, 55 insertions(+), 47 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 56bd17f..6ea79b7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
@@ -139,7 +139,7 @@
         Sycn_AlchemyMsg(curPlayer, alchemyID, False)
         #日常任务
         costItemCnt = sum(needMaterialDict.values())
-        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_RefineStove, costItemCnt)
+        #PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_RefineStove, costItemCnt)
 
     elif doType == 2:
         if curAlchemyItemID != alchemyItemID:
@@ -161,51 +161,59 @@
             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]
+        alchemyAppointCntDict = {} #定制配置 {次数:[数量,成功率]}
+        alchemyCustomizedDict = IpyGameDataPY.GetFuncEvalCfg('alchemyCustomized', 1, {})
+        if alchemyID in alchemyCustomizedDict:
+            alchemyCnt = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_AlchemyCnt, alchemyID, False)
+            alchemyAppointCntDict = alchemyCustomizedDict[alchemyID]
 
+        resultIpyData = IpyGameDataPY.InterpolationSearch('AlchemyResult', 'LuckValue', curLuckValue, {'AlchemyQuality':alchemyIpyData.GetAlchemyQuality()})
+        if not resultIpyData:
+            GameWorld.ErrLog('AlchemyResult 配置错误 未找到该丹方数量 alchemyItemID=%s' % alchemyItemID, playerID)
+            return
+        makeItemData = GameWorld.GetGameData().GetItemByTypeID(alchemyItemID)
+        if not makeItemData:
+            return
+        #灵丹成功率公式 参数 curLuckValue:慧根  alchemyLV:炼丹等级 alchemyQuality:丹药等级  qualityNeedLuck:要求慧根
+        qualityNeedLuck = IpyGameDataPY.GetFuncEvalCfg('alchemySuccess', 2, {}).get(str(alchemyQuality), 0)
+        nomalsuccessRate = eval(IpyGameDataPY.GetFuncCompileCfg('alchemySuccess'))
         
-        #成功率
-        # 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:
+        for i in xrange(refineTimes):
+            #成功率
+            appointInfo = [] #[数量,成功率]
+            if alchemyAppointCntDict and alchemyCnt+1+i in alchemyAppointCntDict:
+                appointInfo = alchemyAppointCntDict[alchemyCnt+1+i]
+            if appointInfo:
+                successRate = appointInfo[1]
+            elif alchemType == DefStoveType2:
+                successRate = ShareDefine.Def_MaxRateValue  #仙丹必定成功
+            elif alchemType == DefStoveType1:
+                successRate = nomalsuccessRate
+            else:
+                return
+            isSuccess = GameWorld.CanHappen(successRate)
+            if isSuccess:
+                if alchemType == DefStoveType2:
+                    resultCnt += 1 #仙丹必定为1
+                elif alchemType == DefStoveType1:
+                    if appointInfo:
+                        resultCnt += appointInfo[0]
+                    else:
+                        resultCnt += GameWorld.GetResultByRandomList(resultIpyData.GetCntRateList())
+                if not resultCnt:
+                    GameWorld.ErrLog('AlchemyResult 配置错误 未随机出该丹方数量alchemyItemID=%s' % alchemyItemID, playerID)
+                    return
+        if resultCnt:
             needSpace = 1
             packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
             if needSpace > packSpace:
                 PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
                 return
-            if alchemType == DefStoveType2:
-                resultCnt = 1 #仙丹必定为1
-            elif alchemType == DefStoveType1:
-                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, {}])
+                                      event=[ChConfig.ItemGive_Refine, False, {}])
             #紫色及以上全服广播
             notifyColor = IpyGameDataPY.GetFuncCfg("AlchemyNotify", 1)
             needNotifyItemIDList = IpyGameDataPY.GetFuncEvalCfg("AlchemyNotify", 2)
@@ -213,9 +221,9 @@
             if alchemyItemID not in notNotifyItemIDList and (alchemyItemID in needNotifyItemIDList or makeItemData.GetItemColor() >= notifyColor):
                 PlayerControl.WorldNotify(0, "AchemyGreatSuccess", [curPlayer.GetPlayerName(), alchemyItemID])
 
-            #任务
-            for _ in xrange(refineTimes):
-                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)
@@ -224,19 +232,19 @@
         addExp = alchemyIpyData.GetAlchemyExp() * refineTimes
         AddRefineExp(curPlayer, addExp, alchemyLV)
         #加次数
-        # if alchemyID in alchemyCustomizedDict:
-        #     GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_AlchemyCnt, alchemyID, min(alchemyCnt + refineTimes, 9), False)
-
+        if alchemyID in alchemyCustomizedDict:
+            GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_AlchemyCnt, alchemyID, min(alchemyCnt + refineTimes, 9), False)
+    
         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, refineTimes)
         #完成1次X品质物品炼丹成就
         #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_RefineStoveColor, 1, [makeItemData.GetItemColor()])
-
-
+    
+    
         PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, refineTimes)
         PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, refineTimes)
         PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_Alchemy, refineTimes)

--
Gitblit v1.8.0