From 3d0d0fa39bc4e24094de982640720a49f4cf080b Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 22 六月 2019 16:28:34 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能 - 修复盾值

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py |  386 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 330 insertions(+), 56 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 52791c5..5847a24 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
@@ -55,11 +55,15 @@
 import PlayerBossReborn
 import PlayerFairyCeremony
 import PlayerNewFairyCeremony
+import Operate_EquipStone
+import OpenServerCampaign
 import PlayerWeekParty
 import PlayerFairyDomain
+import GameFuncComm
 import PlayerActLogin
 import PlayerHorse
 import FBCommon
+import NPCCommon
 
 import math
 import time
@@ -2499,23 +2503,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 ShareDefine.RoleEquipType:
-            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 玩家实例
@@ -2568,6 +2556,18 @@
     conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
     conditionType = curConditionNode.GetAttribute("type")
     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):
@@ -3787,7 +3787,7 @@
 # @param curActionNode节点信息
 # @return 返回值无意义
 # @remarks  <Drop_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定" isAuctionItem="是否拍品"
-#         suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运"
+#         suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运" isFakeDrop="是否假掉落"
 #        skillBoostEff="[技能效果增强索引, 值]", holeCount="孔数", isGreat="1", effIndex="1" , dropDist="掉落范围默认3"
 #        aroundPlayer="1" baseAttrRate="可强化的装备基础属性随机加强比例默认10000" greatAttr="[卓越属性列表]" />  
 def DoType_Drop_Item(curPlayer, curMission, curActionNode):
@@ -3839,7 +3839,14 @@
     if not curItem:
         GameWorld.Log('###创建地上物品异常,无此ID物品 = %s' % (curItemID))
         return
-    
+    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:
@@ -4327,7 +4334,8 @@
     value = int(curActionNode.GetAttribute("value"))
     curPlayerFreePoint = curPlayer.GetFreePoint()
     curPlayer.SetFreePoint(curPlayerFreePoint + value)
-    
+    # 更新开服活动灵根数据
+    OpenServerCampaign.UpdOpenServerCampaignLingGenData(curPlayer)
     DataRecordPack.DR_Freepoint(curPlayer, "Event", value, {"MissionID":curMission.GetMissionID()})
     return
 
@@ -5006,7 +5014,8 @@
     QuestCommon.SetPlayerMissionState(curPlayer, curMission, -1)
     curMission.SetDescriptionIndex(len(curMissionData.QuestDescriptionList) - 1)    
     EventShell.NotifyOneMission(curPlayer, curMission, isNotifyAll=False)
-    
+    # 完成任务事件 (配合前端,在通知任务状态后再触发)
+    GameFuncComm.DoFuncOpenLogic(curPlayer, [missionID])
     #删除这个任务
     #第一个任务决定是否要触发OnEnter事件, 所以不能删除
     if missionID != 1 and diff_event == 0:
@@ -5152,12 +5161,12 @@
         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:
+        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RunTask, addCnt)
         PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyRunMission, addCnt)
         PlayerFamily.AddFamilyActivity(curPlayer, ShareDefine.FamilyActive_Task, addCnt)
     else:
@@ -5379,18 +5388,18 @@
     expPoint = curMission.GetProperty(Def_Run_Around_Reward_ExpPoint)
     exp = expPoint * ChConfig.Def_PerPointValue + exp
     money = curMission.GetProperty(Def_Run_Around_Reward_Money)
-    
+    moneyDict = {}
     if exp != 0:
         playerControl.AddExp(exp)
         #PlayerControl.NotifyCode(curPlayer, 'GeRen_lhs_0', [exp])
-    
-    addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Run"}
-    PlayerControl.GiveMoney(curPlayer, runAroundReward.MoneyType, money, ChConfig.Def_GiveMoney_Mission, addDataDict, False)
-    
+    if money:
+        addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Run"}
+        PlayerControl.GiveMoney(curPlayer, runAroundReward.MoneyType, money, ChConfig.Def_GiveMoney_Mission, addDataDict, False)
+        moneyDict[runAroundReward.MoneyType] = money
     familyHornor = curMission.GetProperty(Def_Run_Around_Reward_FamilyHornor)
     if familyHornor: 
         PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, familyHornor, True, ShareDefine.Def_AddFAVReason_DoFamilyMisson, True)
-
+        moneyDict[ShareDefine.TYPE_Price_Family_Contribution] = familyHornor
     item_id = curMission.GetProperty(Def_Day_Event_Reward_Item_Id)
     item_count = curMission.GetProperty(Def_Day_Event_Reward_Item_Count)
     
@@ -5408,7 +5417,7 @@
     GameWorld.DebugLog("任务:%d  获得经验:%d,钱=%s,物品ID=%s,物品数量=%s" 
                        % (curMission.GetMissionID(), exp, money, item_id, item_count))
     
-    FBLogic.DoFB_OnFinishRunAroundTask(curPlayer, curMissionID, exp, {runAroundReward.MoneyType:money}, itemInfo)
+    FBLogic.DoFB_OnFinishRunAroundTask(curPlayer, curMissionID, exp, moneyDict, itemInfo)
     
     #触发OSS记录
     if GameWorld.IsMissonDR(curPlayer):
