ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
@@ -92,7 +92,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倍
@@ -1362,6 +1362,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 玩家实例
@@ -1921,7 +1937,7 @@
# @param curMission 任务实例
# @param curConditionNode 节点信息
# @return 返回值, 是否判断成功
# @remarks  <Have_Money value="期望值" check="查找对话中的货币" moneytype="货币类型 1元宝2礼券3银两" type="__Eval+替换的名字"/>
# @remarks  <Have_Money value="期望值" check="查找对话中的货币" moneytype="货币类型 1元宝2礼券3银两" type="__Eval+替换的名字" maxItem="需要物品数量" itemID="20410"/>
def ConditionType_Have_Money(curPlayer, curMission, curConditionNode):
    #格式<have_money value="" type="" moneytype=""/>
    value = curConditionNode.GetAttribute("value")
@@ -1930,8 +1946,18 @@
        conditionValue = int(value)
    elif check != "":
        conditionValue = int(QuestRunnerValue.GetNPCTalkReplaceValue(curPlayer, curMission, check))
    maxItemCnt = GameWorld.ToIntDef(curConditionNode.GetAttribute("maxItem"), 0)
    itemID = GameWorld.ToIntDef(curConditionNode.GetAttribute("itemID"), 0)
    if maxItemCnt and itemID: #未收集的道具个数乘以单价
        haveCnt = ItemControler.FindPlayerItemCountByItemID(curPlayer, IPY_GameWorld.rptItem, itemID)
        conditionValue = max(0, maxItemCnt-haveCnt)*conditionValue
    conditionType = curConditionNode.GetAttribute("type")
    moneyType = int(curConditionNode.GetAttribute("moneytype"))
    #GameWorld.Log('    conditionValue=%s,maxItemCnt=%s,itemID=%s'%(conditionValue,maxItemCnt,itemID))
    goldValue = curPlayer.GetGold()
    goldPaperValue = curPlayer.GetGoldPaper()
    silverValue = PlayerControl.GetSilver(curPlayer)
@@ -1942,6 +1968,8 @@
        return QuestRunnerValue.GetEval(conditionType, goldPaperValue, conditionValue)
    elif moneyType == IPY_GameWorld.TYPE_Price_Silver_Money:
        return QuestRunnerValue.GetEval(conditionType, silverValue, conditionValue)
    elif moneyType == ShareDefine.TYPE_Price_Gold_Paper_Money:
        return QuestRunnerValue.GetEval(conditionType, goldValue + goldPaperValue, conditionValue)
    else:
        GameWorld.Log("任务 = %s , moneytype = %s填错拉" % (curMission.GetMissionID() , moneyType) , curPlayer.GetPlayerID())
        return
@@ -2836,9 +2864,9 @@
                 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
#    if PlayerFamily.DoAddFamilyBossFoodEx(curPlayer, itemID, itemCount, ShareDefine.Def_AddFAVReason_DoFamilyMisson):
#        #仙盟兽粮自动使用
#        return
        
    #任务给予物品应该只能放入万能背包和背包
    itemControl = ItemControler.PlayerItemControler(curPlayer)
@@ -3655,7 +3683,7 @@
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks  <Del_Money form_value="是否取对话的值" value="form_value为空取" moneytype="1元宝2礼券3银两" />
# @remarks  <Del_Money form_value="是否取对话的值" value="form_value为空取" moneytype="1元宝2礼券3银两" maxItem="需要物品数量" itemID="20410"/>
def DoType_Del_Money(curPlayer, curMission, curActionNode):
    #扣钱
    #格式<del_money form_value = ""value="" moneytype=""/>
@@ -3666,23 +3694,34 @@
    else:
        value = int(curActionNode.GetAttribute("value"))    
    
    maxItemCnt = GameWorld.ToIntDef(curActionNode.GetAttribute("maxItem"), 0)
    itemID = GameWorld.ToIntDef(curActionNode.GetAttribute("itemID"), 0)
    if maxItemCnt and itemID: #未收集的道具个数乘以单价
        haveCnt = ItemControler.FindPlayerItemCountByItemID(curPlayer, IPY_GameWorld.rptItem, itemID)
        value = max(0, maxItemCnt-haveCnt)*value
    moneytype = int(curActionNode.GetAttribute("moneytype"))
    
    if moneytype not in ChConfig.Def_MoneyType_All:
        GameWorld.Log("##异常moneytype = %s填错拉" % (moneytype))
        return
#    if moneytype not in ChConfig.Def_MoneyType_All:
#        GameWorld.Log("##异常moneytype = %s填错拉" % (moneytype))
#        return
    
    curMissionID = 0
    if curMission == None:
        curMissionID = 0
    else:
        curMissionID = curMission.GetMissionID()
    #付钱
    if not PlayerControl.PayMoney(curPlayer, moneytype, value, ChConfig.Def_Cost_MissionDel, {"MissionID":curMissionID}):
    costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, moneytype, value)
    if not costMoneyList:
        GameWorld.Log("##付费异常,玩家金钱不足,任务missionID = %s" % (curMissionID) , curPlayer.GetPlayerID())
        EventShell.DoExitEvent(curPlayer)
        return
    #付钱
    for moneyType, moneyNum in costMoneyList:
        if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_MissionDel, {"MissionID":curMissionID}):
            GameWorld.Log("##付费异常,玩家金钱不足,任务missionID = %s" % (curMissionID) , curPlayer.GetPlayerID())
            EventShell.DoExitEvent(curPlayer)
            return
    
    GameWorld.Login_Interface_GoldRec(curPlayer , 0 , 0 , 'MissionID_%s_Cost' % (curMissionID), moneytype, value)
    return
@@ -5409,9 +5448,9 @@
 
    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)
@@ -5419,6 +5458,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
@@ -5447,14 +5488,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)
  
#---------------------------------------------------------------------
##给予跑环奖励
@@ -5482,6 +5523,10 @@
    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)
    
@@ -6010,6 +6055,48 @@
def DoType_Set_Mwcnt(curPlayer, curMission, curActionNode):
    key = curActionNode.GetAttribute("key")
    curMission.SetProperty(key, PlayerMagicWeapon.GetMWActiveCntTotal(curPlayer))
    return
##设置坐骑总等级
# @param curPlayer 玩家实例
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks <Set_Horsetotallv key="" />
def DoType_Set_Horsetotallv(curPlayer, curMission, curActionNode):
    key = curActionNode.GetAttribute("key")
    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_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_调度器
@@ -7105,6 +7192,59 @@
    soulID = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    return bool(PlayerMagicWeapon.GetIsActiveMWSoul(curPlayer, soulID))
##X级通关X层娲皇遗迹
# @param None
# @return None <Passqueenrelecs value="lineID" grade="grade"/>
def ConditionType_Passqueenrelecs(curPlayer, curMission, curActionNode):
    lineID = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
    grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [ChConfig.Def_FBMapID_QueenRelics])
    needGrade = GameWorld.ToIntDef(curActionNode.GetAttribute("grade"), 0)
    return grade >=needGrade
##坐骑总等级
# @param None
# @return None <Horsetotallv value="lv"/>
def ConditionType_Horsetotallv(curPlayer, curMission, curActionNode):
    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
##装备总星级
# @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
# @return None <Active_Magicweapon id="法宝ID"/>
@@ -7124,4 +7264,19 @@
    else:
        curPlayer.SetVisible(False)
        curPlayer.SetSight(0)
    return
    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