From a075f7841fb2d0a3b32bf10c8bc2df5bf02d6acb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 14 十二月 2025 14:24:28 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(贾诩所有技能;5022效果支持配置buff额外属性计算方式;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py |   65 ++++++++++++++++++++------------
 1 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 424652b..93bec80 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -20,13 +20,14 @@
 import ShareDefine
 import NetPackCommon
 import PlayerControl
+import PlayerSuccess
 import ChPyNetSendPack
 import IPY_GameWorld
 import IpyGameDataPY
 import GameFuncComm
 import PlayerOnline
+import PlayerTask
 import GameWorld
-import ObjPool
 
 import time
 
@@ -94,10 +95,10 @@
         costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
         lackCnt = costItemCount - bindCnt - unBindCnt
         if lackCnt > 0:
-            GameWorld.DebugLog("消耗道具不足,无法升级坐骑! costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" 
+            costItemCount -= lackCnt
+            GameWorld.DebugLog("消耗道具不足,有多少消耗多少! costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" 
                                % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt))
-            return
-        
+            
         # 扣除消耗
         ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, costItemCount, ChConfig.ItemDel_Horse)
         
@@ -119,6 +120,9 @@
     # 有升级额外处理
     if updHorseLV > horseLV:
         RefreshHorseAttr(curPlayer)
+        
+    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HorseLVUP, costItemCount)
+    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHorseLVUP, costItemCount)
     return
 
 #// B2 02 坐骑进阶 #tagCSHorseClassUP
@@ -185,6 +189,9 @@
     
     classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseClassLV)
     horseLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseLV)
+    if not classLV and not horseLV:
+        #GameWorld.DebugLog("坐骑未开启")
+        return
     
     ipyDataMgr = IpyGameDataPY.IPY_Data()
     for index in range(ipyDataMgr.GetHorseClassCount()):
@@ -242,7 +249,7 @@
     return
 
 def SyncHorseClassInfo(curPlayer):
-    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCHorseClassInfo)
+    clientPack = ChPyNetSendPack.tagSCHorseClassInfo()
     clientPack.ClassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseClassLV)
     clientPack.HorseLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseLV)
     clientPack.Exp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseExp)
@@ -257,7 +264,7 @@
 #{
 #    tagHead         Head;
 #    BYTE        OPType;    // 操作 1-激活;2-佩戴;3-升星
-#    BYTE        SkinID;    // 外观ID,佩戴时发0即为卸下
+#    WORD        SkinID;    // 外观ID,佩戴时发0即为卸下
 #};
 def OnHorseSkinOP(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
@@ -305,21 +312,25 @@
     ipyData = IpyGameDataPY.GetIpyGameData("HorseSkin", horseSkinID)
     if not ipyData:
         return
-    if ipyData.GetUnlockWay() != 2:
-        GameWorld.DebugLog("非道具激活的不用添加: horseSkinID=%s" % (horseSkinID), playerID)
-        return
     if not isFree:
-        itemID = ipyData.GetUnlockValue()
-        itemCount = ipyData.GetUnlockNeedCnt()
-        if not itemID or not itemCount:
-            return
-        needItemList = [[itemID, itemCount]]
-        itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-        lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
-        if lackItemDict:
-            GameWorld.DebugLog("激活所需物品不足! horseSkinID=%s,lackItemDict=%s" % (horseSkinID, lackItemDict), playerID)
-            return
-        ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "AddHorseSkin")
+        unlockWay = ipyData.GetUnlockWay()
+        if unlockWay == 1:
+            classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseClassLV)
+            if classLV < ipyData.GetUnlockValue():
+                GameWorld.DebugLog("坐骑阶级不足无法解锁! classLV=%s < %s" % (classLV, ipyData.GetUnlockValue()), playerID)
+                return
+        elif unlockWay == 2:
+            itemID = ipyData.GetUnlockValue()
+            itemCount = ipyData.GetUnlockNeedCnt()
+            if not itemID or not itemCount:
+                return
+            needItemList = [[itemID, itemCount]]
+            itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+            lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
+            if lackItemDict:
+                GameWorld.DebugLog("激活所需物品不足! horseSkinID=%s,lackItemDict=%s" % (horseSkinID, lackItemDict), playerID)
+                return
+            ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "AddHorseSkin")
         
     ipyExpireSeconds = ipyData.GetExpireMinutes() * 60
     
@@ -385,6 +396,8 @@
     for index in range(ipyDataMgr.GetHorseSkinCount()):
         ipyData = ipyDataMgr.GetHorseSkinByIndex(index)
         horseSkinID = ipyData.GetSkinID()
+        if horseSkinID <= 0:
+            continue
         if ipyData.GetUnlockWay() != 1:
             continue
         if ipyData.GetUnlockValue() > 0:
@@ -404,9 +417,11 @@
     if ipyData:
         unlockWay = ipyData.GetUnlockWay()
         if unlockWay == 1:
-            classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseClassLV)
-            if classLV >= ipyData.GetUnlockValue():
+            if not ipyData.GetUnlockValue():
                 return True
+            #classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseClassLV)
+            #if classLV >= ipyData.GetUnlockValue():
+            #    return True
             
     return False
 
@@ -434,7 +449,7 @@
     if ipyData.GetUnlockWay() != 2:
         return
     itemID = ipyData.GetUnlockValue()
-    itemCount = ipyData.GetUnlockNeedCnt()
+    itemCount = ipyData.GetUpNeedCnt()
     if not itemID or not itemCount:
         return
     needItemList = [[itemID, itemCount]]
@@ -477,7 +492,7 @@
         state = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorseSkinState, horseSkinID)
         if not state and horseSkinIDList == None:
             continue
-        horseSkin = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCHorseSkin)
+        horseSkin = ChPyNetSendPack.tagSCHorseSkin()
         horseSkin.HorseSkinID = horseSkinID
         horseSkin.State = state
         horseSkin.EndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseSkinEndTime % horseSkinID)
@@ -487,7 +502,7 @@
     if not horseSkinList:
         return
     
-    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCHorseSkinInfo)
+    clientPack = ChPyNetSendPack.tagSCHorseSkinInfo()
     clientPack.HorseSkinList = horseSkinList
     clientPack.Count = len(clientPack.HorseSkinList)
     NetPackCommon.SendFakePack(curPlayer, clientPack)

--
Gitblit v1.8.0