From dbf479ac2d1d2a1587fd9a984ac84a16ad0bb3d6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 07 一月 2026 12:04:02 +0800
Subject: [PATCH] 271 【内政】古宝系统-服务端(增加特殊效果类型3~6;新增特权效果支持,增加特权效果类型1、2;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py |   93 ++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 80 insertions(+), 13 deletions(-)

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 48a75d3..4f7096c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -20,6 +20,10 @@
 import ShareDefine
 import IpyGameDataPY
 import PlayerOnline
+import PlayerControl
+import DataRecordPack
+import ItemControler
+import ItemCommon
 
 def RefreshRoleEquipAttr(curPlayer):
     ## 刷新主公装备属性
@@ -65,6 +69,82 @@
     PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_MainEquip, mainEquipAttrDict)
     return
 
+def FixRoleEquipHP(curPlayer, fixVersion):
+    ## 修正玩家装备生命数值: 策划调整了生命占比,同步修改了生命战力,故需修正线上玩家装备生命,防止战力下降
+    
+    playerID = curPlayer.GetPlayerID()
+    fightPowerBef = PlayerControl.GetFightPower(curPlayer)
+    GameWorld.Log("修正玩家装备生命数值! fixVersion=%s,fightPowerBef=%s" % (fixVersion, fightPowerBef), playerID)
+    
+    # 需要修正身上、掉落背包
+    for packType in [IPY_GameWorld.rptEquip, IPY_GameWorld.rptIdentify]:
+        equipPack = curPlayer.GetItemManager().GetPack(packType)
+        for index in range(equipPack.GetCount()):
+            curEquip = equipPack.GetAt(index)
+            if not curEquip or curEquip.IsEmpty():
+                continue
+            if not ItemCommon.GetIsMainEquip(curEquip):
+                #GameWorld.DebugLog("非主线装备: itemIndex=%s" % itemIndex, playerID)
+                continue
+            itemID = curEquip.GetItemTypeID()
+            
+            # 直接重新生成一件装备进行替换生命属性即可
+            tempItem = ItemControler.GetOutPutItemObj(itemID, curPlayer=curPlayer)
+            if not tempItem:
+                continue
+            tempEquipMaxHP = 0
+            baseAttrIDCnt = tempItem.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrID)
+            baseAttrValueCnt = tempItem.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrValue)
+            for i in xrange(min(baseAttrIDCnt, baseAttrValueCnt)):
+                attrID = tempItem.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrID, i)
+                attrValue = tempItem.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrValue, i)
+                if attrID == ChConfig.AttrID_MaxHP:
+                    tempEquipMaxHP = attrValue
+                    break
+            tempItem.Clear() # 不需要了,直接 Clear
+            if tempEquipMaxHP <= 0:
+                continue
+            
+            curEquipMaxHP = 0
+            baseIDList, baseValueList = [], []
+            baseAttrIDCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrID)
+            baseAttrValueCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrValue)
+            for i in xrange(min(baseAttrIDCnt, baseAttrValueCnt)):
+                attrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrID, i)
+                attrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrValue, i)
+                if attrID == ChConfig.AttrID_MaxHP:
+                    curEquipMaxHP = attrValue
+                    attrValue = tempEquipMaxHP
+                baseIDList.append(attrID)
+                baseValueList.append(attrValue)
+                
+            if curEquipMaxHP >= tempEquipMaxHP:
+                GameWorld.Log("    packType=%s,index=%s,curEquipMaxHP=%s >= %s, 不处理! " % (packType, index, curEquipMaxHP, tempEquipMaxHP), playerID)
+                continue
+            
+            userDataBef = curEquip.GetUserData()
+            singleItem = curEquip.GetItem()
+            singleItem.ClearUserAttr(ShareDefine.Def_IudetBaseAttrID)
+            singleItem.ClearUserAttr(ShareDefine.Def_IudetBaseAttrValue)
+            for i, attrID in enumerate(baseIDList):
+                singleItem.AddUserAttr(ShareDefine.Def_IudetBaseAttrID, attrID)
+                singleItem.AddUserAttr(ShareDefine.Def_IudetBaseAttrValue, baseValueList[i])
+                
+            curEquip.Sync_Item()
+            userDataAft = curEquip.GetUserData()
+            
+            GameWorld.Log("    packType=%s,index=%s,curEquipMaxHP=%s to %s,userDataBef=%s,userDataAft=%s" 
+                          % (packType, index, curEquipMaxHP, tempEquipMaxHP, userDataBef, userDataAft), playerID)
+            fixDict = {"fixVersion":fixVersion, "packType":packType, "index":index, "itemID":itemID, "userDataBef":userDataBef, "userDataAft":userDataAft}
+            DataRecordPack.DR_FixVersion(curPlayer, "EquipHP", fixDict)
+            
+    RefreshRoleEquipAttr(curPlayer)
+    PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr(refreshForce=True)
+    
+    fightPowerAft = PlayerControl.GetFightPower(curPlayer)
+    DataRecordPack.DR_FixVersion(curPlayer, "EquipHP", {"fixVersion":fixVersion, "fightPowerBef":fightPowerBef, "fightPowerAft":fightPowerAft})
+    return
+
 #// A3 18 灵器突破 #tagCMLingQiEquipBreak
 #
 #struct    tagCMLingQiEquipBreak
@@ -107,19 +187,6 @@
 #    BYTE    Star;    // 星数
 #};
 def OnEquipPartSuiteActivate(index, clientData, tick):
-    return
-
-def ChangeEquipfacadeByHorsePetSkin(curPlayer, skinType, skinIndex):
-    ##骑宠觉醒外观变更  灵宠外观索引*10000000+坐骑外观索引*1000000+灵根特效表key * 1000+第几套*10+是否有套装
-    oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
-    if skinType == 1:
-        updEquipShowSwitch = GameWorld.ChangeDataByDigitPlace(oldEquipShowSwitch, 7, skinIndex)
-    else:
-        updEquipShowSwitch = GameWorld.ChangeDataByDigitPlace(oldEquipShowSwitch, 8, skinIndex)
-        
-    if oldEquipShowSwitch == updEquipShowSwitch:
-        return
-    curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
     return
 
 def GetPlayerMaxEquipClassLV(curPlayer):

--
Gitblit v1.8.0