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