From 02f8c83ffab335d63d18bdde30e61bd2233f1f87 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 09 五月 2019 16:58:57 +0800
Subject: [PATCH] 6501 【后端】【2.0】仙盟任务(增加多个任务接口)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py                  |   66 +++++++++++++++------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py                            |   33 ++++++-----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py |    6 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py                    |    7 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py                            |    9 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py                    |   11 +++
 6 files changed, 86 insertions(+), 46 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
index 44eefe3..52e704f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -1911,9 +1911,9 @@
     RunQuestEvent(curPlayer, "thinkfabao", 'thinkfabao', Def_RunQuestType_Normal)
     return
 
-def EventRespons_ElementSkill(curPlayer):
-    #选择五行专精
-    RunQuestEvent(curPlayer, "elementskill", 'elementskill', Def_RunQuestType_Normal)
+def EventRespons_ElementSkill(curPlayer, mainSkillID, updSelectSkillLV):
+    #激活五行专精 主技能ID_激活等级.xml
+    RunQuestEvent(curPlayer, "elementskill", '%s_%s'%(mainSkillID, updSelectSkillLV), Def_RunQuestType_Normal)
     return
 
 def EventRespons_EquipStarUp(curPlayer):
@@ -1931,9 +1931,10 @@
     RunQuestEvent(curPlayer, "equipitem", 'equipitem', Def_RunQuestType_Normal)
     return
 
-def EventRespons_SkillUp(curPlayer, FuncType):
+def EventRespons_SkillUp(curPlayer, FuncType, skillLV):
     #升级技能
     RunQuestEvent(curPlayer, "skillup", FuncType, Def_RunQuestType_Normal)
+    RunQuestEvent(curPlayer, "skillup", '%s_%s' % (FuncType, skillLV), Def_RunQuestType_Normal)
     return
 
 #---------------------------------------------------------------------
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 8201199..8de16f7 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
@@ -7092,25 +7092,31 @@
     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=""/>
 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)
+    return SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV) >= cnt
 
 ##设置已选择的专精技能数量
 # @param curPlayer 玩家实例
 # @param curMission 任务实例
 # @param curActionNode节点信息
 # @return 返回值无意义
-# @remarks <Set_Elementskillcnt key="" />
+# @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))
+    curMission.SetProperty(key, SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV))
     return
 
 ##设置符合条件的已穿基础装备数量
@@ -7134,21 +7140,26 @@
     curMission.SetProperty(key, haveCnt)
     return
 def __GetBaseequipcnt(curPlayer, classLV, color, suiteIDList):
+    #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:
-        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
-        if not ipyData:
-            break
-        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
+        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
     return haveCnt
     
 ##判断符合条件的已穿基础装备数量
@@ -7212,11 +7223,28 @@
 
 ##技能总等级
 # @param None
-# @return None <Totalskilllv value="" funcType=""/>
+# @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)
-    return SkillShell.GetAllSkillLV(curPlayer, funcType) >= totalcnt
+    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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
index 8462085..c063bfe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
@@ -63,7 +63,7 @@
 def GetTowerIpyData(floor):
     return IpyGameDataPY.GetIpyGameData('SkyTower', floor)
 
-def OnFBPlayerLogin(curPlayer):
+def OnFBPlayerOnLogin(curPlayer):
     SyncSkyTowerInfo(curPlayer)
     return
 
@@ -73,7 +73,7 @@
 def SyncSkyTowerInfo(curPlayer):
     ttInfo = ChPyNetSendPack.tagMCSkyTowerInfo()
     ttInfo.Clear()
-    ttInfo.floorID = __GetSkyTowerCurFloor(curPlayer)
+    ttInfo.Floor = __GetSkyTowerCurFloor(curPlayer)
     NetPackCommon.SendFakePack(curPlayer, ttInfo)
     return
 
@@ -325,8 +325,6 @@
     
     SyncSkyTowerInfo(curPlayer) # 同步最新关卡信息
     __SetFBToFreeTime(tick)
-    #每日任务
-    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Tower)
     return
 
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
index 2bcdc4d..496f886 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
@@ -449,4 +449,13 @@
     ipyData = IpyGameDataPY.GetIpyGameDataByCondition('FairyDomainAppoint', {'Cnt':visitCnt, 'EventID':fdEventID}, False, False)
     if not ipyData:
         return
