hch
2019-04-15 37e044190ad9c4cd98e3ecc42762379676bd6c23
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
@@ -37,7 +37,6 @@
import QuestCommon
import SkillShell
import GameLogInfo
import PlayerReincarnation
import PlayerMissionCollect
import PlayerFamily
import ShareDefine
@@ -49,19 +48,18 @@
import ChEquip
import PlayerActivity
import PlayerSuccess
import EventReport
#import PlayerCostVIP
import GameFuncComm
import IpyGameDataPY
import ShopItemManage
import PlayerPet
import PlayerArrestTask
import PlayerMagicWeapon
import PlayerBossReborn
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerWeekParty
import PlayerFairyDomain
import PlayerActLogin
import PlayerHorse
import FBCommon
import PyGameData
import math
import time
@@ -92,7 +90,7 @@
Def_Run_Around_Reward_Exp = "run_around_exp"              #跑环任务的奖励
Def_Run_Around_Reward_ExpPoint = "run_around_exp_point"     #跑环任务的奖励
Def_Run_Around_Reward_Money = "run_around_money"          #跑环任务的给钱
Def_Run_Around_Reward_FamilyHornor = "run_around_familyhornor"     #跑环任务的仙盟贡献奖励
Def_Run_Around_Reward_Multiple = "run_around_multiple"     #跑环任务的奖励翻倍数
Def_Task_Reward_Per = "reward_per"     #领取任务奖励倍数百分比; 150代表1.5倍
@@ -1221,7 +1219,7 @@
def __RunAnswerAction(curPlayer, curMission, answersNode):
    actionsNode = __FindAnswerActionNode(curPlayer, curMission, answersNode)
    if actionsNode == None or actionsNode.IsEmpty():
        GameWorld.Log('__RunAnswerAction找不到回答节点')
        GameWorld.DebugLog('__RunAnswerAction找不到回答节点--%s'%curMission.GetMissionID())
        return
    
    __DoAnswerActionNode(curPlayer, curMission, actionsNode)
@@ -1276,7 +1274,7 @@
        #特殊清空处理, 如果没有任务, state为0
        curValue = 0
    elif tagMission == None:
        GameWorld.Log("没有目标任务 %s" % conditionID , curPlayer.GetPlayerID())
        GameWorld.DebugLog("没有目标任务 %s" % conditionID , curPlayer.GetPlayerID())
        return
    else:
        curValue = QuestRunnerValue.GetValue(curPlayer, tagMission, conditionName)
@@ -1362,6 +1360,22 @@
    value = 1
    return QuestRunnerValue.GetEval(conditionType, value, conditionValue)
##判断是否穿戴某部位(非时效)
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curConditionNode 节点信息
# @return 返回值, 是否判断成功
# @remarks <have_equip value="装备位"/>
def ConditionType_Have_Equip(curPlayer, curMission, curConditionNode):
    equipPlace = int(curConditionNode.GetAttribute("value"))
    roleEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
    curEquip = roleEquipPack.GetAt(equipPlace)
    if curEquip.IsEmpty():
        return False
    if curEquip.GetEndureReduceType():
        return False
    return True
#---------------------------------------------------------------------
##增加家族相关值 
# @param curPlayer 玩家实例
@@ -2490,7 +2504,7 @@
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
    for equipIndex in range(0, equipPack.GetCount()):
        #备用装备栏不处理
        if equipIndex not in ChConfig.Type_Equip_CanTake :
        if equipIndex not in ShareDefine.RoleEquipType:
            continue
        curEquip = equipPack.GetAt(equipIndex)
        if curEquip.IsEmpty():
@@ -2515,7 +2529,7 @@
    totalPlusLV = 0
    for packType, equipPartIndexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
        for i in equipPartIndexList:
            partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, i)
            partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, i)
            totalPlusLV += partStarLV
    
    
@@ -2526,7 +2540,7 @@
#    equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, [])
#    for i in equipPartIndexList:
#        #统计全身强化等级
#        partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, i)
#        partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, i)
#        if partStarLV >= star:
#            partCnt +=1 
    #GameWorld.Log('star=%s,conditionValue=%s,partCnt=%s,%s'%(star,conditionValue,partCnt,QuestRunnerValue.GetEval(conditionType, partCnt, conditionValue)))
@@ -2573,42 +2587,6 @@
            return False
        return petPack.GetCount() > 0
    return PlayerPet.GetPetDataItemByNPCID(curPlayer, checkPetID) != None
