From 6eb8ce81a683bf5a3024877fdcd4d8c95a8c87b5 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 29 六月 2023 17:15:43 +0800
Subject: [PATCH] 9818 【BT10】新增古宝特效效果

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py                       |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py                                  |  104 +++++++++++++++++++++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py        |    2 
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py                                            |   19 +++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                                       |    3 
 PySysDB/PySysDBPY.h                                                                                                        |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py                                   |   13 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py                         |    5 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py                               |   13 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py                             |   15 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py                                   |    7 +
 12 files changed, 173 insertions(+), 13 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 0f4e877..e01a522 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -2180,6 +2180,7 @@
 struct tagCoat
 {
 	DWORD		_CoatID;	//时装编号
+	BYTE		CostQuality;	//时装品质 0-普通;1-稀有;2-传说
 	list		EquipItemID;	//装备物品ID(按职业顺序)
 	DWORD		UnlockItemID;	//材料物品ID
 	DWORD		MaxLV;	//最大星级
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py
index af2f1e7..284ca17 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py
@@ -204,7 +204,7 @@
     # 通知子服更新玩家总伤害
     if syncPlayerHurtInfo:
         serverGroupIDList = []
-        sendMsg = {"syncPlayerHurtInfo":syncPlayerHurtInfo}
+        sendMsg = {"syncPlayerHurtInfo":syncPlayerHurtInfo, "killBoss":1}
         CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossYaomoBossHurtInfo, sendMsg, serverGroupIDList)
         
     return
@@ -228,6 +228,7 @@
     #zoneID = msgData["zoneID"]
     #npcID = msgData["npcID"]
     syncPlayerHurtInfo = msgData["syncPlayerHurtInfo"]
+    isKillBoss = msgData.get("killBoss") == 1
     
     for playerID, hurtInfo in syncPlayerHurtInfo.items():
         if not PlayerControl.GetDBPlayerAccIDByID(playerID):
@@ -242,12 +243,16 @@
             continue
         Sync_CrossYaomoBossPlayerHurtInfo(curPlayer)
         
-        if awardIndex == None:
-            continue
-        
-        # 通知地图发放奖励
-        msgInfo = ["HurtValueAward", [awardIndex, awardItemList]]
-        CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
+        if awardIndex != None:
+            # 通知地图发放奖励
+            msgInfo = ["HurtValueAward", [awardIndex, awardItemList]]
+            CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
+            
+        if isKillBoss:
+            # 通知地图击杀妖魔boss
+            msgInfo = ["KillYaomoBoss", hurtInfo]
+            CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
+            
     return
 
 def OnPlayerLogin(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py
index 2c27930..323d9b6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py
@@ -37,6 +37,7 @@
 import SkillCommon
 import PlayerWeekParty
 import PlayerTongTianLing
+import PlayerGubao
 
 import random
 import time
@@ -174,6 +175,7 @@
             EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_ElderBattlefield, 0, ChConfig.CME_Log_Start)
             PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_ElderBattlefield, 1)
             PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_ElderBattlefield, 1)
+            PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_ElderBattlefield, 1)
     else:
         rebornBuffLV = GameWorld.GetGameFB().GetPlayerGameFBDictByKey(playerID, FBPlayerDict_RebornBuffLV)
         __DoAddRebornBuff(curPlayer, rebornBuffLV, tick)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
index 7b365e5..03f7aaf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
@@ -34,6 +34,7 @@
 import NetPackCommon
 import SkillCommon
 import EventReport
+import PlayerGubao
 import ItemCommon
 import BuffSkill
 import AICommon
@@ -525,6 +526,7 @@
         FBCommon.SetHadDelTicket(curPlayer)
         FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_FamilyWar)
         PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FamilyWar, 1)
