From 92422444e4113c2b525a74b5b3cc29ec0c9e309d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 14 五月 2019 14:42:53 +0800
Subject: [PATCH] 6778 【后端】【2.0】任务接口开发(灵根品级相关)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py |  563 +++++++++++++++++++++++++++----------------------------
 1 files changed, 276 insertions(+), 287 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
index fd8f148..947d3a0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
+++ b/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,21 +48,20 @@
 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 Operate_EquipStone
 import PlayerWeekParty
+import PlayerFairyDomain
+import PlayerActLogin
 import PlayerHorse
 import FBCommon
-import PyGameData
+import NPCCommon
 
 import math
 import time
@@ -1418,15 +1416,17 @@
 def DoType_Add_Player_Xp(curPlayer, curMission, curActionNode):
     #增加玩家相关值<Add_Player_XP value="玩家xp值"/>
     
-    xpValue = curActionNode.GetAttribute("value")
-    
-    if xpValue != "":
-        #设置玩家xp值
-        openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
-        curXp = min(int(xpValue), maxXPValue)
-        curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curXp)
-        curPlayer.SetXP(curXp)
-        
+    #===========================================================================
+    # xpValue = curActionNode.GetAttribute("value")
+    # 
+    # if xpValue != "":
+    #    #设置玩家xp值
+    #    openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
+    #    curXp = min(int(xpValue), maxXPValue)
+    #    curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curXp)
+    #    curPlayer.SetXP(curXp)
+    #    
+    #===========================================================================
     return
 
 #---------------------------------------------------------------------
@@ -2501,23 +2501,7 @@
 # @return 返回值, 是否判断成功
 # @remarks <QualityEquipCnt quality="装备品质" value="期望数量"/> 
 def ConditionType_Qualityequipcnt(curPlayer, curMission, curConditionNode):
-    conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
-    quality = GameWorld.ToIntDef(curConditionNode.GetAttribute("quality"), 0)
-    conditionType = curConditionNode.GetAttribute("type")
-    curQualityEquipCnt = 0 #达到该品质的装备数量,品质高的兼容品质低的
-    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-    for equipIndex in range(0, equipPack.GetCount()):
-        #备用装备栏不处理
-        if equipIndex not in ChConfig.Type_Equip_CanTake :
-            continue
-        curEquip = equipPack.GetAt(equipIndex)
-        if curEquip.IsEmpty():
-            continue
-        if curEquip.GetItemQuality() < quality:
-            continue
-        curQualityEquipCnt += 1
-    
-    return QuestRunnerValue.GetEval(conditionType, curQualityEquipCnt, conditionValue)
+    return ChEquip.GetEquipOrangeCount(curPlayer)
 
 ##强化 X件装备强化到X级
 # @param curPlayer 玩家实例
@@ -2533,7 +2517,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
     
     
@@ -2544,7 +2528,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)))
@@ -2572,6 +2556,18 @@
     maxPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV) # 历史最大过关数
     return QuestRunnerValue.GetEval(conditionType, maxPassLV, conditionValue)
 
+##通关天星塔第X层
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curConditionNode 节点信息
+# @return 返回值, 是否判断成功
+# @remarks <Check_Skytower type="类型" value="值"/> 
+def ConditionType_Check_Skytower(curPlayer, curMission, curConditionNode):
+    conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
+    conditionType = curConditionNode.GetAttribute("type")
+    maxPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor) # 历史最大过关数
+    return QuestRunnerValue.GetEval(conditionType, maxPassLV, conditionValue)
+
 def ConditionType_Get_Player_Coin(curPlayer, curMission, curConditionNode):
     # 判断玩家已充值点券数
     # <Get_Player_Coin type="great" value="0"/> 充值点券大于0代表已经首充过
@@ -2591,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)
 
 #---------------------------------------------------------------------
 ##执行 扣除玩家镖车押金
@@ -2838,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
@@ -2865,7 +2825,7 @@
                  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=[]):
+                 equipIndex= -1, isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[], isAuctionItem=False):
 #    if PlayerFamily.DoAddFamilyBossFoodEx(curPlayer, itemID, itemCount, ShareDefine.Def_AddFAVReason_DoFamilyMisson):
 #        #仙盟兽粮自动使用
 #        return
@@ -2874,13 +2834,13 @@
     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
     
@@ -2899,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}]):
@@ -2929,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
 
@@ -3733,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="[卓越属性列表]" />  
@@ -3754,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)
@@ -3785,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)
 
 
 #---------------------------------------------------------------------
@@ -3824,8 +3784,8 @@
 # @param curMission 任务实例
 # @param curActionNode节点信息
 # @return 返回值无意义
