hxp
2019-05-27 a464c80b1d44bdca78684f0bb5f5eba58d2fd87d
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -28,8 +28,6 @@
# @change: "2013-09-18 17:00" Alee 退出锁定退出交易
# @change: "2013-09-23 19:30" Alee 红名提示修改
# @change: "2013-11-15 20:20" hxp 关闭07 3A购买背包封包功能,增加背包成功系统提示
# @change: "2013-11-27 20:30" hxp 修改结束摆摊状态事件单独处理,不在结束事件中处理
# @change: "2013-12-10 14:00" hxp 修改查看摆摊状态事件单独处理,不在结束事件中处理
# @change: "2013-12-12 14:30" hxp 增加钻石购买背包计费点事件同步
# @change: "2013-12-13 12:20" hxp 修改首登物品绑定设置
# @change: "2013-12-27 16:00" Alee 删除多余代码
@@ -80,7 +78,6 @@
import PlayerControl
import FunctionNPCCommon
import FBLogic
import PlayerShopItem
import ItemControler
import ItemCommon
import QuestCommon
@@ -100,7 +97,7 @@
import PlayerExpandPackCfgMgr
import EventReport
import PlayerCoat
import PlayerSuccess
import PlayerGatherSoul
import PlayerArrestTask
import PlayerRune
import IpyGameDataPY
@@ -229,6 +226,63 @@
    EventLogic(curPlayer, sendPack_EventNPCID, tick)
    return
#// C1 06 跨服NPC对话 #tagCMCrossNPCTalk
#
#struct    tagCMCrossNPCTalk
#{
#    tagHead        Head;
#    WORD        ObjID;
#    DWORD        NPCID;
#    WORD        PosX;
#    WORD        PosY;
#};
def OnCrossNPCTalk(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    objID = clientData.ObjID
    npcID = clientData.NPCID
    #posX = clientData.PosX
    #posY = clientData.PosY
    if GameWorld.IsCrossServer():
        return
    lastTick = curPlayer.GetDictByKey("CrossNPCTalkTick")
    if tick - lastTick < 2000:
        return
    curPlayer.SetDict("CrossNPCTalkTick", tick)
    npcData = GameWorld.GetGameData().FindNPCDataByID(npcID)
    if not npcData:
        GameWorld.ErrLog("跨服NPCID不存在! npcID=%s" % npcID)
        return
    # 目前暂支持跨服采集
    if npcData.GetType() not in [IPY_GameWorld.ntCollection, IPY_GameWorld.ntMissionCollect]:
        return
    collectNPCIpyData = IpyGameDataPY.GetIpyGameData("CollectNPC", npcID)
    if collectNPCIpyData:
        if not NPCCommon.CheckCanCollectByNPCID(curPlayer, npcID, collectNPCIpyData):
            return
        msgDict = {"PlayerID":curPlayer.GetPlayerID(), "ObjID":objID, "NPCID":npcID}
        GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_CollectNPC, msgDict)
    return
def ClientServerMsg_CollectNPC(curPlayer, msgData, serverGroupID, tick):
    ## 收到子服同步的采集NPC
    objID = msgData["ObjID"]
    npcID = msgData["NPCID"]
    curNPC = GameWorld.FindNPCByID(objID)
    if not curNPC:
        return
    if npcID !=  curNPC.GetNPCID():
        GameWorld.ErrLog("采集跨服NPC错误!npcID=%s != curNPCID=%s" % (npcID, curNPC.GetNPCID()))
        return
    EventLogic(curPlayer, objID, tick)
    return
##客户端//08 01封包响应 自定义函数: 事件处理
#@param curPlayer 当前玩家
#@param eventNPCID 事件NPCID
@@ -288,6 +342,10 @@
        return
    
    curPlayer.SetActionObj(curNPC)
    PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)
    if NPCCommon.OnCollectNPCBegin(curPlayer, curNPC, tick):
        return
    
    prepareTime = FBLogic.GetFBPrepareTime(curPlayer, curNPC)
    