def ConditionType_Is_Buy_Tehuiitem(curPlayer, curMission, curConditionNode):
    # 判断是否购买过特惠商店物品
    # <Is_Buy_Tehuiitem shopID="1007" itemShopIndex="0,1,2"/> shopID暂定需指定商店ID, itemShopIndex可指定多个索引, 中间英文逗号隔开
    shopID = GameWorld.ToIntDef(curConditionNode.GetAttribute("shopID"), 0)
    if not shopID:
        return False
    indexList = []
    indexInfo = curConditionNode.GetAttribute("itemShopIndex")
    if indexInfo != '':
        indexList = eval('[' + indexInfo + ']')
    if not indexList:
        shopItemList = ShopItemManage.GetShopItemList(shopID)
        indexList = range(len(shopItemList))
    if not indexList:
        GameWorld.DebugLog("需指定判断的特惠商店物品索引编号!indexInfo=%s" % indexInfo)
        return False
    for i in indexList:
        buyCnt = ShopItemManage.__GetPlayerShopItemBuyCnt(curPlayer, shopID, i)
        if buyCnt > 0:
            return True
    return False
##竞技场是否达到多少名
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curConditionNode 节点信息
# @return 返回值, 是否判断成功
# @remarks <Check_Jjcorder type="类型" value="值"/>
def ConditionType_Check_Jjcorder(curPlayer, curMission, curConditionNode):
    conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
    conditionType = curConditionNode.GetAttribute("type")
    maxOrder = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_HistoryMaxOrder, 0,
                    ChConfig.Def_PDictType_Default)
    return QuestRunnerValue.GetEval(conditionType, maxOrder, conditionValue)
#---------------------------------------------------------------------
##执行 扣除玩家镖车押金
@@ -2820,10 +2798,10 @@
# @param bind 绑定
# @param packList 背包索引
# @return 背包索引,-1表示没有可放的背包
def GetCanPutInPackIndex(curPlayer, itemID, itemCount, bind, packList):
def GetCanPutInPackIndex(curPlayer, itemID, itemCount, bind, packList, isAuctionItem=False):
    itemControl = ItemControler.PlayerItemControler(curPlayer)
    for index in packList:
        if not itemControl.CanPutInItem(index, itemID, itemCount, bind):
        if not itemControl.CanPutInItem(index, itemID, itemCount, isAuctionItem):
            continue
        
        return index
@@ -2847,22 +2825,22 @@
                 itemStarLV=0, bind=False, property=None,
                 packList=[IPY_GameWorld.rptItem], isSuite=False,
                 addAttrLV=0, isLucky=False, skillBoostEff=[], holeCount=0,
                 equipIndex= -1, isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[]):
    if PlayerFamily.DoAddFamilyBossFoodEx(curPlayer, itemID, itemCount, ShareDefine.Def_AddFAVReason_DoFamilyMisson):
        #仙盟兽粮自动使用
        return
                 equipIndex= -1, isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[], isAuctionItem=False):
#    if PlayerFamily.DoAddFamilyBossFoodEx(curPlayer, itemID, itemCount, ShareDefine.Def_AddFAVReason_DoFamilyMisson):
#        #仙盟兽粮自动使用
#        return
        
    #任务给予物品应该只能放入万能背包和背包
    itemControl = ItemControler.PlayerItemControler(curPlayer)
    #获得可放入的背包索引
    packIndex = GetCanPutInPackIndex(curPlayer, itemID, itemCount, bind, packList)
    packIndex = GetCanPutInPackIndex(curPlayer, itemID, itemCount, bind, packList, isAuctionItem)
    if packIndex == -1:
        return
    #设置物品属性
    curSingleItem = CreatMissionItem(itemID, itemStarLV, addAttrLV, isSuite, bind,
                                      isLucky, skillBoostEff, itemCount, holeCount, isGreat, baseAttrRate, greatAttrList)
    curSingleItem = CreatMissionItem(curPlayer, itemID, itemStarLV, addAttrLV, isSuite, bind,
                                      isLucky, skillBoostEff, itemCount, holeCount, isGreat, baseAttrRate, greatAttrList, isAuctionItem=isAuctionItem)
    if not curSingleItem:
        return
    