-# @remarks  <Drop_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定" 
-#         suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运"
+# @remarks  <Drop_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定" isAuctionItem="是否拍品"
+#         suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运" isFakeDrop="是否假掉落"
 #        skillBoostEff="[技能效果增强索引, 值]", holeCount="孔数", isGreat="1", effIndex="1" , dropDist="掉落范围默认3"
 #        aroundPlayer="1" baseAttrRate="可强化的装备基础属性随机加强比例默认10000" greatAttr="[卓越属性列表]" />  
 def DoType_Drop_Item(curPlayer, curMission, curActionNode):
@@ -3844,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)
@@ -3869,14 +3831,21 @@
     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":
+    isFakeDrop = GameWorld.ToIntDef(curActionNode.GetAttribute("isFakeDrop"), 0)
+    if isFakeDrop:#假掉落表现
+        dropItemDataStr = ChItem.GetMapDropItemDataStr(curItem)
+        #通知客户端
+        NPCCommon.SendVirtualItemDrop(curPlayer, curItemID, 0, 0, dropItemDataStr)
+        ItemControler.GivePlayerItemOrMail(curPlayer, [[curItemID, count, isAuctionItem]])
+        curItem.Clear()
+        return
+    if curActionNode.GetAttribute("aroundPlayer") == "1" or not curNPC:
         posX, posY = curPlayer.GetPosX(), curPlayer.GetPosY()
     else:
         posX, posY = curNPC.GetPosX(), curNPC.GetPosY()
@@ -4365,61 +4334,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
 
 #---------------------------------------------------------------------
 ##删除物品
@@ -5239,16 +5155,20 @@
     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
+    EventShell.EventRespons_AroundMission(curPlayer, missionType)
     return
 
 
@@ -5291,66 +5211,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
 
@@ -5408,7 +5268,6 @@
         randStarList = eval(ReadChConfig.GetChConfig('RunAround_Star'))
         aroundStar = GameWorld.GetResultByRandomList(randStarList, 1)
         
-        #vipStar = PlayerCostVIP.GetRoundStar(curPlayer)
         vipStar = 0
         if vipStar > 0:
             aroundStar = vipStar
@@ -6092,6 +5951,34 @@
     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 任务实例
@@ -6113,11 +6000,11 @@
 # @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))
+#    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_调度器
@@ -6492,6 +6379,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 玩家实例
@@ -6624,52 +6523,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
-
 
 #---------------------------------------------------------------------
 ##给予玩家技能
@@ -7206,12 +7059,22 @@
     realmlv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
     return curPlayer.GetOfficialRank() >= realmlv
 
-##法宝之魂是否激活
+##灵根品级是否达到X级
 # @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))
+# @return None <Linggenqualitylv attrid="灵根ID" value="期望等级"/>
+def ConditionType_Linggenqualitylv(curPlayer, curMission, curActionNode):
+    attrID = GameWorld.ToIntDef(curActionNode.GetAttribute("attrid"), 0)
+    qualityLV = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    funcDict = {ShareDefine.Def_Effect_Metal:lambda curObj:PlayerControl.GetMetalQualityLV(curObj),
+                ShareDefine.Def_Effect_Wood:lambda curObj:PlayerControl.GetWoodQualityLV(curObj),
+                ShareDefine.Def_Effect_Water:lambda curObj:PlayerControl.GetWaterQualityLV(curObj),
+                ShareDefine.Def_Effect_Fire:lambda curObj:PlayerControl.GetFireQualityLV(curObj),
+                ShareDefine.Def_Effect_Earth:lambda curObj:PlayerControl.GetEarthQualityLV(curObj),
+                }
+    curQualityLV = 0
+    if attrID in funcDict:
+        curQualityLV = funcDict[attrID](curPlayer)
+    return curQualityLV >= qualityLV
 
 ##X级通关X层娲皇遗迹
 # @param None
@@ -7229,21 +7092,89 @@
     totallv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
     return PlayerHorse.GetHorseSumLV(curPlayer) >= totallv
 
-##2阶强化防具套装件数
+##某主技能对应专精技能达到激活X等级的数量是否达到
 # @param None
-# @return None <Suitplus value="cnt"/>
-def ConditionType_Suitplus(curPlayer, curMission, curActionNode):
-    needCnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+# @return None <Elementskillcnt value="cnt" mainskill="[]" activelv=""/>
+def ConditionType_Elementskillcnt(curPlayer, curMission, curActionNode):
+    cnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    mainskill = curActionNode.GetAttribute("mainskill")
+    mainSkillIDList = eval(mainskill) if mainskill else []
+    activeLV = GameWorld.ToIntDef(curActionNode.GetAttribute("activelv"), 1)
+    return SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV) >= cnt
+
+##设置已选择的专精技能数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Elementskillcnt key="" mainskill="[]" activelv=""/>
+def DoType_Set_Elementskillcnt(curPlayer, curMission, curActionNode):
+    key = curActionNode.GetAttribute("key")
+    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+    mainskill = curActionNode.GetAttribute("mainskill")
+    mainSkillIDList = eval(mainskill) if mainskill else []
+    activeLV = GameWorld.ToIntDef(curActionNode.GetAttribute("activelv"), 1)
+    if questID != 0:
+        curMission = curPlayer.FindMission(questID)
+    curMission.SetProperty(key, SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV))
+    return
+
+##设置符合条件的已穿基础装备数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Baseequipcnt key="" classlv="" color="" suite="[suiteID,..]"/>
+def DoType_Set_Baseequipcnt(curPlayer, curMission, curActionNode):
+    classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classlv"), 0)
+    color = GameWorld.ToIntDef(curActionNode.GetAttribute("color"), 0)
+    suite = curActionNode.GetAttribute("suite")
+    suiteIDList = eval(suite) if suite else []
+
+    haveCnt = __GetBaseequipcnt(curPlayer, classLV, color, suiteIDList)
     