@@ -785,31 +843,10 @@
    curPlayer.SetMP(curPlayer.GetMaxMP())
    
    #---给予玩家新手物品---
    itemControler = ItemControler.PlayerItemControler(curPlayer)
    
    firstLoginGiveItemList = ReadChConfig.GetEvalChConfig("FirstLogin_GiveItem")
    for itemID, itemCount, itemBind in firstLoginGiveItemList:
        if itemID == 0:
            continue
        giveItem = ItemCommon.CreateSingleItem(itemID)
        if not giveItem:
            GameWorld.ErrLog('__FirstLoginOnEnter giveItemErr = %s'%(itemID), playerID)
            continue
        if itemCount > 0:
            ItemControler.SetItemCount(giveItem, itemCount, curPlayer.GetPlayerID(), curPlayer.GetAccID(),
                                       curPlayer.GetPlayerName())
        ItemControler.SetItemIsBind(giveItem, itemBind)
        if not itemControler.PutInItem(IPY_GameWorld.rptItem, giveItem):
            GameWorld.ErrLog('__FirstLoginOnEnter packFull, giveItemErr = %s'%(itemID), playerID)
            giveItem.Clear()
            continue
    #---初始化装备显隐---
    curPlayer.SetEquipShowSwitch(IPY_GameWorld.revClothesCoat|IPY_GameWorld.revWeaponCoat|IPY_GameWorld.revMask)
    #---初始化装备显隐 第1套*10+没有套装
    curPlayer.SetEquipShowSwitch(10)
    PlayerControl.SetFaceEquipIndex(curPlayer, 11012014)
    
    #默认触发一次功能开启
    if curPlayer.GetLV() == 1:
@@ -1296,15 +1333,6 @@
    RunQuestEvent(curPlayer, 'on_deactive', missionID, Def_RunQuestType_RunAll)
    return
#---------------------------------------------------------------------
##任务触发器_OnCoin 换取金钱事件
#@param curPlayer 玩家实例
#@return 返回值无意义
#@remarks 任务触发器_OnCoin 换取金钱事件
def EventResponse_OnCoin(curPlayer):
    RunQuestEvent(curPlayer, 'on_coin', 'on_coin', Def_RunQuestType_RunAll)
    curPlayer.DataServer_CheckPrizeItem()
    return
#---------------------------------------------------------------------
##任务触发器_OnDig 挖宝进度条结束后触发
@@ -1655,6 +1683,14 @@
    RunQuestEvent(curPlayer, "on_trialtowercnt", cnt, Def_RunQuestType_Normal)
    return
## 通关天星塔第X层
#  @param curPlayer 玩家实例
#  @param eventName
#  @return None
def EventRespons_SkyTowerCnt(curPlayer, cnt):
    RunQuestEvent(curPlayer, "skytowerpass", cnt, Def_RunQuestType_Normal)
    return
##护送X次美女 
# @param curPlayer 玩家实例
# @param eventName 事件名
@@ -1681,13 +1717,6 @@
    RunQuestEvent(curPlayer, "on_goldinvest", "on_goldinvest", Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "on_goldinvest", investType, Def_RunQuestType_Normal)
    return
def EventRespons_OnBuyTeHuiItem(curPlayer, shopID, itemShopIndex):
    # 购买特惠商店物品
    RunQuestEvent(curPlayer, "on_buy_tehuiitem", "on_buy_tehuiitem", Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "on_buy_tehuiitem", shopID, Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "on_buy_tehuiitem", "%s_%s" % (shopID, itemShopIndex), Def_RunQuestType_Normal)
    return
def EventRespons_OnActivatePet(curPlayer, petID):
    # 激活宠物
@@ -1695,16 +1724,14 @@
    RunQuestEvent(curPlayer, "on_activatepet", petID, Def_RunQuestType_Normal)
    return
