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