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 |   16 ++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py           |    5 +++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py       |   24 ++++++++++++++----------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                   |    1 +
 4 files changed, 36 insertions(+), 10 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index d928fcb..9868f38 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3063,6 +3063,7 @@
 Def_PlayerKey_SomersaultTime = "Somersault"     # 翻滚一定时间内无敌,表现为MISS
 Def_PlayerKey_CopyFuncAttr = "CopyFuncAttr%s"     # 玩家属性刷新中的计算属性缓存,便于buff刷新计算
 Def_Player_RefreshAttrByBuff = "PlayerAttrByBuff"   # 玩家属性刷新功能属性缓存,便于buff刷新计算, 间隔刷新
+Def_Player_HadRefreshAttr = "HadRefreshAttr"   # 玩家在本地图是否刷新过属性
 Def_PlayerKey_ClientCustomScene = "ClientCustomScene"     # 客户端自定义场景状态
 Def_PlayerKey_ClientCustomSceneMapID = "ClientCustomSceneMapID"     # 客户端自定义场景地图ID
 Def_PlayerKey_ClientCustomSceneLineID = "ClientCustomSceneLineID"     # 客户端自定义场景功能线路ID
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 cdcc746..e9a5a41 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -1938,6 +1938,11 @@
     RunQuestEvent(curPlayer, "skillup", '%s_%s' % (FuncType, skillLV), Def_RunQuestType_Normal)
     return
 
+def EventRespons_LingGenQualityUP(curPlayer, attrID, qualityLV):
+    #灵根升品
+    RunQuestEvent(curPlayer, "linggenqualityup", '%s_%s' % (attrID, qualityLV), 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 320e6d4..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
@@ -7059,6 +7059,22 @@
     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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index e561f47..37a6ed7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4085,16 +4085,18 @@
         #GameWorld.DebugLog("等级加属性: %s" % allAttrList)
         
         # 属性点属性
+        hadRefreshAttr = curPlayer.GetDictByKey(ChConfig.Def_Player_HadRefreshAttr) # 本地图是否刷新过属性
         pointFightPowerEx = 0
-        pointValueInfo = {ShareDefine.Def_Effect_Metal:[lambda curObj:GetMetal(curObj), lambda curObj, value:SetMetalQualityLV(curObj, value)],
-                          ShareDefine.Def_Effect_Wood:[lambda curObj:GetWood(curObj), lambda curObj, value:SetWoodQualityLV(curObj, value)],
-                          ShareDefine.Def_Effect_Water:[lambda curObj:GetWater(curObj), lambda curObj, value:SetWaterQualityLV(curObj, value)],
-                          ShareDefine.Def_Effect_Fire:[lambda curObj:GetFire(curObj), lambda curObj, value:SetFireQualityLV(curObj, value)],
-                          ShareDefine.Def_Effect_Earth:[lambda curObj:GetEarth(curObj), lambda curObj, value:SetEarthQualityLV(curObj, value)],
+        pointValueInfo = {ShareDefine.Def_Effect_Metal:[lambda curObj:GetMetal(curObj), lambda curObj, value:SetMetalQualityLV(curObj, value), lambda curObj:GetMetalQualityLV(curObj)],
+                          ShareDefine.Def_Effect_Wood:[lambda curObj:GetWood(curObj), lambda curObj, value:SetWoodQualityLV(curObj, value), lambda curObj:GetWoodQualityLV(curObj)],
+                          ShareDefine.Def_Effect_Water:[lambda curObj:GetWater(curObj), lambda curObj, value:SetWaterQualityLV(curObj, value), lambda curObj:GetWaterQualityLV(curObj)],
+                          ShareDefine.Def_Effect_Fire:[lambda curObj:GetFire(curObj), lambda curObj, value:SetFireQualityLV(curObj, value), lambda curObj:GetFireQualityLV(curObj)],
+                          ShareDefine.Def_Effect_Earth:[lambda curObj:GetEarth(curObj), lambda curObj, value:SetEarthQualityLV(curObj, value), lambda curObj:GetEarthQualityLV(curObj)],
                           }
         lingGenQualityAttrList = [{} for _ in range(4)]
         for pointAttrID, pointFuncInfo in pointValueInfo.items():
             pointValue = pointFuncInfo[0](curPlayer)
+            befPQLV = pointFuncInfo[2](curPlayer)
             pointFuncInfo[1](curPlayer, 0)
             if not pointValue:
                 continue
@@ -4128,8 +4130,10 @@
             pqAttrValueList = pqAttrValueDict[str(curPlayer.GetJob())]
             pqAttrValue = 0 if curPQLV > len(pqAttrValueList) else pqAttrValueList[curPQLV - 1]
             CalcAttrDict_Type(pqAttrID, pqAttrValue, lingGenQualityAttrList)
-            #GameWorld.DebugLog("        属性点(%s)品阶等级属性: curPQLV=%s,pqAttrID=%s,pqAttrValue=%s" % (pointAttrID, curPQLV, pqAttrID, pqAttrValue))
-            
+            #GameWorld.DebugLog("        属性点(%s)品阶等级属性: befPQLV=%s,curPQLV=%s,pqAttrID=%s,pqAttrValue=%s" % (pointAttrID, befPQLV, curPQLV, pqAttrID, pqAttrValue))
+            if hadRefreshAttr and befPQLV < curPQLV:
+                EventShell.EventRespons_LingGenQualityUP(curPlayer, pointAttrID, curPQLV)
+                
         #GameWorld.DebugLog("等级属性点加属性: %s" % allAttrList)
         #GameWorld.DebugLog("灵根品阶等级属性: %s" % lingGenQualityAttrList)
         #GameWorld.DebugLog("灵根点数附加战力: %s" % pointFightPowerEx)
@@ -4563,15 +4567,14 @@
         self.__SyncBaseAttr(curPlayer, baseAttrList)
         #五行灵根变更需要处理的逻辑
         afterPointList = [GetMetal(curPlayer), GetWood(curPlayer), GetWater(curPlayer), GetFire(curPlayer), GetEarth(curPlayer)]
-        if beforePointList !=afterPointList:
+        if beforePointList != afterPointList:
             diffPointAttrList = []
             for i, attrID in enumerate([ShareDefine.Def_Effect_Metal, ShareDefine.Def_Effect_Wood, ShareDefine.Def_Effect_Water,
                            ShareDefine.Def_Effect_Fire, ShareDefine.Def_Effect_Earth]):
                 if beforePointList[i] != afterPointList[i]:
                     diffPointAttrList.append(attrID)
             SkillShell.RefreshElementSkillByAttr(curPlayer, diffPointAttrList)
-                
-             
+            
         # 同步前端战力,因为有 SetFightPower 所以累加战力放在这里所有刷新及计算处理完后才处理,才能正常触发set同步前端
         self.SendModuleFightPowerPack(curPlayer, mfpDict)
         billFuncCnt = len(PyGameData.g_refreshAttrBillboardFunc) # 只处理固定次数,防止死循环
@@ -4584,6 +4587,7 @@
         # 暂停刷新属性标志,必须被调用
         curPlayer.SetDict(ChConfig.Def_Player_RefreshAttr, 0)
         curPlayer.SetDict(ChConfig.Def_Player_RefreshAttrByBuff, 0)
+        curPlayer.SetDict(ChConfig.Def_Player_HadRefreshAttr, 1)
         GameWorld.DebugLog("End RefreshPlayerAttrStateEx!!!")
         return True
     

--
Gitblit v1.8.0