def EventRespons_OnActiveMagicWeapon(curPlayer, mwID):
    # 激活法宝
    RunQuestEvent(curPlayer, "on_activemagicweapon", mwID, Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "on_activemagicweaponex", mwID, Def_RunQuestType_RunAll)
    RunQuestEvent(curPlayer, "on_activemagicweaponex", 0, Def_RunQuestType_RunAll)
    return
def EventRespons_MagicWeaponLV(curPlayer, mwID, lv):
    # 法宝解锁进度
    RunQuestEvent(curPlayer, "magicweaponlv", '%s_%s'%(mwID, lv), Def_RunQuestType_RunAll)
    return
def EventRespons_MagicWeaponFBPassLV(curPlayer, mwID, lv):
    # 魔族法宝关卡进度
    RunQuestEvent(curPlayer, "mwfbpasslv", '%s_%s'%(mwID, lv), Def_RunQuestType_Normal)
    return
def EventRespons_SuccessFinish(curPlayer, succID):
@@ -1762,15 +1789,22 @@
    RunQuestEvent(curPlayer, "passiveset", "passiveset", Def_RunQuestType_Normal)
    return
def EventRespons_PlusGodWeapon(curPlayer):
def EventRespons_PlusGodWeapon(curPlayer, weaponType):
    #神兵锤炼
    RunQuestEvent(curPlayer, "plusgodweapon", "plusgodweapon", Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "plusgodweapon", weaponType, Def_RunQuestType_Normal)
    return
def EventRespons_GodWeaponUp(curPlayer, weaponType, attrLV):
    # 神兵升级
    RunQuestEvent(curPlayer, "godweaponup", "%s_%s"%(weaponType, attrLV), Def_RunQuestType_Normal)
    return
def EventRespons_RefineItem(curPlayer, alchemyLV):
def EventRespons_RefineItem(curPlayer, alchemyLV, alchemyItemID):
    #八卦炉炼丹
    RunQuestEvent(curPlayer, "refineitem", alchemyLV, Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "refineitem", "refineitem", Def_RunQuestType_Normal)
    #这两个接口策划暂时不用,先注释,使用新的连某个丹药接口
    #RunQuestEvent(curPlayer, "refineitem", alchemyLV, Def_RunQuestType_Normal)
    #RunQuestEvent(curPlayer, "refineitem", "refineitem", Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "refineitem", alchemyItemID, Def_RunQuestType_Normal)
    return
def EventRespons_RefineStoveUp(curPlayer, alchemyLV):
@@ -1808,10 +1842,6 @@
    RunQuestEvent(curPlayer, "realmup", realmlv, Def_RunQuestType_RunAll)
    return
def EventRespons_MWSoulActive(curPlayer, soulid):
    #法宝之魂激活
    RunQuestEvent(curPlayer, "mwsoulactive", soulid, Def_RunQuestType_RunAll)
    return
def EventRespons_PassQueenRelecs(curPlayer, lineID, grade):
    #X级通关X层娲皇遗迹
@@ -1833,9 +1863,9 @@
    RunQuestEvent(curPlayer, "trialexange", costItemID, Def_RunQuestType_Normal)
    return
def EventRespons_EquipByPlace(curPlayer, equipplace):
def EventRespons_EquipByPlace(curPlayer, itemClassLV, equipplace):
    #穿戴某部位装备(非时效)
    RunQuestEvent(curPlayer, "equipbyplace", equipplace, Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "equipbyplace", '%s_%s'%(itemClassLV, equipplace), Def_RunQuestType_Normal)
    return
def EventRespons_CompoundEquip(curPlayer, itemColor, itemQuality):
@@ -1856,6 +1886,99 @@
def EventRespons_StoreDonate(curPlayer):
    #捐献仙盟装备
    RunQuestEvent(curPlayer, "storedonate", "storedonate", Def_RunQuestType_Normal)
    return