-    return ipyData.GetAward()
+    job = curPlayer.GetJob()
+    itemList = []
+    for itemInfo in ipyData.GetAward():
+        if type(itemInfo[0]) == dict:
+            if job not in itemInfo[0]:
+                continue
+            itemList.append([itemInfo[0][job], itemInfo[1], itemInfo[2]])
+        else:
+            itemList.append(itemInfo)
+    return itemList
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
index b99a6f8..2af2986 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
@@ -192,7 +192,9 @@
             notNotifyItemIDList = IpyGameDataPY.GetFuncEvalCfg("AlchemyNotify", 3)
             if alchemyItemID not in notNotifyItemIDList and (alchemyItemID in needNotifyItemIDList or makeItemData.GetItemColor() >= notifyColor):
                 PlayerControl.WorldNotify(0, "AchemyGreatSuccess", [curPlayer.GetPlayerName(), alchemyItemID])
-
+            
+            #任务
+            EventShell.EventRespons_RefineItem(curPlayer, alchemyIpyData.GetNeedAlchemyLV())
         #重置
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyItemID % alchemType, 0)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyStartTime % alchemyID, 0)
@@ -207,8 +209,7 @@
         PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_RefineItem, 1)
         #完成1次X品质物品炼丹成就
         #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_RefineStoveColor, 1, [makeItemData.GetItemColor()])
-        #任务
-        #EventShell.EventRespons_RefineItem(curPlayer, alchemyIpyData.GetNeedAlchemyLV())
+        
         
         PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, 1)
         PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, 1)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index 5478a20..de1bdf3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -1866,7 +1866,7 @@
     #获得技能等级
     curSkillLV = curSkill.GetSkillLV()
     DataRecordPack.DR_LearnORUPSkill(curPlayer, curSkillID, curSkillLV)
-    EventShell.EventRespons_SkillUp(curPlayer, curSkill.GetFuncType())
+    EventShell.EventRespons_SkillUp(curPlayer, curSkill.GetFuncType(), curSkillLV)
     GameWorld.Log("升级技能名 = %s 成功, 当前等级 = %s"%(curSkill.GetSkillName(), curSkill.GetSkillLV()), curPlayer.GetPlayerID())
     return True
 
@@ -2095,6 +2095,7 @@
     isChangeSkill = False #是否变更生效的技能
     if updSelectSkillLV != activeSkillLV:
         #可升级则激活升一级
+        EventShell.EventRespons_ElementSkill(curPlayer, mainSkillID, updSelectSkillLV)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % selectSkillID, updSelectSkillLV)
         if curElementSkillID == selectSkillID:
             #正在使用的专精技能,则立即生效
@@ -2113,8 +2114,7 @@
             if curElementSkillID != selectSkillID:
                 #原技能删除
                 skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
-        else:
-            EventShell.EventRespons_ElementSkill(curPlayer)
+        
     
         # 重刷被动技能
         PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer)
@@ -2201,20 +2201,23 @@
     NotifyElementSkillInfo(curPlayer)
     return
 
-def GetElementSkillCnt(curPlayer):
+def GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV):
     ##获取已选择的专精技能数量
     cnt = 0
     skillManager = curPlayer.GetSkillManager()
     for i in xrange(skillManager.GetSkillCount()):
         hasSkill = skillManager.GetSkillByIndex(i)
         hasSkillID = hasSkill.GetSkillTypeID()
-        ipyData = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, False, False)
-        if not ipyData:
+        if hasSkillID not in mainSkillIDList:
             continue
-        curElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % hasSkillID)
-        if not curElementSkillID:
+        ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, True, False)
+        if not ipyDataList:
             continue
-        cnt +=1
+        for ipyData in ipyDataList:
+            elementSkillID = ipyData.GetElementSkillID()
+            curActiveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementLV % elementSkillID)
+            if curActiveLV >= activeLV:
+                cnt += 1
     return cnt
 
 def __InitElementSkillInfo():
@@ -3770,11 +3773,11 @@
 
 
 
-## 获取技能总等级
+## 获取某类型技能达到X等级的个数
 #  @param curPlayer
 #  @return allSkillLV:总技能等级
-def GetAllSkillLV(curPlayer, funcType):
-    allSkillLV = 0
+def GetSkillCntByFunc(curPlayer, funcType, skilllv=0):
+    allSkillCnt = 0
     skillManager = curPlayer.GetSkillManager()
     for i in xrange(skillManager.GetSkillCount()):
         curPlayerSkill = skillManager.GetSkillByIndex(i)
@@ -3782,9 +3785,9 @@
             continue
         if curPlayerSkill.GetFuncType() != funcType:
             continue
-        skillLV = curPlayerSkill.GetSkillLV()
-        allSkillLV += skillLV
+        if curPlayerSkill.GetSkillLV() >= skilllv:
+            allSkillCnt += 1
         
-    return allSkillLV
+    return allSkillCnt
 
 

--
Gitblit v1.8.0