From 6018c2872ce2e6d7a22fcc09d39ff4267a42c746 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 10 五月 2019 15:15:05 +0800
Subject: [PATCH] 6723 【后端】【2.0】灵器1.0版本

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py                |   52 +++++++++++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py        |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py          |   72 ++++++++++++------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                    |   12 ++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py           |   13 +++-
 6 files changed, 101 insertions(+), 52 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 511bab0..19bf715 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -2405,6 +2405,8 @@
 EquipPlace_Special = [ShareDefine.retNeck, ShareDefine.retFairyCan, ShareDefine.retFairyCan2, ShareDefine.retJade]
 ## 装备位 - 所有基础
 EquipPlace_Base = EquipPlace_BaseWeapon + EquipPlace_BaseArmor
+## 装备位 - 灵器
+EquipPlace_LingQi = [ShareDefine.retWing, ShareDefine.retGuard1, ShareDefine.retPeerlessWeapon, ShareDefine.retPeerlessWeapon2]
 
 #装备物品位置,不需要重刷属性
 EquipItemNoRefreshState = [
@@ -2416,15 +2418,14 @@
 
 # 需要广播外观的装备部位(除了境界装备3部位)
 Def_SyncEquipStateByIndex = [
-    ShareDefine.retWing,        #11 翅膀
+    ShareDefine.retWing,        #13 翅膀
     ShareDefine.retGuard1,    #14 守护1
     ShareDefine.retHorse,        #19 坐骑
                              ]
 
 #---------------------------------------------------------------------
 #特殊物品光环,永久存在
-Def_SuperBuffList = [
-                      ]
+Def_SuperBuffList = []
 
 #------------------------------------------------------------
 
@@ -4358,7 +4359,8 @@
 Def_CalcAttrFunc_MagicWeapon3, # 仙族法宝属性 34
 Def_CalcAttrFunc_MagicWeapon4, # 王者法宝 35
 Def_CalcAttrFunc_Coat, # 时装 36
-) = range(37)
+Def_CalcAttrFunc_LingQi, # 灵器 37
+) = range(38)
 
 # 技能功能点列表  - 默认不算战力,不享受百分比加成,技能功能点暂时配置,之后优化技能属性逻辑后可去掉
 CalcAttrFuncSkillList = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
@@ -4373,7 +4375,7 @@
                             ShareDefine.Def_MFPType_Star:[Def_CalcAttrFunc_Star],
                             ShareDefine.Def_MFPType_Plus:[Def_CalcAttrFunc_Plus],
                             ShareDefine.Def_MFPType_Stone:[Def_CalcAttrFunc_Stone],
-                            ShareDefine.Def_MFPType_Wing:[Def_CalcAttrFunc_Wing],
+                            ShareDefine.Def_MFPType_Wing:[Def_CalcAttrFunc_Wing, Def_CalcAttrFunc_LingQi],
                             ShareDefine.Def_MFPType_Wash:[Def_CalcAttrFunc_Wash],
                             ShareDefine.Def_MFPType_Pet:[Def_CalcAttrFunc_Pet, Def_CalcAttrFunc_PetSign, Def_CalcAttrFunc_PetSkill],
                             ShareDefine.Def_MFPType_PetSoul:[Def_CalcAttrFunc_PetSoul],
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
index 07f97a7..0011390 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
@@ -65,6 +65,7 @@
                      ChConfig.Def_CalcAttrFunc_Stone:"宝石",
                      ChConfig.Def_CalcAttrFunc_Wash:"洗练",
                      ChConfig.Def_CalcAttrFunc_Wing:"翅膀",
+                     ChConfig.Def_CalcAttrFunc_LingQi:"灵器",
                      ChConfig.Def_CalcAttrFunc_Pet:"灵宠",
                      ChConfig.Def_CalcAttrFunc_Horse:"坐骑",
                      ChConfig.Def_CalcAttrFunc_Prestige:"境界",
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
index c1d8bd3..1b90e7e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -144,9 +144,9 @@
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Equip)
     
     #先刷装备BUFF 再计算属性
-    if changeItemEquipPlace == ShareDefine.retWing:
-        PlayerWing.CalcWingAttr(curPlayer)
-    else:
+    if changeItemEquipPlace in ChConfig.EquipPlace_LingQi:
+        RefreshPlayerLingQiEquipAttr(curPlayer)
+    elif itemClassLV:
         RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
     
     #刷新所有属性
@@ -158,7 +158,6 @@
     return True
 
 
-    
 ## 刷新装备对人物属性的改变
 #  @param self 类实例
 #  @return 返回值无意义
@@ -516,9 +515,9 @@
         return
     
     #先刷装备BUFF 再计算属性
-    if equipPlace == ShareDefine.retWing:
-        PlayerWing.CalcWingAttr(curPlayer)
-    else:
+    if equipPlace in ChConfig.EquipPlace_LingQi:
+        RefreshPlayerLingQiEquipAttr(curPlayer)
+    elif itemClassLV:
         RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
     
     #刷新所有属性
@@ -574,6 +573,45 @@
     
     return
 