@@ -5958,18 +5967,20 @@
     if questID != 0:
         curMission = curPlayer.FindMission(questID)
     classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classLV"), 0)
-    if not classLV:
-        return
+    equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
+    classlVList = [classLV] if classLV else range(1, equipMaxClasslv+1)
+
     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
+        for classLV in classlVList:
+            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
@@ -7054,6 +7065,61 @@
     realmlv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
     return curPlayer.GetOfficialRank() >= realmlv
 
+##灵根品级是否达到X级
+# @param None
+# @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
+# @return None <Linggenqualitylvcnt qualitylv="品级" value="条数"/>
+def ConditionType_Linggenqualitylvcnt(curPlayer, curMission, curActionNode):
+    qualityLV = GameWorld.ToIntDef(curActionNode.GetAttribute("qualitylv"), 0)
+    cnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    return GetLinggenQualitylvCnt(curPlayer, qualityLV) >= cnt
+
+##设置达到X品灵根数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Linggenqualitylvcnt key="" qualitylv="品级"/>
+def DoType_Set_Linggenqualitylvcnt(curPlayer, curMission, curActionNode):
+    key = curActionNode.GetAttribute("key")
+    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+    qualityLV = GameWorld.ToIntDef(curActionNode.GetAttribute("qualitylv"), 0)
+    if questID != 0:
+        curMission = curPlayer.FindMission(questID)
+    curMission.SetProperty(key, GetLinggenQualitylvCnt(curPlayer, qualityLV))
+    return
+
+def GetLinggenQualitylvCnt(curPlayer, qualityLV):
+    # 获取达到X品的灵根数量
+    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),
+                }
+    curCnt = 0
+    for attrID, func in funcDict.items():
+        if func(curPlayer) >= qualityLV:
+            curCnt += 1
+    return curCnt
+
 
 ##X级通关X层娲皇遗迹
 # @param None
@@ -7071,26 +7137,91 @@
     totallv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
     return PlayerHorse.GetHorseSumLV(curPlayer) >= totallv
 
-##已选择的专精技能数量是否达到
+##某主技能对应专精技能达到激活X等级的数量是否达到
 # @param None
-# @return None <Elementskillcnt value="cnt"/>
+# @return None <Elementskillcnt value="cnt" mainskill="[]" activelv="" elementtype="专精类型"/>
 def ConditionType_Elementskillcnt(curPlayer, curMission, curActionNode):
     cnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
-    return SkillShell.GetElementSkillCnt(curPlayer) >= cnt
+    mainskill = curActionNode.GetAttribute("mainskill")
+    mainSkillIDList = eval(mainskill) if mainskill else []
+    activeLV = GameWorld.ToIntDef(curActionNode.GetAttribute("activelv"), 1)
+    elementType = GameWorld.ToIntDef(curActionNode.GetAttribute("elementtype"), 0)
+    return SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV, elementType) >= cnt
 
 ##设置已选择的专精技能数量
 # @param curPlayer 玩家实例
 # @param curMission 任务实例
 # @param curActionNode节点信息
 # @return 返回值无意义
-# @remarks <Set_Elementskillcnt key="" />
+# @remarks <Set_Elementskillcnt key="" mainskill="[]" activelv="" elementtype="专精类型"/>
 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)
+    elementType = GameWorld.ToIntDef(curActionNode.GetAttribute("elementtype"), 0)
+    curMission.SetProperty(key, SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV, elementType))
+    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)
+    
     key = curActionNode.GetAttribute("key")
     questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
     if questID != 0:
         curMission = curPlayer.FindMission(questID)
-    curMission.SetProperty(key, SkillShell.GetElementSkillCnt(curPlayer))
+    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
@@ -7099,6 +7230,12 @@
     totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
     return PlayerMagicWeapon.GetMWActiveCntTotal(curPlayer) >= totalcnt
 
+##总强化进化等级
+# @param None
+# @return None <Totalplusevolvelv value="cnt"/>
+def ConditionType_Totalplusevolvelv(curPlayer, curMission, curActionNode):
+    totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    return ChEquip.GetTotalPlusEvolveLV(curPlayer) >= totalcnt
 ##总强化等级
 # @param None
 # @return None <Totalpluslv value="cnt"/>
@@ -7111,18 +7248,18 @@
 # @return None <Classlvpluslv classLV="" plusLV="" value="cnt"/>
 def ConditionType_Classlvpluslv(curPlayer, curMission, curActionNode):
     classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classLV"), 0)
-    if not classLV:
-        return
+    classLVList = [classLV] if classLV else xrange(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1)
     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
+        for classLV in classLVList:
+            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)
 
 ##装备总星级
@@ -7130,7 +7267,62 @@
 # @return None <Equiptotalstar value="cnt"/>
 def ConditionType_Equiptotalstar(curPlayer, curMission, curActionNode):
     totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
