| | |
| | | import copy
|
| | | import time
|
| | |
|
| | | DefStoveType1 = 1 #1灵丹 |
| | | DefStoveType1 = 1 #1灵丹
|
| | | DefStoveType2 = 2 #2仙丹
|
| | |
|
| | |
|
| | |
| | | if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_RefineStove):
|
| | | GameWorld.DebugLog("炼丹炉功能未开启!", playerID)
|
| | | return
|
| | | |
| | |
|
| | | alchemyID = clientPack.AlchemyID
|
| | | doType = clientPack.DoType
|
| | | GameWorld.DebugLog("玩家炼丹: alchemyID=%s, doType=%s" % (alchemyID, doType), playerID)
|
| | |
| | | curAlchemyItemID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyItemID % alchemType) #正在炼的丹
|
| | | curLuckValue = curPlayer.GetLuckValue()
|
| | | curTime = int(time.time())
|
| | | |
| | |
|
| | | if doType == 0:
|
| | | if hasLearn:
|
| | | GameWorld.DebugLog('丹方已学习!,不可重复学')
|
| | |
| | | return
|
| | | # 基础固定消耗
|
| | | needMaterialDict = alchemyIpyData.GetMaterial()
|
| | | |
| | |
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needMaterialDict, itemPack, False)
|
| | | if lackItemDict:
|
| | | GameWorld.DebugLog("配方材料不足!alchemyID=%s,needMaterialDict=%s,lackItemDict=%s,hasItemDict=%s" |
| | | GameWorld.DebugLog("配方材料不足!alchemyID=%s,needMaterialDict=%s,lackItemDict=%s,hasItemDict=%s"
|
| | | % (alchemyItemID, needMaterialDict, lackItemDict, delInfoDict), playerID)
|
| | | return
|
| | | #扣消耗
|
| | | 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)
|
| | | |
| | |
|
| | | Sycn_AlchemyMsg(curPlayer, alchemyID, False)
|
| | | #日常任务
|
| | | costItemCnt = sum(needMaterialDict.values())
|
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_RefineStove, costItemCnt)
|
| | | |
| | |
|
| | | elif doType == 2:
|
| | | if curAlchemyItemID != alchemyItemID:
|
| | | GameWorld.DebugLog('停止丹药ID错误 curAlchemyItemID=%s' % curAlchemyItemID)
|
| | |
| | | if passTime < alchemyIpyData.GetNeedTime():
|
| | | GameWorld.DebugLog('开炉丹药,时间未到 passTime=%s' % passTime)
|
| | | return
|
| | | alchemyCommonCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyCommonCnt)
|
| | | 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]
|
| | |
|
| | | |
| | | #成功率
|
| | | if alchemType == DefStoveType2:
|
| | | if appointInfo:
|
| | | successRate = appointInfo[1]
|
| | | elif alchemType == DefStoveType2:
|
| | | successRate = ShareDefine.Def_MaxRateValue #仙丹必定成功
|
| | | elif alchemType == DefStoveType1:
|
| | | #灵丹成功率公式 参数 curLuckValue:慧根 alchemyLV:炼丹等级 alchemyQuality:丹药等级 qualityNeedLuck:要求慧根
|
| | | alchemyCustomizedDict = IpyGameDataPY.GetFuncEvalCfg('alchemyCustomized', 1, {})
|
| | | if alchemyCommonCnt + 1 in alchemyCustomizedDict:
|
| | | successRate = alchemyCustomizedDict[alchemyCommonCnt + 1][1]
|
| | | else:
|
| | | qualityNeedLuck = IpyGameDataPY.GetFuncEvalCfg('alchemySuccess', 2, {}).get(str(alchemyQuality), 0)
|
| | | successRate = eval(IpyGameDataPY.GetFuncCompileCfg('alchemySuccess'))
|
| | | qualityNeedLuck = IpyGameDataPY.GetFuncEvalCfg('alchemySuccess', 2, {}).get(str(alchemyQuality), 0)
|
| | | successRate = eval(IpyGameDataPY.GetFuncCompileCfg('alchemySuccess'))
|
| | | else:
|
| | | return
|
| | | isSuccess = GameWorld.CanHappen(successRate)
|
| | |
| | | if alchemType == DefStoveType2:
|
| | | resultCnt = 1 #仙丹必定为1
|
| | | elif alchemType == DefStoveType1:
|
| | | if alchemyCommonCnt + 1 in alchemyCustomizedDict:
|
| | | resultCnt = alchemyCustomizedDict[alchemyCommonCnt + 1][0]
|
| | | if appointInfo:
|
| | | resultCnt = appointInfo[0]
|
| | | else:
|
| | | ipyData = IpyGameDataPY.InterpolationSearch('AlchemyResult', 'LuckValue', curLuckValue, {'AlchemyQuality':alchemyIpyData.GetAlchemyQuality()})
|
| | | if not ipyData:
|
| | |
| | | notNotifyItemIDList = IpyGameDataPY.GetFuncEvalCfg("AlchemyNotify", 3)
|
| | | if alchemyItemID not in notNotifyItemIDList and (alchemyItemID in needNotifyItemIDList or makeItemData.GetItemColor() >= notifyColor):
|
| | | PlayerControl.WorldNotify(0, "AchemyGreatSuccess", [curPlayer.GetPlayerName(), alchemyItemID])
|
| | | |
| | |
|
| | | #任务
|
| | | EventShell.EventRespons_RefineItem(curPlayer, alchemyQuality, alchemyItemID)
|
| | | #重置
|
| | |
| | | addExp = alchemyIpyData.GetAlchemyExp()
|
| | | AddRefineExp(curPlayer, addExp, alchemyLV)
|
| | | #加次数
|
| | | if alchemType == DefStoveType1:
|
| | | maxCnt = max(alchemyCustomizedDict)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyCommonCnt, min(alchemyCommonCnt + 1, maxCnt))
|
| | | |
| | | GameWorld.DebugLog('炼丹结果 alchemyItemID=%s,successRate=%s,isSuccess=%s,resultCnt=%s' % (alchemyItemID, successRate, isSuccess, resultCnt), playerID)
|
| | | |
| | | if alchemyID in alchemyCustomizedDict:
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_AlchemyCnt, alchemyID, min(alchemyCnt + 1, 9), False)
|
| | |
|
| | | GameWorld.DebugLog('炼丹结果 alchemyItemID=%s,successRate=%s,isSuccess=%s,resultCnt=%s,appointInfo=%s' % (alchemyItemID, successRate, isSuccess, resultCnt, appointInfo), playerID)
|
| | |
|
| | | Sycn_AlchemyMsg(curPlayer, alchemyID, False, alchemyItemID, resultCnt)
|
| | | |
| | |
|
| | | #完成1次炼丹成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_RefineItem, 1)
|
| | | #完成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)
|
| | | return |
| | | return
|
| | |
|
| | |
|
| | | def AddRefineExp(curPlayer, addExp, alchemyLV):
|
| | | #增加炼丹炉经验
|
| | | if addExp <= 0:
|
| | | return
|
| | | |
| | |
|
| | | alchemyExp = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyExp) + addExp, ShareDefine.Def_UpperLimit_DWord)
|
| | | GameWorld.DebugLog("增加炼丹经验: alchemyLV=%s,addExp=%s,alchemyExp=%s" % (alchemyLV, addExp, alchemyExp), curPlayer.GetPlayerID())
|
| | | |
| | |
|
| | | isLVUp = False
|
| | | stoveIpyData = IpyGameDataPY.GetIpyGameDataNotLog("RefineStove", alchemyLV)
|
| | | while stoveIpyData and stoveIpyData.GetUpNeedExp() and alchemyExp >= stoveIpyData.GetUpNeedExp():
|
| | |
| | | if not stoveIpyData:
|
| | | GameWorld.DebugLog("没有下一级数据了,已满级!不可升级!", curPlayer.GetPlayerID())
|
| | | break
|
| | | |
| | |
|
| | | alchemyExp -= needExp
|
| | | alchemyLV += 1
|
| | | GameWorld.DebugLog(" 炼丹升级: alchemyLV=%s,alchemyExp=%s" % (alchemyLV, alchemyExp), curPlayer.GetPlayerID())
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyExp, alchemyExp)
|
| | | if not isLVUp:
|
| | | return False
|
| | | |
| | |
|
| | | GameWorld.DebugLog("升级后剩余经验: %s" % alchemyExp, curPlayer.GetPlayerID())
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyLV, alchemyLV)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_AlchemyLV, alchemyLV)
|
| | |
| | | syncItemIDList.append(alchemyID)
|
| | | elif alchemyID and GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_AlchemyLearnState, alchemyID):
|
| | | syncItemIDList = [alchemyID]
|
| | | |
| | |
|
| | | for alchemyID in syncItemIDList:
|
| | | StoveInfo = ChPyNetSendPack.tagMCPlayerStoveInfo()
|
| | | StoveInfo.AlchemyID = alchemyID
|
| | |
| | | if prayCnt >= limitCnt:
|
| | | GameWorld.DebugLog('今日祈福丹药次数已满!prayCnt=%s' % prayCnt)
|
| | | return
|
| | | packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, 1) |
| | | packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, 1)
|
| | | if not packSpace:
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
|
| | | return
|
| | | |
| | |
|
| | | alchemyItemList = IpyGameDataPY.GetFuncEvalCfg('GodAlchemy')
|
| | | |
| | |
|
| | | newItemInfoList = []
|
| | | for itemInfo in alchemyItemList:
|
| | | itemID = itemInfo[1]
|
| | |
| | | if not newItemInfoList:
|
| | | GameWorld.DebugLog('祈福丹药,没有丹药可产出!!')
|
| | | return
|
| | | |
| | |
|
| | | makeItemInfo = GameWorld.GetResultByWeightList(newItemInfoList)
|
| | | if not makeItemInfo:
|
| | | GameWorld.DebugLog("祈福丹药, 结果错误!")
|
| | | return
|
| | | |
| | |
|
| | | makeItemID, itemCount = makeItemInfo
|
| | | makeItemData = GameWorld.GetGameData().GetItemByTypeID(makeItemID)
|
| | | if not makeItemData:
|
| | | return
|
| | | |
| | |
|
| | | costMoney = IpyGameDataPY.GetFuncCfg('GodAlchemy', 2)
|
| | | if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costMoney, ChConfig.Def_Cost_AlchemyPray):
|
| | | return
|
| | |
| | | ItemControler.GivePlayerItem(curPlayer, makeItemID, itemCount, 0, [IPY_GameWorld.rptItem],
|
| | | event=[ChConfig.ItemGive_Refine, False, {}])
|
| | | #GameWorld.DebugLog('makeItemID=%s,newItemInfoList=%s'%(makeItemID, newItemInfoList))
|
| | | |
| | |
|
| | | #紫色及以上全服广播
|
| | | notifyColor = IpyGameDataPY.GetFuncCfg("AlchemyNotify", 1)
|
| | | needNotifyItemIDList = IpyGameDataPY.GetFuncEvalCfg("AlchemyNotify", 2)
|
| | | notNotifyItemIDList = IpyGameDataPY.GetFuncEvalCfg("AlchemyNotify", 3)
|
| | | if makeItemID not in notNotifyItemIDList and (makeItemID in needNotifyItemIDList or makeItemData.GetItemColor() >= notifyColor):
|
| | | PlayerControl.WorldNotify(0, "BlastfurnaceBlessing", [curPlayer.GetPlayerName(), makeItemID])
|
| | | |
| | |
|
| | | #更新次数
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyPrayCnt, prayCnt + 1)
|
| | | Sycn_AlchemyPrayMsg(curPlayer, makeItemID)
|