@@ -2881,15 +2859,15 @@
        if equipIndex == 0:
            GameWorld.ErrLog("任务赠送装备位置错误 equipIndex=-1")
            return
        if ItemCommon.CheckHasEquip(curPlayer, IPY_GameWorld.rptEquip, equipIndex):
        equipPackIndex = ItemCommon.GetEquipPackIndex(curSingleItem)
        if ItemCommon.CheckHasEquip(curPlayer, IPY_GameWorld.rptEquip, equipPackIndex):
            #物品已存在直接给背包
            if not itemControl.PutInItem(IPY_GameWorld.rptItem, curSingleItem, event=["AddEventItem", False, {'MissionID':missionID}]):
                GameWorld.Log('###任务 = %s给予物品异常, %s, %s' % (missionID, itemID, itemCount), curPlayer.GetPlayerID())
                curSingleItem.Clear()
                return
        else:
            ChEquip.DoPlayerEquipItem(curPlayer, curSingleItem, equipIndex, 0)
            ChEquip.DoPlayerEquipItem(curPlayer, curSingleItem,equipPackIndex, 0)
    
    #ObtainRes01    <n>获得</n><Info Type="Item" Name="Name" ID="{%S1%}"/><n>×</n><n>{%S2%}!</n>
    elif not itemControl.PutInItem(packIndex, curSingleItem, event=["AddEventItem", False, {'MissionID':missionID}]):
@@ -2911,26 +2889,23 @@
#  @param itemCount: 物品数量
#  @param baseAttrRate: 任务创建的物品默认的基础属性随机值为10000
#  @return None
def CreatMissionItem(itemID, starLV=0, addAttrLV=0, isSuite=False, bind=False,
def CreatMissionItem(curPlayer, itemID, starLV=0, addAttrLV=0, isSuite=False, bind=False,
                     isLucky=0, skillBoostEff=[], itemCount=1, holeCount=0,
                     isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[]):
                     isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[], isAuctionItem=False):
    
    curSingleItem = ItemControler.GetOutPutItemObj(itemID)
    curSingleItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem, curPlayer=curPlayer)
    
    if not curSingleItem:
        GameWorld.Log('###创造任务物品失败, itemID = %s' % (itemID))
        return
    
    tmpEquipData = ItemControler.SingleEquipTmpData()
    tmpEquipData.starLV = starLV
    tmpEquipData.holeCnt = holeCount
    tmpEquipData.isSuite = isSuite
    tmpEquipData.isBind = bind
    #tmpEquipData = ItemControler.SingleEquipTmpData()
    #tmpEquipData.starLV = starLV
    #tmpEquipData.holeCnt = holeCount
    #tmpEquipData.isSuite = isSuite
    #tmpEquipData.isBind = bind
    
    ChItem.EquipAddAdditionEx(curSingleItem, tmpEquipData)
    #设置数量
    ItemControler.SetItemCount(curSingleItem, itemCount)
    #ChItem.EquipAddAdditionEx(curSingleItem, tmpEquipData)
    
    return curSingleItem
@@ -3715,7 +3690,7 @@
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks  <Add_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定"
# @remarks  <Add_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定" isAuctionItem="是否拍品"
#        packtype="1,2背包索引" equipIndex="装备位置" suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运"
#        skillBoostEff="[技能效果增强索引, 值]", holeCount="孔数" isGreat="1" baseAttrRate="可强化的装备基础属性随机加强比例默认10000"
#        greatAttr="[卓越属性列表]" />  
@@ -3736,10 +3711,13 @@
    itemStarLV = GameWorld.ToIntDef(curActionNode.GetAttribute("starLV"), 0)
    
    #物品是否绑定
    bind = True if curActionNode.GetAttribute("bind") else False
    bind = True if GameWorld.ToIntDef(curActionNode.GetAttribute("bind")) else False
    #物品是否套装化
    isSuite = True if curActionNode.GetAttribute("suite") else False
    #是否拍品
    isAuctionItem = GameWorld.ToIntDef(curActionNode.GetAttribute("isAuctionItem"), 0)
    
    #追加
    addAttrLV = GameWorld.ToIntDef(curActionNode.GetAttribute("addAttrLV"), 0)
@@ -3767,7 +3745,7 @@
    baseAttrRate = GameWorld.ToIntDef(curActionNode.GetAttribute("baseAttrRate"), ShareDefine.Def_MaxRateValue)
    AddEventItem(curPlayer, curMission, curItemID, curItemCount, None, itemStarLV,
                 bind, False, packTypeList, isSuite, addAttrLV, isLucky,
                 skillBoostEff, holeCount, equipIndex, isGreat, baseAttrRate, greatAttrList)
                 skillBoostEff, holeCount, equipIndex, isGreat, baseAttrRate, greatAttrList, isAuctionItem=isAuctionItem)
