xdh
2019-06-03 5c27c43c293460a98a1374504c07533ddf17d24f
7067 【2.0】【后端】丹炉新增批量炼丹
6个文件已修改
168 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -2228,7 +2228,7 @@
class  tagCGVoiceChat(Structure):
    Head = tagHead()
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域
    TargetNameLen = 0    #(BYTE TargetNameLen)
    TargetName = ""    #(String TargetName)//size = TargetNameLen
    TargetID = 0    #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称
@@ -3396,8 +3396,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ZoneID", c_ubyte),    # 赛区ID
                  ("SeasonID", c_ubyte),    # 赛季ID
                  ("ZoneID", c_ubyte),    # 赛区ID
                  ("SeasonID", c_ubyte),    # 赛季ID
                  ]
    def __init__(self):
@@ -5953,7 +5953,7 @@
                  ("SrcBackpack", c_ubyte),    #源背包类型
                  ("DesBackPack", c_ubyte),    #目标背包类型
                  ("SrcIndex", c_ushort),    #转移物品索引位置;当全部转移时此值无效
                  ("IsAll", c_ubyte),    #是否全部转移
                  ("IsAll", c_ubyte),    #是否全部转移
                  ]
    def __init__(self):
@@ -10304,6 +10304,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("AlchemyID", c_int),    # 丹药ID
                  ("AlchemyTimes", c_ushort),    # 丹药次数
                  ("DoType", c_ubyte),    # 0-学习 1-开始炼丹 2-停止炼丹 3-开炉取丹
                  ]
@@ -10322,6 +10323,7 @@
        self.Cmd = 0xA5
        self.SubCmd = 0x76
        self.AlchemyID = 0
        self.AlchemyTimes = 0
        self.DoType = 0
        return
@@ -10336,12 +10338,14 @@
                                Cmd:%s,
                                SubCmd:%s,
                                AlchemyID:%d,
                                AlchemyTimes:%d,
                                DoType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.AlchemyID,
                                self.AlchemyTimes,
                                self.DoType
                                )
        return DumpString
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -16465,6 +16465,7 @@
    _fields_ = [
                  ("AlchemyID", c_int),    # 丹 ID
                  ("StartTime", c_int),    # 开始炼的时间
                  ("AlchemyTimes", c_ushort),    # 炼的次数
                  ]
    def __init__(self):
@@ -16479,6 +16480,7 @@
    def Clear(self):
        self.AlchemyID = 0
        self.StartTime = 0
        self.AlchemyTimes = 0
        return
    def GetLength(self):
@@ -16490,11 +16492,13 @@
    def OutputString(self):
        DumpString = '''// A3 BF 通知客户端炼丹炉信息 //tagMCPlayerStoveMsg:
                                AlchemyID:%d,
                                StartTime:%d
                                StartTime:%d,
                                AlchemyTimes:%d
                                '''\
                                %(
                                self.AlchemyID,
                                self.StartTime
                                self.StartTime,
                                self.AlchemyTimes
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3891,6 +3891,7 @@
Def_PDict_AlchemyLearnState = "AlchemyLearnState%s" #丹方是否已学习 
Def_PDict_AlchemyItemID = "AlchemyItemID_%s" #炼丹中的丹药ID  参数丹药类型
Def_PDict_AlchemyStartTime = "AlchemyStartTime_%s" #炼丹开始时间    参数丹药ID
Def_PDict_AlchemyTimes = "AlchemyTimes_%s" #本次炼丹几次    参数丹药ID
Def_PDict_AlchemyCnt = "AlchemyCnt%s" #丹药炼丹次数
Def_PDict_AlchemyPrayCnt = "AlchemyPrayCnt" #炼丹祈福次数
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -2228,7 +2228,7 @@
class  tagCGVoiceChat(Structure):
    Head = tagHead()
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域
    TargetNameLen = 0    #(BYTE TargetNameLen)
    TargetName = ""    #(String TargetName)//size = TargetNameLen
    TargetID = 0    #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称
@@ -2326,7 +2326,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("TagID", c_int),
                  ("TagID", c_int),
                  ("Answer", c_ubyte),    #0: 拒绝 1: 接受
                  ]
@@ -2382,7 +2382,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ItemID", c_int),
                  ("ItemID", c_int),
                  ("IsAttention", c_ubyte),    #是否关注,取消关注发0
                  ]
@@ -3396,8 +3396,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ZoneID", c_ubyte),    # 赛区ID
                  ("SeasonID", c_ubyte),    # 赛季ID
                  ("ZoneID", c_ubyte),    # 赛区ID
                  ("SeasonID", c_ubyte),    # 赛季ID
                  ]
    def __init__(self):
@@ -3676,7 +3676,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Adult", c_ubyte),
                  ("Adult", c_ubyte),
                  ]
    def __init__(self):
@@ -4029,7 +4029,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),
                  ("MapID", c_int),
                  ]
    def __init__(self):
@@ -4129,8 +4129,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),
                  ("FuncLineID", c_ushort),
                  ("MapID", c_int),
                  ("FuncLineID", c_ushort),
                  ]
    def __init__(self):