+        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_FamilyWar, 1)
     isFinalMatch = gameFB.GetGameFBDictByKey(GameFBDict_IsFinalMatch)
     roundNum = gameFB.GetGameFBDictByKey(GameFBDict_RoundNum)
     groupID = gameFB.GetGameFBDictByKey(GameFBDict_GroupID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 4ca2ee5..082c2a2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1702,6 +1702,7 @@
 
                 "Coat":(
                         ("DWORD", "CoatID", 1),
+                        ("BYTE", "CostQuality", 0),
                         ("list", "EquipItemID", 0),
                         ("DWORD", "UnlockItemID", 0),
                         ("DWORD", "MaxLV", 0),
@@ -5602,6 +5603,7 @@
     
     def __init__(self):
         self.CoatID = 0
+        self.CostQuality = 0
         self.EquipItemID = []
         self.UnlockItemID = 0
         self.MaxLV = 0
@@ -5610,6 +5612,7 @@
         return
         
     def GetCoatID(self): return self.CoatID # 时装编号
+    def GetCostQuality(self): return self.CostQuality # 时装品质 0-普通;1-稀有;2-传说
     def GetEquipItemID(self): return self.EquipItemID # 装备物品ID(按职业顺序)
     def GetUnlockItemID(self): return self.UnlockItemID # 材料物品ID
     def GetMaxLV(self): return self.MaxLV # 最大星级
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py
index 9b81661..2cfa3b2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py
@@ -152,6 +152,19 @@
     Sync_ClothesCoatSkinInfo(curPlayer, coatID)
     return
 
+def GetCoatQualityLVInfo(curPlayer):
+    costQualityLVDict = {}
+    ipyMgr = IpyGameDataPY.IPY_Data()
+    for i in xrange(ipyMgr.GetCoatCount()):
+        ipyData = ipyMgr.GetCoatByIndex(i)
+        coatID = ipyData.GetCoatID()
+        costQuality = ipyData.GetCostQuality()
+        skinLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV % coatID)
+        if not skinLV:
+            continue
+        costQualityLVDict[costQuality] = costQualityLVDict.get(costQuality, 0) + skinLV
+    return costQualityLVDict
+
 ## 计算时装属性
 #  @param curPlayer 玩家
 #  @param allAttrList 属性列表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py
index ac3be22..e078e9b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py
@@ -28,6 +28,7 @@
 import ItemControler
 import PlayerActivity
 import PlayerSuccess
+import PlayerGubao
 
 
 def DoPlayerLogin(curPlayer):
@@ -238,6 +239,7 @@
             PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossBattlefield, addCnt)
             
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_HighScoreToday, highScoreToday)
+        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossBattlefield, 1)
         
     if isSameWeek:
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_EnterCountWeek, enterCountWeek)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py
index 4db1a8c..db5c2f6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py
@@ -24,6 +24,7 @@
 import ShareDefine
 import ItemCommon
 import ChConfig
+import PlayerGubao
 
 def OnYaomoBossStateChange(state, tick):
     ## 活动状态变更
@@ -104,6 +105,10 @@
     if msgType == "HurtValueAward":
         __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg)
         
+    ## 参与击杀妖魔boss
+    if msgType == "KillYaomoBoss":
+        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossYaomoBoss, 1)
+        
     return
 
 def __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
index 03faaa6..8348670 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
@@ -463,6 +463,21 @@
         titleActiveList.append(curGradID)
     return titleActiveList
 
+def GetDienstgradActiveTypeCountInfo(curPlayer):
+    activeTypeCountDict = {}
+    dienstgradManager = curPlayer.GetDienstgradManager()
+    gradCnt = dienstgradManager.GetCount()
+    for i in xrange(gradCnt):
+        curGradID = dienstgradManager.AtGradID(i)
+        if curGradID == 0:
+            continue
+        curDienstgradData = GetDienstgradData(curGradID)
+        if curDienstgradData == None:
+            continue
+        curType = curDienstgradData.GetType()
+        activeTypeCountDict[curType] = activeTypeCountDict.get(curType, 0) + 1
+    return activeTypeCountDict
+
 def CalcAllDienstgradAttr(curPlayer):
     # 计算全部称号属性
     allAttrList = [{} for i in range(4)]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py
index 5e93428..6704927 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py
@@ -130,6 +130,8 @@
         return
     
     allAttrList = [{} for _ in range(4)]
+    customAttrDictFaQi = {}
+    faQiAllAttrInfo = {}
     
     ipyDataMgr = IpyGameDataPY.IPY_Data()
     for index in xrange(ipyDataMgr.GetFaQiLVUpCount()):
@@ -147,6 +149,7 @@
         lvAttrValueList = lvupIpyData.GetLVAttrValue()
         for i, attrID in enumerate(lvAttrTypeList):
             attrValue = lvAttrValueList[i]
+            faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
             PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
             
         # 培养丹增加属性
@@ -157,10 +160,12 @@
             attrMultiple = upItemCount / upItemPerCount
             for i, attrID in enumerate(upItemAttrTypeList):
                 attrValue = upItemAttrValueList[i]
+                faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
                 PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrList)
                 