-    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
+    key = curActionNode.GetAttribute("key")
+    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+    if questID != 0:
+        curMission = curPlayer.FindMission(questID)
+    curMission.SetProperty(key, haveCnt)
+    return
+def __GetBaseequipcnt(curPlayer, classLV, color, suiteIDList, needCnt=0):
+    #classLV 为0代表任意阶
+    haveCnt = 0
+    equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
+    classlVList = [classLV] if classLV else range(1, equipMaxClasslv+1)
+    
+    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+    for place in ChConfig.EquipPlace_Base:
+        for classlv in classlVList:
+            ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, place)
+            if not ipyData:
+                continue
+            gridIndex = ipyData.GetGridIndex()
+            curEquip = equipPack.GetAt(gridIndex)
+            if not ItemCommon.CheckItemCanUse(curEquip):
+                continue
+            if curEquip.GetItemColor() < color:
+                continue
+            if suiteIDList and curEquip.GetSuiteID() not in suiteIDList:
+                continue
+            haveCnt += 1
+            if needCnt and haveCnt >= needCnt:
+                break
+    return haveCnt
+    
+##判断符合条件的已穿基础装备数量
+# @param None
+# @return None <Baseequipcnt cnt="cnt" classlv="" color="" suite="[suiteID,..]"/>
+def ConditionType_Baseequipcnt(curPlayer, curMission, curActionNode):
+    totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("cnt"), 0)
+    classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classlv"), 0)
+    color = GameWorld.ToIntDef(curActionNode.GetAttribute("color"), 0)
+    suite = curActionNode.GetAttribute("suite")
+    suiteIDList = eval(suite) if suite else []
+    haveCnt = __GetBaseequipcnt(curPlayer, classLV, color, suiteIDList, totalcnt)
+    return haveCnt >= totalcnt
 
 ##法宝激活个数
 # @param None
@@ -7259,6 +7190,25 @@
     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"/>
@@ -7266,14 +7216,44 @@
     totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
     return ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
 
+##装备宝石总等级
+# @param None
+# @return None <Equiptotalstone value="cnt"/>
+def ConditionType_Equiptotalstone(curPlayer, curMission, curActionNode):
+    totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    return Operate_EquipStone.GetTotalStoneLV(curPlayer) >= totalcnt
+
+##技能总等级
+# @param None
+# @return None <Totalskilllv value="" funcType="" skilllv=""/>
+def ConditionType_Totalskilllv(curPlayer, curMission, curActionNode):
+    totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    funcType = GameWorld.ToIntDef(curActionNode.GetAttribute("funcType"), 0)
+    skilllv = GameWorld.ToIntDef(curActionNode.GetAttribute("skilllv"), 0)
+    return SkillShell.GetSkillCntByFunc(curPlayer, funcType, skilllv) >= totalcnt
+
+##设置已达到X等级的技能数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Skillcnt key="" funcType="" skilllv=""/>
+def DoType_Set_Skillcnt(curPlayer, curMission, curActionNode):
+    key = curActionNode.GetAttribute("key")
+    funcType = GameWorld.ToIntDef(curActionNode.GetAttribute("funcType"), 0)
+    skilllv = GameWorld.ToIntDef(curActionNode.GetAttribute("skilllv"), 0)
+    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+    if questID != 0:
+        curMission = curPlayer.FindMission(questID)
+    curMission.SetProperty(key, SkillShell.GetSkillCntByFunc(curPlayer, funcType, skilllv))
+    return
+
 ##激活法宝,确认与成就逻辑后使用
 # @param None
 # @return None <Active_Magicweapon id="法宝ID"/>
 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现身"/>
@@ -7301,3 +7281,12 @@
     return
 
 
+def DoType_Setfairydomain(curPlayer, curMission, curActionNode):
+    ## 任务开启缥缈仙域 (做标记可寻访) <Setfairydomain/>
+    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState):
+        #若已在寻访中则先结束寻访
+        PlayerFairyDomain.EndFairyDomain(curPlayer)
+        
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 2)
+    PlayerFairyDomain.NotifyVisitFairyDomainInfo(curPlayer)
+    return
\ No newline at end of file

--
Gitblit v1.8.0