def EventRespons_EquipPlus(curPlayer, classLV, partPlusLV):
    #强化等级变化
    RunQuestEvent(curPlayer, "equipplus", "equipplus", Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "equipplus", '%s_%s'%(classLV, partPlusLV), Def_RunQuestType_Normal)
    return
def EventRespons_EquipPlusEvolve(curPlayer, nextEvolveLV):
    #强化进化
    RunQuestEvent(curPlayer, "equipplusevolve", "equipplusevolve", Def_RunQuestType_Normal)
    return
def EventRespons_Talk(curPlayer, eventName):
    #频道发言
    RunQuestEvent(curPlayer, "talk", eventName, Def_RunQuestType_Normal)
    return
def EventRespons_FairyDomain(curPlayer, eventType):
    #完成缥缈仙域事件
    RunQuestEvent(curPlayer, "fairydomain", 'fairydomain', Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "fairydomain", eventType, Def_RunQuestType_Normal)
    return
def EventRespons_AroundMission(curPlayer, missionType):
    #完成跑环任务
    RunQuestEvent(curPlayer, "aroundfinish", missionType, Def_RunQuestType_Normal)
    return
def EventRespons_Pray(curPlayer, prayType):
    #完成祈愿
    RunQuestEvent(curPlayer, "pray", prayType, Def_RunQuestType_Normal)
    return
def EventRespons_ThinkMagicWeapon(curPlayer):
    #感应法宝
    RunQuestEvent(curPlayer, "thinkfabao", 'thinkfabao', Def_RunQuestType_Normal)
    return
def EventRespons_ElementSkill(curPlayer, mainSkillID, skillElementType, updSelectSkillLV):
    #激活五行专精 主技能ID_专精类型_激活等级.xml
    RunQuestEvent(curPlayer, "elementskill", '%s_%s_%s'%(mainSkillID, skillElementType, updSelectSkillLV), Def_RunQuestType_Normal)
    return
def EventRespons_EquipStarUp(curPlayer):
    #装备升星
    RunQuestEvent(curPlayer, "equipstarup", 'equipstarup', Def_RunQuestType_Normal)
    return
def EventRespons_InlayStone(curPlayer):
    #宝石镶嵌
    RunQuestEvent(curPlayer, "inlaystone", 'inlaystone', Def_RunQuestType_Normal)
    return
def EventRespons_StoneChange(curPlayer):
    # 宝石变更
    RunQuestEvent(curPlayer, "stonechange", 'stonechange', Def_RunQuestType_Normal)
    return
def EventRespons_EquipItem(curPlayer):
    #穿脱装备
    RunQuestEvent(curPlayer, "equipitem", 'equipitem', Def_RunQuestType_Normal)
    return
def EventRespons_SkillUp(curPlayer, FuncType, skillLV):
    #升级技能
    RunQuestEvent(curPlayer, "skillup", FuncType, Def_RunQuestType_Normal)
    RunQuestEvent(curPlayer, "skillup", '%s_%s' % (FuncType, skillLV), Def_RunQuestType_Normal)
    return
def EventRespons_LingGenQualityUP(curPlayer, attrID, qualityLV):
    #灵根升品
    RunQuestEvent(curPlayer, "linggenqualityup", '%s_%s' % (attrID, qualityLV), Def_RunQuestType_Normal)
    return
def EventRespons_AddPoint(curPlayer):
    #灵根加点
    RunQuestEvent(curPlayer, "addpoint", '0', Def_RunQuestType_Normal)
    return
def EventRespons_ActivityAward(curPlayer, awardIndex):
    #活跃领奖
    RunQuestEvent(curPlayer, "activityaward", awardIndex, Def_RunQuestType_Normal)
    return
def EventRespons_HorsePetBoss(curPlayer):
    #参加骑宠BOSS
    RunQuestEvent(curPlayer, "horsepetboss", 'horsepetboss', Def_RunQuestType_Normal)
    return