+    customAttrDictFaQi["faQiAllAttrInfo"] = faQiAllAttrInfo
     # 保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList, customAttrDict=customAttrDictFaQi)
     return
 
 def Sync_FaQiLVInfo(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
index 1cc9d8b..66493cf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -29,6 +29,17 @@
 import PlayerPet
 import ChConfig
 import ItemControler
+import PlayerDienstgrad
+import PlayerCoat
+
+GubaoEffType_FamilyWar = 48 # 参与仙盟联赛每X次+XXX属性    x次
+GubaoEffType_ElderBattlefield = 49 # 参与上古战场每X次+XXX属性    x次
+GubaoEffType_CrossBattlefield = 50 # 参与古神战场每X次+XXX属性    x次
+GubaoEffType_CrossYaomoBoss = 51 # 参与魔王入侵每X次+XXX属性    x次
+GubaoEffType_CrossFamilyFlagwar = 52 # 参与逐鹿万界每X次+XXX属性    x次
+
+GubaoEffAttrIypeList = [GubaoEffType_FamilyWar, GubaoEffType_ElderBattlefield, GubaoEffType_CrossBattlefield, 
+                        GubaoEffType_CrossYaomoBoss, GubaoEffType_CrossFamilyFlagwar]
 
 GubaoEffType_ActivityPlace = 33 # 活跃修炼x次可领取物品    x次
 GubaoEffType_Arena = 34 # 竞技场挑战x次可领取物品    x次
@@ -296,17 +307,17 @@
             effAttrInfo = {}
             #GameWorld.DebugLog("GubaoStar属性: gubaoID=%s,star=%s,starEffIDList=%s" % (gubaoID, star, starEffIDList))
             for effID in starEffIDList:
-                __calcStarEffAttrByID(curPlayer, effID, effAttrInfo)
+                __calcStarEffAttrByID(curPlayer, gubaoID, effID, effAttrInfo)
                 #GameWorld.DebugLog("    effID=%s,effAttrInfo=%s" % (effID, effAttrInfo))
             for attrID, attrValue in effAttrInfo.items():
                 PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
                 
     # 保存计算值
-    #GameWorld.DebugLog("古宝属性: %s" % allAttrList)
+    GameWorld.DebugLog("古宝属性: %s" % allAttrList)
     PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList)
     return
 
-def __calcStarEffAttrByID(curPlayer, effID, effAttrInfo):
+def __calcStarEffAttrByID(curPlayer, gubaoID, effID, effAttrInfo):
     ''' 计算古宝特殊效果ID对应提升属性
     '''
     ipyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
@@ -555,6 +566,85 @@
         if attrID > 0 and addAttrValue > 0:
             effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
             
+    #41    x类型神兵每X级+X属性    x类型    x级
+    elif effType == 41:
+        gwType = effCond
+        gwLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % gwType)
+        addAttrValue = int(gwLV / effCond2 * effAttrValue)
+        #GameWorld.DebugLog("    effID=%s,effType=%s,gwType=%s,gwLV=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, gwType, gwLV, effCond2, attrID, addAttrValue))
+        if attrID > 0 and addAttrValue > 0:
+            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+        
+    #42    法器每X阶+X%法器总属性    x阶
+    elif effType == 42:
+        customAttrDictFaQi = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi)[2]
+        faQiAllAttrInfo = customAttrDictFaQi.get("faQiAllAttrInfo", {})
+        faQiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV)
+        addPer = int(faQiLV / effCond * effAttrValue)
+        #GameWorld.DebugLog("    effID=%s,effType=%s,faQiLV=%s,addPer=%s,faQiAllAttrInfo=%s" % (effID, effType, faQiLV, addPer, faQiAllAttrInfo))
+        __addStarEffFuncAttr(ipyData, effAttrInfo, faQiAllAttrInfo, addPer)
+            
+    #43    每拥有X个X类型的称号+X属性    x类型    x个
+    elif effType == 43:
+        activeTypeCountDict = PlayerDienstgrad.GetDienstgradActiveTypeCountInfo(curPlayer)
+        dType = effCond
+        activeCount = activeTypeCountDict.get(dType, 0)
+        addAttrValue = int(activeCount / effCond2 * effAttrValue)
+        #GameWorld.DebugLog("    effID=%s,effType=%s,dType=%s,activeTypeCountDict=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, dType, activeTypeCountDict, effCond2, attrID, addAttrValue))
+        if attrID > 0 and addAttrValue > 0:
+            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+            
+            
+    #44    X品质时装总星数每X星+X属性    x类型    x星
+    elif effType == 44:
+        costQualityLVDict = PlayerCoat.GetCoatQualityLVInfo(curPlayer)
+        quality = effCond
+        lvTotal = costQualityLVDict.get(quality, 0)
+        addAttrValue = int(lvTotal / effCond2 * effAttrValue)
+        #GameWorld.DebugLog("    effID=%s,effType=%s,quality=%s,costQualityLVDict=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, quality, costQualityLVDict, effCond2, attrID, addAttrValue))
+        if attrID > 0 and addAttrValue > 0:
+            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+            
+    #45    每X级魅力等级+X属性    x级
+    elif effType == 45:
+        charmLV = PlayerControl.GetCharmLV(curPlayer)
+        addAttrValue = int(charmLV / effCond * effAttrValue)
+        #GameWorld.DebugLog("    effID=%s,effType=%s,charmLV=%s,effCond=%s,attrID=%s,addAttrValue=%s" % (effID, effType, charmLV, effCond, attrID, addAttrValue))
+        if attrID > 0 and addAttrValue > 0:
+            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+            
+    #46    每拥有X个神通技能+X属性    x个
+    elif effType == 46:
+        customAttrDictShentong = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong)[2]
+        shentongSkillInfo = customAttrDictShentong.get("shentongSkillInfo", {})
+        skillCount = len(shentongSkillInfo)
+        addAttrValue = int(skillCount / effCond * effAttrValue)
+        #GameWorld.DebugLog("    effID=%s,effType=%s,skillCount=%s,effCond=%s,attrID=%s,addAttrValue=%s,shentongSkillInfo=%s" % (effID, effType, skillCount, effCond, attrID, addAttrValue, shentongSkillInfo))
+        if attrID > 0 and addAttrValue > 0:
+            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+            
+    #47    神通技能总等级每X级+X属性    x级
+    elif effType == 47:
+        customAttrDictShentong = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong)[2]
+        shentongSkillInfo = customAttrDictShentong.get("shentongSkillInfo", {})
+        skillLVTotal = sum(shentongSkillInfo.values())
+        addAttrValue = int(skillLVTotal / effCond * effAttrValue)
+        #GameWorld.DebugLog("    effID=%s,effType=%s,skillLVTotal=%s,effCond=%s,attrID=%s,addAttrValue=%s,shentongSkillInfo=%s" % (effID, effType, skillLVTotal, effCond, attrID, addAttrValue, shentongSkillInfo))
+        if attrID > 0 and addAttrValue > 0:
+            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+            
+    #48    参与仙盟联赛每X次+XXX属性    x次
+    #49    参与上古战场每X次+XXX属性    x次
+    #50    参与古神战场每X次+XXX属性    x次
+    #51    参与魔王入侵每X次+XXX属性    x次
+    #52    参与逐鹿万界每X次+XXX属性    x次
+    elif effType in GubaoEffAttrIypeList:
+        effValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
+        addAttrValue = int(effValue / effCond * effAttrValue)
+        #GameWorld.DebugLog("    effID=%s,effType=%s,effValue=%s,effCond=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effValue, effCond, attrID, addAttrValue))
+        if attrID > 0 and addAttrValue > 0:
+            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+            
     return
 
 def __addStarEffFuncAttr(ipyData, effAttrInfo, funcAttrInfo, effAttrValue):