#---------------------------------------------------------------------
@@ -3806,7 +3784,7 @@
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks  <Drop_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定"
# @remarks  <Drop_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定" isAuctionItem="是否拍品"
#         suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运"
#        skillBoostEff="[技能效果增强索引, 值]", holeCount="孔数", isGreat="1", effIndex="1" , dropDist="掉落范围默认3"
#        aroundPlayer="1" baseAttrRate="可强化的装备基础属性随机加强比例默认10000" greatAttr="[卓越属性列表]" />  
@@ -3826,6 +3804,8 @@
    isSuite = GameWorld.ToIntDef((curActionNode.GetAttribute("suite")), 0)
    
    bind = GameWorld.ToIntDef((curActionNode.GetAttribute("bind")), 1)
    isAuctionItem = GameWorld.ToIntDef((curActionNode.GetAttribute("isAuctionItem")), 0)
    
    #追加
    addAttrLV = GameWorld.ToIntDef(curActionNode.GetAttribute("addAttrLV"), 0)
@@ -3851,14 +3831,14 @@
    baseAttrRate = GameWorld.ToIntDef(curActionNode.GetAttribute("baseAttrRate"), ShareDefine.Def_MaxRateValue)
    #设置物品属性
    curItem = CreatMissionItem(curItemID, starLV, addAttrLV, isSuite, bind,
                               isLucky, skillBoostEff, count, holeCount, isGreat, baseAttrRate, greatAttrList)
    curItem = CreatMissionItem(curPlayer, curItemID, starLV, addAttrLV, isSuite, bind,
                               isLucky, skillBoostEff, count, holeCount, isGreat, baseAttrRate, greatAttrList, isAuctionItem=isAuctionItem)
        
    if not curItem:
        GameWorld.Log('###创建地上物品异常,无此ID物品 = %s' % (curItemID))
        return
    
    if curActionNode.GetAttribute("aroundPlayer") == "1":
    if curActionNode.GetAttribute("aroundPlayer") == "1" or not curNPC:
        posX, posY = curPlayer.GetPosX(), curPlayer.GetPosY()
    else:
        posX, posY = curNPC.GetPosX(), curNPC.GetPosY()
@@ -4347,61 +4327,8 @@
    curPlayer.SetFreePoint(curPlayerFreePoint + value)
    
    DataRecordPack.DR_Freepoint(curPlayer, "Event", value, {"MissionID":curMission.GetMissionID()})
    return
#---------------------------------------------------------------------
#===============================================================================
# PlayerJob_Warrior,  #  剑士,
# PlayerJob_Wizard,   #  魔法师,
# PlayerJob_Assassin, #  弓箭手,
# PlayerJob_Chaplain, #  魔剑士,
# PlayerJob_Knight,   # 骑士
# PlayerJob_ForceUser,# 魔导师
# PlayerJob_BowMaster,# 圣射手
#===============================================================================
##玩家转职业
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义 <Change_Job checkLV="150" changeJob="4">
def DoType_Change_Job(curPlayer, curMission, curActionNode):
    playerID = curPlayer.GetID()
    checkLV = GameWorld.ToIntDef(curActionNode.GetAttribute("checkLV"), 0)
    if not checkLV:
        GameWorld.Log("change job error! checkLV=%s" % checkLV, playerID)
        return
    curLV = curPlayer.GetLV()
    if curLV < checkLV:
        GameWorld.Log("change job error! checkLV=%s curlv=%s" % (checkLV, curLV), playerID)
        return
    changeJob = GameWorld.ToIntDef(curActionNode.GetAttribute("changeJob"), 0)
    #验证职业
    if not changeJob:
        GameWorld.Log("change job error! changeJob=%s" % changeJob, playerID)
        return
    #curJob = curPlayer.GetJob()
    #计算点数, 恢复等级差的点数
    #addPointDict = ReadChConfig.GetEvalChConfig('lvUp_Point')
    #addPoint = (curLV - checkLV)*(addPointDict.get(changeJob) - addPointDict.get(curJob))
    #设置玩家可加属性点
    #curPlayer.SetFreePoint(curPlayer.GetFreePoint() + addPoint)
    #DataRecordPack.DR_Freepoint(curPlayer, "ChangeJob", addPoint, {"job":changeJob})
    #设置职业
    curPlayer.SetJob(changeJob)
    playerControl = PlayerControl.PlayerControl(curPlayer)
    playerControl.RefreshAllState()
    PlayerReincarnation.DoPlayerReincarnation(curPlayer)
    return True
#---------------------------------------------------------------------
##删除物品
@@ -4809,7 +4736,7 @@
    
    mission_1.SetProperty(Def_Around_AllCount, allCount)
    EventShell.EventRespons_RunTaskAllCnt(curPlayer, curMissionData.Type, allCount)
    GameWorld.DebugLog("删除任务allCount %s, RUNCOUNT=%s" % (allCount, RUNCOUNT))
    GameWorld.Log("删除任务allCount %s, RUNCOUNT=%s" % (allCount, RUNCOUNT))
    if allCount < RUNCOUNT:
@@ -4874,6 +4801,7 @@
# @return 无
# @remarks 跑环任务结束处理,删除或者随机下一个
def __RunAroundMission(curPlayer, missionID, curMissionData, curActionNode):
    GameWorld.Log("__RunAroundMission----%s"%missionID, curPlayer.GetID())
    #任务完成,触发随机跑环
    run_event = GameWorld.ToIntDef(curActionNode.GetAttribute("run_around"), 0)
    firstMissionID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
@@ -4910,8 +4838,9 @@
    
    
    #总跑环次数已满,不可再做
    if run_event == Def_Run_Around_Over_1 and allCount >= RUNCOUNT:
        return
    if run_event == Def_Run_Around_Over_1:
        if allCount >= RUNCOUNT or aroundCount >= AROUNDCOUNT:
            return
    
    nextMissionID = 0
    nextMission = None
@@ -4959,9 +4888,9 @@
        
        if curMissionData.Type == QuestCommon.Def_Mission_Type_RunFamily:
            PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TaskFRun, 1)
        if allCount < RUNCOUNT:
            nextMissionID = __OverRandRunAround(curPlayer, curMissionData)
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskNextMissionID % curMissionData.Type, nextMissionID)
#        if allCount < RUNCOUNT:
#            nextMissionID = __OverRandRunAround(curPlayer, curMissionData)
#            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskNextMissionID % curMissionData.Type, nextMissionID)
        
                
            
@@ -5216,14 +5145,21 @@
def OnAroundMissionFinish(curPlayer, missionType, addCnt=1):
    #跑环任务id列表
    # 活跃度
    GameWorld.Log('    跑环完成触发活跃度 missionType=%s'%missionType, curPlayer.GetPlayerID())
    if missionType == QuestCommon.Def_Mission_Type_RunDaily:
        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_DailyRunMission, addCnt)
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_TaskCRun, addCnt)
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TaskCRun, addCnt)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RunTask, addCnt)
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RunTask, addCnt)
        PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RunTask, addCnt)
        PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_RunTask, addCnt)
        PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_RunTask, 1)
    elif missionType == QuestCommon.Def_Mission_Type_RunFamily:
        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyRunMission, addCnt)
        PlayerFamily.AddFamilyActivity(curPlayer, ShareDefine.FamilyActive_Task, addCnt)
    else:
        GameWorld.Log('    跑环完成触发活跃度异常 missionType=%s'%missionType, curPlayer.GetPlayerID())
    return
@@ -5266,66 +5202,6 @@
    for lvInfo in runAroundReward.Rewards:
        if curRewardLV >= lvInfo[0] and curRewardLV <= lvInfo[1]:
            return runAroundReward.Rewards[lvInfo]
    return
##转生后跑环奖励处理
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @return 返回值无意义
# @remarks 转生后跑环奖励处理
def __ReinAddRunAroundReward(curPlayer, curMission):
    runAroundReward = FindQuestFunc(curMission.GetMissionID()).RunAroundReward
    lvReward = GetRunAroundReward(curPlayer, runAroundReward, rewardLV=0, isMaxLV=True)
    if not lvReward:
        GameWorld.Log("转生跑环奖励错误 id = %d" % curMission.GetMissionID() , curPlayer.GetPlayerID())
        return
    #金钱奖励最大等级
    if lvReward.Money != 0:
        curMission.SetProperty(Def_Run_Around_Reward_Money, lvReward.Money)
#---------------------------------------------------------------------
##转生后每日任务新增奖励
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks <Reincarnation_Add_Reward />
def DoType_Reincarnation_Add_Reward(curPlayer, curMission, curActionNode):
    #没转生不处理
    curReinLV = curPlayer.GetReincarnationLv()
    if curReinLV < 1:
        return
    dayEventReward = FindQuestFunc(curMission.GetMissionID()).DayEventReward
    if dayEventReward == None:
        GameWorld.Log("转生奖励错误 id = %d" % curMission.GetMissionID() , curPlayer.GetPlayerID())
        return
    curRewardLV = dayEventReward.MaxLV
    familyLV = curPlayer.GetFamilyLV()
    #当前等级任务奖励结构体
    curLVDayEventReward = dayEventReward.Rewards[curRewardLV]
    #金钱奖励最大等级
    if curLVDayEventReward.Money != 0:
        curMission.SetProperty(Def_Day_Event_Reward_Money, curLVDayEventReward.Money)
    #家族活跃最大等级
    if curLVDayEventReward.PlayerFamilyActiveValue != 0:
        curMission.SetProperty(Def_Day_Event_Reward_Player_Family_ActiveValue, (curLVDayEventReward.PlayerFamilyActiveValue) * familyLV)
    #镖车压金最大等级
    if curLVDayEventReward.TruckMoney != 0:
        curMission.SetProperty(Def_Day_Event_Reward_Truck_Money, curLVDayEventReward.TruckMoney)
    #转生后跑环奖励处理
    __ReinAddRunAroundReward(curPlayer, curMission)
    
    return