def EventRespons_LingGenReset(curPlayer):
    #灵根重置
    RunQuestEvent(curPlayer, "linggenreset", 'linggenreset', Def_RunQuestType_Normal)
    return
#---------------------------------------------------------------------
@@ -3688,18 +3811,16 @@
    curPlayer.SetForbiddenResetItem(0)
    ExitCompose(curPlayer)
    ExitWarehouse(curPlayer)
    ExitRepair(curPlayer)
    #ExitRepair(curPlayer)
    ExitCreateFamily(curPlayer)
    ExitBillboard(curPlayer)
    #ExitEventLock(curPlayer)
    #ExitShopItem(curPlayer) # 奇迹只在切地图及下线时关闭摆摊
    #ExitWatchShopItem(curPlayer)
    #npc商店退出
    ExitNPCShop(curPlayer)
    
    PlayerTrade.LeaveTrade(curPlayer, 0)
    #PlayerTrade.LeaveTrade(curPlayer, 0)
    # 清除py自定义状态
    ClearPyPlayerAction(curPlayer)
    #ClearPyPlayerAction(curPlayer)
    
    #调用底层结束事件
    #避免策划变更,导致其他退出锁定事件使任务1未接取就退出锁定
@@ -3733,85 +3854,6 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PyPlayerAction, 0)      
    return
##结束摆摊事件
#@param curPlayer 玩家实例
#@return 返回值无意义
#@remarks 自定义函数:结束摆摊事件
def ExitShopItem(curPlayer):
    GameWorld.DebugLog("ExitShopItem", curPlayer.GetPlayerID())
    playerShop = curPlayer.GetPlayerShop()
    #在摆摊状态
    if playerShop.GetIsStartShop():
        PlayerShopItem.DoExitShop(curPlayer , curPlayer.GetPlayerShop())
    return
#---------------------------------------------------------------------
##结束查看摆摊事件
#@param curPlayer 玩家实例
#@return 返回值无意义
#@remarks 自定义函数:结束查看摆摊事件
def ExitWatchShopItem(curPlayer):
    curPlayerShop = curPlayer.GetPlayerShop()
    if not curPlayerShop.GetIsWatchingShop():
        return
    openShopPlayer = curPlayer.GetActionPlayer()
    __DoExitWatchShopItem(curPlayer , openShopPlayer)
    curPlayerShop.SetIsWatchingShop(0)
    return
#---------------------------------------------------------------------
##结束查看摆摊事件
#@param curPlayer 玩家实例
#@return 返回值无意义
#@remarks 自定义函数:结束查看摆摊事件
def __DoExitWatchShopItem(curPlayer , openShopPlayer):
    if openShopPlayer == None:
        return
    shop = openShopPlayer.GetPlayerShop()
    #没有开店
    if not shop.GetIsStartShop():
        return
    #商店删除这个玩家
    shop.DeleteWatchPlayer(curPlayer.GetPlayerID())
    return
#---------------------------------------------------------------------
##结束事件锁
#@param curPlayer 玩家实例
#@return 返回值无意义
#@remarks 自定义函数:结束事件锁
#===============================================================================
# def ExitEventLock(curPlayer):
#    if not curPlayer.GetHaveSetEventLock() :
#        return
#
#    #在摆摊状态不解锁,奇迹摆摊物品解锁只在切地图/下线/玩家主动结束摆摊情况下解锁
#    playerShop = curPlayer.GetPlayerShop()
#    if playerShop.GetIsStartShop():
#        return
#
#    #获得玩家物品管理器
#    ItemManager = curPlayer.GetItemManager()
#    #获得背包
#    curPack = ItemManager.GetPack(IPY_GameWorld.rptItem)
#    for i in range(curPack.GetCount()):
#        item = curPack.GetAt(i)
#        if item == None or item.IsEmpty():
#            continue
#
#        if not item.GetIsEventLocked():
#            continue
#
#        #离开事件锁
#        item.SetIsEventLocked(False)
#===============================================================================
#---------------------------------------------------------------------
##结束查看排行榜
#@param curPlayer 玩家实例
@@ -3929,7 +3971,7 @@
# @remarks 自定义函数, 读数据库任务删除表, 删除任务
def __DoLogic_DeleteMission(curPlayer, curMission):
    missionID = curMission.GetMissionID()
    GameWorld.Log("__DoLogic_DeleteMission---%s"%missionID, curPlayer.GetID())
    delMissionData = GameWorld.GetGameData().GetMissionDeleteByID(missionID)
    #任务删除表中无此任务
    if not delMissionData:
@@ -4143,79 +4185,6 @@
# @return 返回值无意义
# @remarks 客户端封包响应 //0D 0C 材料加工#tagCMaterialCompound
def StuffMachining(index, tick):
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#
#    materialCompoundPack = IPY_GameWorld.IPY_CMaterialCompound()
#    itemIndex = materialCompoundPack.GetItemIndex()
#
#    curItemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
#    curItem = curItemPack.GetAt(itemIndex)
#
#    #类型不符合
#    if  not ItemCommon.CheckItemByType(curItem, ChConfig.Def_Type_Machining_Stuff):
#        PlayerControl.NotifyCode(curPlayer, "GeRen_jin_287294")
#        return
#
#    #[金钱,金钱类型]
#    curEffMoney = curItem.GetEffectByIndex(1)
#    useMoney = curEffMoney.GetEffectValue(0)
#    useMoneyType = curEffMoney.GetEffectValue(1)
#
#    #判断金钱
#    if not PlayerControl.HaveMoney(curPlayer, useMoneyType, useMoney):
#        return
#
#    #[等级,数量]
#    curEffInfo = curItem.GetEffectByIndex(0)
#    curEffectID = curEffInfo.GetEffectID()
#    curItemLv = curEffInfo.GetEffectValue(0)
#    useCount = curEffInfo.GetEffectValue(1)
#
#    #---数量验证---
#    hasCount = curItem.GetCount()
#    if useCount > hasCount:
#        PlayerControl.NotifyCode(curPlayer , "GeRen_jin_293296")
#        return
#
#    #查找更高一级的材料
#    findItemData = ItemCommon.FindItemFromDataByEffValue(ChConfig.Def_Type_Machining_Stuff, curEffectID, curItemLv+1)
#
#    #已经是顶级材料
#    if findItemData == None:
#        PlayerControl.NotifyCode(curPlayer, "GeRen_jin_708106")
#        return
#
#    #---创建物品,放入背包,失败则要删除物品---
#    newItem = ItemCommon.CreateSingleItem(findItemData.GetItemTypeID())
#    ItemControler.SetItemIsBind(newItem, curItem.GetIsBind())
#
#    isBind = newItem.GetIsBind()
#
#    newItemTypeID = newItem.GetItemTypeID()
#    newItemCount = newItem.GetCount()
#
#    #是否成功放入背包
#    itemControl = ItemControler.PlayerItemControler(curPlayer)
#    if not itemControl.PutInItem(IPY_GameWorld.rptItem, newItem):
#        PlayerControl.NotifyCode(curPlayer, "GeRen_jin_650657")
#        newItem.Clear()
#        return
#
#    curItemID = curItem.GetItemTypeID()  #合成材料ID
#
#    #---扣钱物品并记录---
#    PlayerControl.PayMoney(curPlayer, useMoneyType, useMoney)
#
#    ItemCommon.DelItem(curPlayer, curItem, useCount, True, 'ComposeChip')
#
#    #生成物品
#    PlayerControl.NotifyCode(curPlayer, 'GeRen_jin_557507', [newItemTypeID, newItemCount])
#
#    #手续费流向记录
#    PlayerControl.DataServerMoneyLog(curPlayer, useMoneyType, 650, par = useMoney, msg = "poundage")
#
#
#    DataRecordPack.DR_StuffMachining(curPlayer, newItemTypeID, newItemCount, isBind)
    return
    
    