-    return #ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
+    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
+
+##已镶嵌X等级宝石数量
+# @param None
+# @return None <Equipstonecnt value="cnt" stoneLV=""/>
+def ConditionType_Equipstonecnt(curPlayer, curMission, curActionNode):
+    totalCnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    stoneLV = GameWorld.ToIntDef(curActionNode.GetAttribute("stoneLV"), 0)
+    return Operate_EquipStone.GetStoneCntByLV(curPlayer, stoneLV) >= totalCnt
+
+##设置已镶嵌X等级宝石数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Equipstonecnt key="" stoneLV="宝石等级"/>
+def DoType_Set_Equipstonecnt(curPlayer, curMission, curActionNode):
+    key = curActionNode.GetAttribute("key")
+    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+    stoneLV = GameWorld.ToIntDef(curActionNode.GetAttribute("stoneLV"), 1)
+    if questID != 0:
+        curMission = curPlayer.FindMission(questID)
+    curMission.SetProperty(key, Operate_EquipStone.GetStoneCntByLV(curPlayer, stoneLV))
+    return
+
+##技能总等级
+# @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
@@ -7144,11 +7336,9 @@
 def DoType_Visible(curPlayer, curMission, curActionNode):
     visible = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
     if visible:
-        curPlayer.SetVisible(True)
-        curPlayer.SetSight(ChConfig.Def_PlayerSight_Default)
+        PlayerControl.SetPlayerSightLevel(curPlayer, 0)
     else:
-        curPlayer.SetVisible(False)
-        curPlayer.SetSight(0)
+        PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
     return
 
 
@@ -7166,6 +7356,7 @@
 
 
 def DoType_Setfairydomain(curPlayer, curMission, curActionNode):
+    GameWorld.DebugLog("DoType_Setfairydomain", curPlayer.GetID())
     ## 任务开启缥缈仙域 (做标记可寻访) <Setfairydomain/>
     if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState):
         #若已在寻访中则先结束寻访
@@ -7173,4 +7364,87 @@
         
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 2)
     PlayerFairyDomain.NotifyVisitFairyDomainInfo(curPlayer)
-    return
\ No newline at end of file
+    return
+
+##神兵等级判断
+# @param None
+# @return None <Godweaponlv value="lv" weapontype=""/>
+def ConditionType_Godweaponlv(curPlayer, curMission, curActionNode):
+    lv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    weapontype = GameWorld.ToIntDef(curActionNode.GetAttribute("weapontype"), 0)
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % weapontype) >= lv
+
+##设置今日活跃度
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Dayactivity key=""/>
+def DoType_Set_Dayactivity(curPlayer, curMission, curActionNode):
+    key = curActionNode.GetAttribute("key")
+    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+    if questID != 0:
+        curMission = curPlayer.FindMission(questID)
+    curMission.SetProperty(key, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Activity_TotalPoint, 0))
+    return
+
+##今日活跃度判断
+# @param None
+# @return None <Check_Dayactivity value="活跃度"/>
+def ConditionType_Check_Dayactivity(curPlayer, curMission, curActionNode):
+    value = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Activity_TotalPoint, 0) >= value
+
+
+##设置历史活跃度
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Historyactivity key=""/>
+def DoType_Set_Historyactivity(curPlayer, curMission, curActionNode):
+    key = curActionNode.GetAttribute("key")
+    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+    if questID != 0:
+        curMission = curPlayer.FindMission(questID)
+    curMission.SetProperty(key, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityHistoryPoint, 0))
+    return
+
+##历史活跃度判断
+# @param None
+# @return None <Check_Historyactivity value="活跃度"/>
+def ConditionType_Check_Historyactivity(curPlayer, curMission, curActionNode):
+    value = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityHistoryPoint, 0) >= value
+
+##设置仙宝寻主领奖进度
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Xbxz key="" mwid="法宝ID"/>
+def DoType_Set_Xbxz(curPlayer, curMission, curActionNode):
+    key = curActionNode.GetAttribute("key")
+    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+    mwID = GameWorld.ToIntDef(curActionNode.GetAttribute("mwid"), 0)
+    if questID != 0:
+        curMission = curPlayer.FindMission(questID)
+    curMission.SetProperty(key, PlayerMagicWeapon.GetXBXZAwardProgress(curPlayer, mwID))
+    return
+
+##仙宝寻主进度判断
+# @param None
+# @return None <Check_Xbxz value="数量" mwid="法宝ID"/>
+def ConditionType_Check_Xbxz(curPlayer, curMission, curActionNode):
+    value = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    mwID = GameWorld.ToIntDef(curActionNode.GetAttribute("mwid"), 0)
+    return PlayerMagicWeapon.GetXBXZAwardProgress(curPlayer, mwID) >= value
+
+##商城表商品购买记录判断(只适用购买次数不重置的)
+# @param None
+# @return None <Check_Buyshopitem value="数量" index="商城表唯一ID"/>
+def ConditionType_Check_Buyshopitem(curPlayer, curMission, curActionNode):
+    value = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+    itemIndex = GameWorld.ToIntDef(curActionNode.GetAttribute("index"), 0)
+    curDayBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShopItemDayBuyCnt % itemIndex)
+    return curDayBuyCnt >= value
\ No newline at end of file

--
Gitblit v1.8.0