@@ -5383,7 +5259,6 @@
        randStarList = eval(ReadChConfig.GetChConfig('RunAround_Star'))
        aroundStar = GameWorld.GetResultByRandomList(randStarList, 1)
        
        #vipStar = PlayerCostVIP.GetRoundStar(curPlayer)
        vipStar = 0
        if vipStar > 0:
            aroundStar = vipStar
@@ -5417,6 +5292,8 @@
# @return 返回值无意义
# @remarks 设置跑环任务奖励 <set_run_around_reward multiple="指定倍数" id_name="任务ID存储key" /> 
def DoType_Set_Run_Around_Reward(curPlayer, curMission, curActionNode):
    curMissionID = curMission.GetMissionID()
    GameWorld.Log("DoType_Set_Run_Around_Reward---%s"%curMissionID, curPlayer.GetID())
    idNameStr = curActionNode.GetAttribute("id_name")
    if curMission and idNameStr != "":
        questID = GameWorld.ToIntDef(curMission.GetProperty(idNameStr), 0)
@@ -5425,16 +5302,15 @@
            if curMission == None:
                curMission = QuestCommon.AddNewMission(curPlayer, questID)
            
    curMissionID = curMission.GetMissionID()
    curMissionData = FindQuestFunc(curMissionID)
    if not curMissionData:
        return
 
    rewardList = __GetRunAroundReward(curPlayer, curMission)
    if rewardList:
        curExp, curMoney, itemID, itemCount = rewardList
        curExp, curMoney, curFamilyHornor, itemID, itemCount = rewardList
    else:
        curExp, curMoney, itemID, itemCount = 0, 0, 0, 0
        curExp, curMoney, curFamilyHornor, itemID, itemCount = 0, 0, 0, 0
    
    curMission.SetProperty(Def_Run_Around_Reward_Exp, curExp % ChConfig.Def_PerPointValue)
    curMission.SetProperty(Def_Run_Around_Reward_ExpPoint, curExp / ChConfig.Def_PerPointValue)
@@ -5442,6 +5318,8 @@
    
    curMission.SetProperty(Def_Day_Event_Reward_Item_Id, itemID)
    curMission.SetProperty(Def_Day_Event_Reward_Item_Count, itemCount)
    curMission.SetProperty(Def_Run_Around_Reward_FamilyHornor, curFamilyHornor)
    return
@@ -5470,14 +5348,14 @@
    curExp = eval(IpyGameDataPY.GetFuncCfg('RunTaskExp'))
    curExp += curLVRunAroundReward.AddExp
    curMoney = baseMoney
    curFamilyHornor = curLVRunAroundReward.PlayerFamilyHornor
    itemInfo = curLVRunAroundReward.Item
    if itemInfo:
        itemID, itemCount = eval(itemInfo)
    else:
        itemID, itemCount = 0, 0
   
    return (curExp, curMoney, itemID, itemCount)
    return (curExp, curMoney, curFamilyHornor, itemID, itemCount)
  
#---------------------------------------------------------------------
##给予跑环奖励
@@ -5505,14 +5383,24 @@
    addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Run"}
    PlayerControl.GiveMoney(curPlayer, runAroundReward.MoneyType, money, ChConfig.Def_GiveMoney_Mission, addDataDict, False)
    
    familyHornor = curMission.GetProperty(Def_Run_Around_Reward_FamilyHornor)
    if familyHornor:
        PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, familyHornor, True, ShareDefine.Def_AddFAVReason_DoFamilyMisson, True)
    item_id = curMission.GetProperty(Def_Day_Event_Reward_Item_Id)
    item_count = curMission.GetProperty(Def_Day_Event_Reward_Item_Count)
    
    #给物品奖励
    itemInfo = []
    if item_id and item_count:
        AddEventItem(curPlayer, curMission, item_id, item_count, bind=True)
        itemInfo = [[item_id, item_count, True]]
        packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, 1)
        if 1 > packSpace:
            PlayerControl.NotifyCode(curPlayer, "UnionTask_Reward")
            PlayerControl.SendMailByKey("UnionTaskReward", [curPlayer.GetID()], itemInfo)
        else:
            AddEventItem(curPlayer, curMission, item_id, item_count, bind=True)
    GameWorld.DebugLog("任务:%d  获得经验:%d,钱=%s,物品ID=%s,物品数量=%s" 
                       % (curMission.GetMissionID(), exp, money, item_id, item_count))
    