@@ -4363,7 +4332,9 @@
    # 符印交换
    if PlayerRune.SwitchRune(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
        return
    # 聚魂交换
    if PlayerGatherSoul.SwitchGatherSoul(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
        return
    
    #ʱװ
    if PlayerCoat.SwitchCoat(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
@@ -4974,30 +4945,53 @@
    if hasGotAward:
        GameWorld.DebugLog('领取环任务每轮奖励  已奖励 类型 %s'%taskType)
        return
    runTaskAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward')
    if taskType not in runTaskAwardDict:
        GameWorld.DebugLog('领取环任务每轮奖励  RunTaskAward 没有配置类型的奖励 类型 %s'%taskType)
        return
    moneyNum = 0
    specialAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward', 2)
    if taskType in specialAwardDict:
        rate, moneyCnt = specialAwardDict[taskType]
        if GameWorld.CanHappen(rate):
            moneyNum = moneyCnt
            if taskType == QuestCommon.Def_Mission_Type_RunDaily:
                PlayerControl.WorldNotify(0, 'CoinTaskReward', [curPlayer.GetName()])
    moneyType, minMoney, maxMoney = runTaskAwardDict[taskType]
    if not moneyNum:
        moneyNum = random.randint(minMoney, maxMoney)
    if moneyType == ShareDefine.TYPE_Price_Family_Contribution:
        PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, moneyNum, True, ShareDefine.Def_AddFAVReason_DoFamilyMisson)
    else:
        addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Run"}
        PlayerControl.GiveMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_GiveMoney_Mission, addDataDict, False)
    #物品奖励
    itemList = []
    itemAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward', 3, {})
    if str(taskType) in itemAwardDict:
        itemList = itemAwardDict[str(taskType)]
        # 检查背包
        needSpace = len(itemList)
        packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
        if needSpace > packSpace:
            PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
            return
        for itemID, itemCount, isBind in itemList:
            ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
    
    #给经验
    giveExp = 0
    expAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward', 4, {})
    if str(taskType) in expAwardDict:
        reExp = PlayerControl.GetPlayerReExp(curPlayer)
        giveExp = eval(expAwardDict[str(taskType)])
        PlayerControl.PlayerControl(curPlayer).AddExp(giveExp)
    #给钱
    moneyType = 0
    moneyNum = 0
    runTaskMoneyAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward')
    if taskType in runTaskMoneyAwardDict:
        specialAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward', 2, {})
        if taskType in specialAwardDict:
            rate, moneyCnt = specialAwardDict[taskType]
            if GameWorld.CanHappen(rate):
                moneyNum = moneyCnt
                if taskType == QuestCommon.Def_Mission_Type_RunDaily:
                    PlayerControl.WorldNotify(0, 'CoinTaskReward', [curPlayer.GetName()])
        moneyType, minMoney, maxMoney = runTaskMoneyAwardDict[taskType]
        if not moneyNum:
            moneyNum = random.randint(minMoney, maxMoney)
        if moneyType == ShareDefine.TYPE_Price_Family_Contribution:
            PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, moneyNum, True, ShareDefine.Def_AddFAVReason_DoFamilyMisson)
        else:
            addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Run"}
            PlayerControl.GiveMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_GiveMoney_Mission, addDataDict, False)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskAwardRecord % taskType, moneyNum)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskAwardState % taskType, 1)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskAwardRecord % taskType, moneyNum)
    GameWorld.DebugLog('领取环任务每轮奖励成功  moneyType=%s, moneyNum=%s'%(moneyType, moneyNum))
    GameWorld.DebugLog('领取环任务每轮奖励成功  moneyType=%s, moneyNum=%s, itemList=%s, giveExp=%s'%(moneyType, moneyNum, itemList, giveExp))
    
    #通知客户端
    NotifyRunEndAward(curPlayer, taskType)