@@ -4185,7 +4185,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),
                  ("ObjID", c_int),
                  ]
    def __init__(self):
@@ -4341,7 +4341,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("TaskID", c_int),
                  ("TaskID", c_int),
                  ("RewardPer", c_ushort),    # 奖励百分比, 默认100;  150则代表1.5倍
                  ]
@@ -4397,7 +4397,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("NPCID", c_int),
                  ("NPCID", c_int),
                  ("EndType", c_ubyte),    # 0-默认;1-跳过
                  ]
@@ -4781,8 +4781,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),
                  ("BossID", c_int),
                  ("ObjID", c_int),
                  ("BossID", c_int),
                  ]
    def __init__(self):
@@ -4837,8 +4837,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),
                  ("NPCID", c_int),
                  ("ObjID", c_int),
                  ("NPCID", c_int),
                  ("QueryType", c_ubyte),    # 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血
                  ]
@@ -5119,7 +5119,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MissionID", c_int),
                  ("MissionID", c_int),
                  ("DoType", c_ubyte),    # 0-只完成本次;1-完成所有环任务
                  ]
@@ -5336,7 +5336,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("GuideIndex", c_ubyte),    # 记录位索引, 发送255时,代表设置全部
                  ("IsOK", c_ubyte),
                  ("IsOK", c_ubyte),
                  ]
    def __init__(self):
@@ -5467,7 +5467,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MissionID", c_int),
                  ("MissionID", c_int),
                  ]
    def __init__(self):
@@ -5666,7 +5666,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),
                  ("PlayerID", c_int),
                  ("EquipClassLV", c_ubyte),    #大于0为查看指定境界阶装备信息,  0为查看默认信息
                  ]
@@ -5898,7 +5898,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Seting", c_int),
                  ("Seting", c_int),
                  ]
    def __init__(self):
@@ -5953,7 +5953,7 @@
                  ("SrcBackpack", c_ubyte),    #源背包类型
                  ("DesBackPack", c_ubyte),    #目标背包类型
                  ("SrcIndex", c_ushort),    #转移物品索引位置;当全部转移时此值无效
                  ("IsAll", c_ubyte),    #是否全部转移
                  ("IsAll", c_ubyte),    #是否全部转移
                  ]
    def __init__(self):
@@ -6839,7 +6839,7 @@
                  ("SubCmd", c_ubyte),
                  ("PackType", c_ubyte),    #背包类型
                  ("ItemIndex", c_ushort),    #物品在背包中索引
                  ("DropPosX", c_ushort),
                  ("DropPosX", c_ushort),
                  ("DropPosY", c_ushort),    #掉落物品
                  ]
@@ -7895,8 +7895,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),
                  ("LineID", c_ushort),
                  ("MapID", c_int),
                  ("LineID", c_ushort),
                  ("Cnt", c_ubyte),    # 扫荡次数
                  ("IsFinish", c_ubyte),    # 是否立即完成; 0-否;1-花钱立即完成;2-客户端自行倒计时间到后发送2代表领取扫荡完成奖励
                  ("DataEx", c_int),    #附带信息
@@ -10073,7 +10073,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MWID", c_int),
                  ("MWID", c_int),
                  ]
    def __init__(self):
@@ -10304,6 +10304,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("AlchemyID", c_int),    # 丹药ID
                  ("AlchemyTimes", c_ushort),    # 丹药次数
                  ("DoType", c_ubyte),    # 0-学习 1-开始炼丹 2-停止炼丹 3-开炉取丹
                  ]
@@ -10322,6 +10323,7 @@
        self.Cmd = 0xA5
        self.SubCmd = 0x76
        self.AlchemyID = 0
        self.AlchemyTimes = 0
        self.DoType = 0
        return
@@ -10336,12 +10338,14 @@
                                Cmd:%s,
                                SubCmd:%s,
                                AlchemyID:%d,
                                AlchemyTimes:%d,
                                DoType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.AlchemyID,
                                self.AlchemyTimes,
                                self.DoType
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -16465,6 +16465,7 @@
    _fields_ = [
                  ("AlchemyID", c_int),    # 丹 ID
                  ("StartTime", c_int),    # 开始炼的时间 
                  ("AlchemyTimes", c_ushort),    # 炼的次数
                  ]
    def __init__(self):
@@ -16479,6 +16480,7 @@
    def Clear(self):
        self.AlchemyID = 0
        self.StartTime = 0
        self.AlchemyTimes = 0
        return
    def GetLength(self):
@@ -16490,11 +16492,13 @@
    def OutputString(self):
        DumpString = '''// A3 BF 通知客户端炼丹炉信息 //tagMCPlayerStoveMsg:
                                AlchemyID:%d,
                                StartTime:%d
                                StartTime:%d,
                                AlchemyTimes:%d
                                '''\
                                %(
                                self.AlchemyID,
                                self.StartTime
                                self.StartTime,
                                self.AlchemyTimes
                                )
        return DumpString
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)