@@ -5850,6 +5738,11 @@
    #记录副本对应的任务ID
    if FBCommon.GetRecordMapID(mapID) in [ChConfig.Def_FBMapID_ClearDevil, ChConfig.Def_FBMapID_MagicWeapon]:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqFBMissionID, curMission.GetMissionID())
        missionID = curMission.GetMissionID()
        curMissionData = FindQuestFunc(missionID)
        if curMissionData:
            missionType = curMissionData.Type
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqFBMissionType, missionType)
    return
#---------------------------------------------------------------------
@@ -6043,10 +5936,66 @@
# @remarks <Set_Horsetotallv key="" />
def DoType_Set_Horsetotallv(curPlayer, curMission, curActionNode):
    key = curActionNode.GetAttribute("key")
    questID = GameWorld.ToIntDef(curMission.GetProperty("id"), 0)
    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
    if questID != 0:
        curMission = curPlayer.FindMission(questID)
    curMission.SetProperty(key, PlayerHorse.GetHorseSumLV(curPlayer))
    return
##设置某阶达到强化等级的件数
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks <Set_Pluslvpartcnt key="" id="" classLV="" plusLV=""/>
def DoType_Set_Pluslvpartcnt(curPlayer, curMission, curActionNode):
    key = curActionNode.GetAttribute("key")
    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
    if questID != 0:
        curMission = curPlayer.FindMission(questID)
    classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classLV"), 0)
    if not classLV:
        return
    needPlusLV = GameWorld.ToIntDef(curActionNode.GetAttribute("plusLV"), 0)
    totalCnt = 0
    equipPlaceList = ChConfig.Pack_EquipPart_CanPlusStar[IPY_GameWorld.rptEquip]
    for equipPlace in equipPlaceList:
        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
        if not ipyData:
            continue
        partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, ipyData.GetGridIndex())
        if partStarLV >= needPlusLV:
            totalCnt += 1
    curMission.SetProperty(key, totalCnt)
    return
##设置强化总等级
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks <Set_Totalpluslv key="" />
def DoType_Set_Totalpluslv(curPlayer, curMission, curActionNode):
    key = curActionNode.GetAttribute("key")
    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
    if questID != 0:
        curMission = curPlayer.FindMission(questID)
    curMission.SetProperty(key, ChEquip.GetTotalPlusLV(curPlayer, False))
    return
##设置装备总星级
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks <Set_Equiptotalstar key="" />
def DoType_Set_Equiptotalstar(curPlayer, curMission, curActionNode):
#    key = curActionNode.GetAttribute("key")
#    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
#    if questID != 0:
#        curMission = curPlayer.FindMission(questID)
#    curMission.SetProperty(key, ChEquip.GetTotalEquipStars(curPlayer))
    return
#---------------------------------------------------------------------
##DoType_调度器
@@ -6421,6 +6370,18 @@
    conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
    return PlayerMagicWeapon.GetIsActiveMagicWeapon(curPlayer, mwid, conditionValue)
##判断魔族法宝通关关卡
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curConditionNode节点信息
# @return 返回值, 是否通过检查
# @remarks  <Check_Magicweapon_Passfblv" mwid="法宝ID" value="期望值" />
def ConditionType_Check_Magicweapon_Passfblv(curPlayer, curMission, curConditionNode):
    mwid = GameWorld.ToIntDef(curConditionNode.GetAttribute("mwid"), 0)
    conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
    fbpasslv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MWFBPassLevel % mwid)
    return fbpasslv >= conditionValue
#---------------------------------------------------------------------
##是否拥有足够的竞技点
# @param curPlayer 玩家实例
@@ -6553,52 +6514,6 @@
    __NPCAllowResetWorldPos(curPlayer, mapID, bornX, bornY, False)
    
    return
#---------------------------------------------------------------------
##执行玩家转生
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks  <Player_Reincarnation />
def DoType_Player_Reincarnation(curPlayer, curMission, curActionNode):
    PlayerReincarnation.DoPlayerReincarnation(curPlayer)
    return
#---------------------------------------------------------------------
##判断玩家是否转生
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curConditionNode节点信息
# @return 返回值, 是否通过检查
# @remarks  <Player_Is_Reincarnation result="期望的结果" />
def ConditionType_Player_Is_Reincarnation(curPlayer, curMission, curConditionNode):
    #<Player_Is_Reincarnation result="">  0:没转,1:有转
    result = GameWorld.ToIntDef(curConditionNode.GetAttribute("result"), 0)
    #转生等级
    curReinLV = curPlayer.GetReincarnationLv()
    if curReinLV > 0:
        return True == result
    else:
        return False == result
    return