+def RefreshPlayerLingQiEquipAttr(curPlayer):
+    ''' 刷新玩家灵器装备属性
+    '''
+    
+    classLV = 0 # 灵器阶默认为0
+    allAttrList = [{} for _ in range(4)]
+    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+    
+    for equipPlace in ChConfig.EquipPlace_LingQi:
+        
+        if equipPlace == ShareDefine.retWing:
+            PlayerWing.CalcWingAttr(curPlayer)
+            continue
+        
+        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+        if not ipyData:
+            continue
+        
+        equipIndex = ipyData.GetGridIndex()
+        curEquip = equipPack.GetAt(equipIndex)
+        if not curEquip or curEquip.IsEmpty():
+            continue
+        
+        if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
+            # 过期
+            continue
+        
+        #基础属性效果
+        for effIndex in xrange(curEquip.GetEffectCount()):
+            curEff = curEquip.GetEffectByIndex(effIndex)
+            effID = curEff.GetEffectID()
+            if effID == 0:
+                break
+            PlayerControl.CalcAttrDict_Type(effID, curEff.GetEffectValue(0), allAttrList)
+            
+    #GameWorld.DebugLog("灵器属性: %s" % allAttrList)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQi, allAttrList)
+    return
+
 def __CalcEquips_Effect(curPlayer, classLV):
     ''' 境界装备系统属性
     1. 装备模块,每个境界阶独立,每个境界战力独立模块计算
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 12aa572..c130127 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4210,8 +4210,9 @@
         #先压入BUFF的效果值及技能战斗力
         self.RefreshAllSkill()
         ChEquip.RefreshPlayerEquipAttribute(curPlayer)
+        ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
         #SkillShell.RefreshPlayerBuffOnAttrAddEffect(curPlayer)
-        PlayerWing.CalcWingAttr(curPlayer)
+        #PlayerWing.CalcWingAttr(curPlayer) # 翅膀暂时算在灵器里面
         PlayerHorse.CalcHorseAttrEx(curPlayer)
         PlayerPrestigeSys.CalcOfficialRankAttr(curPlayer)
         PlayerGodWeapon.CalcGodWeaponAttr(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 7c339df..abd7f1d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -673,14 +673,14 @@
 # @remarks 刷新以单位时间(分钟)消耗耐久的物品
 def ProcessRefreshTimeItem(curPlayer, tick):
     reFlash = False
-
+    
     #2分钟遍历一次,时效道具时间到不消失,
     if tick - curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_EquipTime) \
-    < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_TimeItem] :
+        < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_TimeItem]:
         return reFlash
     #耐久减少值/分钟
     reFlash = ProcessTimeEquip(curPlayer, tick)
-
+    
     return reFlash
 
 
@@ -1074,38 +1074,38 @@
 # @return 布尔值
 # @remarks 处理耐久计算方式为:现实时间刷新方式的物品
 def ProcessTimeEquip(curPlayer, tick):
-    return
-#境界装备修改,暂屏蔽,待优化
-#    itemManager = curPlayer.GetItemManager()
-#    hasItemClear = False
-#
-#    curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
-#    for i in range(0, curPack.GetCount()):
-#        curItem = curPack.GetAt(i)
-#        
-#        #异常物品
-#        if not ItemCommon.CheckItemCanUse(curItem):
-#            continue
-#
-#        if curItem.GetEndureReduceType() not in [ChConfig.Def_EquipReduceType_RTimeItem,
-#                                             ChConfig.Def_EquipReduceType_Time]:
-#            continue
-#
-#        #处理现实时间物品逻辑
-#        if __DoLogic_ProcessTimeEquip(curPlayer, curItem, i):
-#            hasItemClear = True
-#            
-#    
-#    if hasItemClear:
-#        #装备重刷属性
-#        PlayerWing.CalcWingAttr(curPlayer)
-#        ChEquip.RefreshPlayerEquipAttribute(curPlayer)
-#            
-#    
-#    # 进行更新时效道具刷新时间
-#    curPlayer.SetDict(ChConfig.Def_PlayerKey_EquipTime, tick)
-#    
-#    return hasItemClear
+    itemManager = curPlayer.GetItemManager()
+    hasItemClear = False
+    
+    classLV = 0 # 只处理非境界装备的时效物品
+    curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
+    for equipPlace in ChConfig.EquipPlace_LingQi:
+        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+        if not ipyData:
+            continue
+        index = ipyData.GetGridIndex()
+        curItem = curPack.GetAt(index)
+        
+        #异常物品
+        if not ItemCommon.CheckItemCanUse(curItem):
+            continue
+        
+        if curItem.GetEndureReduceType() not in [ChConfig.Def_EquipReduceType_RTimeItem,
+                                                 ChConfig.Def_EquipReduceType_Time]:
+            continue
+        
+        #处理现实时间物品逻辑
+        if __DoLogic_ProcessTimeEquip(curPlayer, curItem, index):
+            hasItemClear = True
+            
+    if hasItemClear:
+        #装备重刷属性
+        ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
+        
+    # 进行更新时效道具刷新时间
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_EquipTime, tick)
+    return hasItemClear
+
 #---------------------------------------------------------------------
 ## 装备有效时间到了需要脱下,有效时间物品改成不消失,但是无使用效果 可出售和续费
 def __DoLogic_ProcessTimeEquip(curPlayer, curItem, equipIndex):
@@ -1122,7 +1122,7 @@
         # 没有空位,玩家主动取下,计算属性时无效化
         # 过期属性时效需刷属性
         return True
-
+    
     result = ItemControler.PlayerItemControler(curPlayer).UnEquipItem(equipIndex, spaceIndex)
     if not result:
         # 过期属性时效需刷属性
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
index 2270926..cc27958 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
@@ -279,10 +279,17 @@
 #  @param allAttrList 属性列表
 #  @return None
 def CalcWingAttr(curPlayer):
-    allAttrList = [{} for _ in range(4)]
-    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-    curWing = equipPack.GetAt(ShareDefine.retWing)
     
+    classLV = 0
+    equipPlace = ShareDefine.retWing
+    allAttrList = [{} for _ in range(4)]
+        
+    curWing = None
+    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+    if ipyData:
+        curWing = equipPack.GetAt(ipyData.GetGridIndex())
+        
     if not ItemCommon.CheckItemCanUse(curWing):
         #GameWorld.DebugLog("没有穿戴翅膀!")
         PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wing, allAttrList)

--
Gitblit v1.8.0