@@ -574,8 +664,9 @@
     return
 
 def AddGubaoItemEffValue(curPlayer, effType, addCnt):
-    if effType not in GubaoEffTtemIypeList:
+    if effType not in GubaoEffTtemIypeList and effType not in GubaoEffAttrIypeList:
         return
+    isAttr = False
     ipyDataMgr = IpyGameDataPY.IPY_Data()
     for index in xrange(ipyDataMgr.GetGubaoCount()):
         ipyData = ipyDataMgr.GetGubaoByIndex(index)
@@ -599,6 +690,11 @@
             GameWorld.DebugLog("更新古宝物品效果类型进度值: gubaoID=%s,effID=%s,effType=%s,effValue=%s,addCnt=%s,updValue=%s" 
                                % (gubaoID, effID, effType, effValue, addCnt, updValue), curPlayer.GetPlayerID())
             Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
+            if effType in GubaoEffAttrIypeList:
+                isAttr = True
+                
+    if isAttr:
+        RefreshGubaoAttr(curPlayer)
     return
 
 def GetGubaoItemEffAward(curPlayer, gubaoID, effIDStr):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
index b75aeec..3372899 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
@@ -230,9 +230,11 @@
 
 def CalcShentongAttr(curPlayer):
     
+    customAttrDictShentong = {}
     fightPowerEx = 0
     allAttrList = [{} for _ in range(4)]
     
+    shentongSkillInfo = {}
     ipyDataMgr = IpyGameDataPY.IPY_Data()
     for index in xrange(ipyDataMgr.GetShentongCount()):
         ipyData = ipyDataMgr.GetShentongByIndex(index)
@@ -258,10 +260,19 @@
             if lvIpyData.GetFightPowerEx():
                 fightPowerEx += lvIpyData.GetFightPowerEx()
                 
+            LVSkillID = lvIpyData.GetLVSkillID()
+            if LVSkillID:
+                skillData = GameWorld.GetGameData().GetSkillBySkillID(LVSkillID)
+                if skillData:
+                    skillTypeID = skillData.GetSkillTypeID()
+                    skillLV = skillData.GetSkillLV()
+                    shentongSkillInfo[skillTypeID] = skillLV
+                    
+    customAttrDictShentong["shentongSkillInfo"] = shentongSkillInfo          
     # 附加战力
     curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Shentong, fightPowerEx)
     # 保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList, customAttrDict=customAttrDictShentong)
     return
 
 def Sync_ShentongLVInfo(curPlayer, shentongIDList=None):

--
Gitblit v1.8.0