##判断玩家转生数
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curConditionNode节点信息
# @return 返回值, 是否通过检查
# @remarks  <Player_Reincarnation result="期望的结果" />
def ConditionType_Player_Reincarnation(curPlayer, curMission, curConditionNode):
    #<Player_Reincarnation result="1"> # 玩家是否1转
    result = GameWorld.ToIntDef(curConditionNode.GetAttribute("result"), 0)
    #转生等级
    curReinLV = curPlayer.GetReincarnationLv()
    return curReinLV == result
#---------------------------------------------------------------------
##给予玩家技能
@@ -7135,12 +7050,6 @@
    realmlv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    return curPlayer.GetOfficialRank() >= realmlv
##法宝之魂是否激活
# @param None
# @return None <Mwsoul value="id"/>
def ConditionType_Mwsoul(curPlayer, curMission, curActionNode):
    soulID = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    return bool(PlayerMagicWeapon.GetIsActiveMWSoul(curPlayer, soulID))
##X级通关X层娲皇遗迹
# @param None
@@ -7158,22 +7067,47 @@
    totallv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    return PlayerHorse.GetHorseSumLV(curPlayer) >= totallv
##2阶强化防具套装件数
# @param None
# @return None <Suitplus value="cnt"/>
def ConditionType_Suitplus(curPlayer, curMission, curActionNode):
    needCnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
    groupCnt = 0 #2阶强化防具套装件数
    for groupType, equipIndexList in equipSuitTypeDict.items():
        for i in equipIndexList:
            suiteInfo = ChEquip.GetSuiteInfoByPlace(curPlayer, i)
            for suiteType, lv in suiteInfo.items():
                if lv >= 2 and int(groupType) == 1 and suiteType == 2:
                    groupCnt +=1
    return groupCnt >= needCnt
##法宝激活个数
# @param None
# @return None <Mwcnt value="cnt"/>
def ConditionType_Mwcnt(curPlayer, curMission, curActionNode):
    totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    return PlayerMagicWeapon.GetMWActiveCntTotal(curPlayer) >= totalcnt
##总强化等级
# @param None
# @return None <Totalpluslv value="cnt"/>
def ConditionType_Totalpluslv(curPlayer, curMission, curActionNode):
    totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    return ChEquip.GetTotalPlusLV(curPlayer, False) >= totalcnt
##判断某阶强化等级达到X的件数是否达到
# @param None
# @return None <Classlvpluslv classLV="" plusLV="" value="cnt"/>
def ConditionType_Classlvpluslv(curPlayer, curMission, curActionNode):
    classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classLV"), 0)
    if not classLV:
        return
    needPlusLV = GameWorld.ToIntDef(curActionNode.GetAttribute("plusLV"), 0)
    totalCnt = 0
    equipPlaceList = ChConfig.Pack_EquipPart_CanPlusStar[IPY_GameWorld.rptEquip]
    for equipPlace in equipPlaceList:
        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
        if not ipyData:
            continue
        partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, ipyData.GetGridIndex())
        if partStarLV >= needPlusLV:
            totalCnt += 1
    return totalCnt >= GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
##装备总星级
# @param None
# @return None <Equiptotalstar value="cnt"/>
def ConditionType_Equiptotalstar(curPlayer, curMission, curActionNode):
    totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    return #ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
##激活法宝,确认与成就逻辑后使用
# @param None
@@ -7181,8 +7115,6 @@
def DoType_Active_Magicweapon(curPlayer, curMission, curActionNode):
    mwID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
    PlayerMagicWeapon.DoActiveMW(curPlayer, mwID)
    PlayerMagicWeapon.NotifyMagicWeapon(curPlayer)
    return
## 人物隐身 <Visible id="0隐身1现身"/>
@@ -7194,4 +7126,27 @@
    else:
        curPlayer.SetVisible(False)
        curPlayer.SetSight(0)
    return
# 被动技能孔
def DoType_Open_Skill_Slots(curPlayer, curMission, curActionNode):
    # 开孔
    slotIndex = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    mission_1 = QuestCommon.GetCommonMission(curPlayer)
    if not mission_1:
        return
    mission_1.SetProperty("OpenSkillSlots", pow(2, slotIndex)|mission_1.GetProperty("OpenSkillSlots"))
    return
def DoType_Setfairydomain(curPlayer, curMission, curActionNode):
    ## 任务开启缥缈仙域 (做标记可寻访) <Setfairydomain/>
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState):
        #若已在寻访中则不可设置
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 2)
    PlayerFairyDomain.NotifyVisitFairyDomainInfo(curPlayer)
    return