From ec68dabc97521a7706344e7d038e9f08462f4fe8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 十二月 2025 10:26:34 +0800
Subject: [PATCH] 16 卡牌服务端(删除多余备档报错防范;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py |   82 ++++++++++++++++++++++++++++++++++++++---
 1 files changed, 76 insertions(+), 6 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py
index b79fb12..510f31e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py
@@ -26,7 +26,6 @@
 import PlayerFamily
 import GameWorld
 import DBDataMgr
-import ObjPool
 
 import time
 
@@ -478,6 +477,78 @@
     SyncTaofaInfo(curPlayer)
     return
 
+def GMAddMemTaofaAtk(curPlayer, curFamily, playerID, hurtValue, isAnger):
+    ## GM添加假的讨伐数据
+    
+    familyID = curFamily.GetID()
+    familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ActionType)
+    actionData = familyAction.GetActionDataByValue1(playerID, True)
+    
+    faAtkCnt = GetFAAtkCount(actionData)
+    faContribBoxCnt = GetFAContribBoxCnt(actionData)
+    faHurtTotal = GetFAHurtTotal(actionData) + GetFAHurtTotalEx(actionData) * ChConfig.Def_PerPointValue
+    
+    atkType = AtkType_Normal
+    calcHurtCnt = 1 # 计算伤害次数
+    if isAnger:
+        atkType = AtkType_Anger # 怒气攻击
+        calcHurtCnt = IpyGameDataPY.GetFuncCfg("FamilyTaofaAtk", 5)
+        
+    hurtTotal = 0 # 本次总伤害
+    for _ in range(calcHurtCnt):
+        hurtTotal += hurtValue
+        
+    atkTime = int(time.time())
+    faAtkCnt += calcHurtCnt
+    
+    # 计算贡献盒子数
+    boxAwardHurtList = IpyGameDataPY.GetFuncEvalCfg("FamilyTaofaBox", 1)
+    contribBoxMax = min(IpyGameDataPY.GetFuncCfg("FamilyTaofaBox", 2), 1000) # 可贡献的最大箱子数
+    finalAwardHurt = boxAwardHurtList[-1] # 最后一档最大伤害值
+    loopNeedHurt = (finalAwardHurt - boxAwardHurtList[-2]) if len(boxAwardHurtList) > 1 else finalAwardHurt # 最后一档所需伤害值
+    
+    # 原总贡献盒子数
+    boxContribCnt = 0
+    for needHurt in boxAwardHurtList:
+        if faHurtTotal < needHurt:
+            break
+        boxContribCnt += 1
+    if faHurtTotal > finalAwardHurt:
+        loopHurtTotal = faHurtTotal - finalAwardHurt
+        loopContribBoxCnt = loopHurtTotal / loopNeedHurt
+        boxContribCnt = min(boxContribCnt + loopContribBoxCnt, contribBoxMax)
+        
+    # 新总宝箱盒子数
+    faHurtTotal += hurtTotal
+    updContribBoxCnt = 0
+    for needHurt in boxAwardHurtList:
+        if faHurtTotal < needHurt:
+            break
+        updContribBoxCnt += 1
+    if faHurtTotal > finalAwardHurt:
+        loopHurtTotal = faHurtTotal - finalAwardHurt
+        loopContribBoxCnt = loopHurtTotal / loopNeedHurt
+        updContribBoxCnt = min(updContribBoxCnt + loopContribBoxCnt, contribBoxMax)
+        
+    addContribCnt = 0
+    if updContribBoxCnt > boxContribCnt:
+        addContribCnt = updContribBoxCnt - boxContribCnt
+        faContribBoxCnt += addContribCnt
+        
+    GameWorld.DebugAnswer(curPlayer, "讨伐ID:%s,伤:%s,箱:%s/%s,怒:%s" % (playerID, hurtValue, addContribCnt, updContribBoxCnt, int(isAnger)))
+    
+    # 更新Action记录
+    SetFAAtkTime(actionData, atkTime)
+    SetFAAtkCount(actionData, faAtkCnt)
+    SetFAHurtTotal(actionData, faHurtTotal % ChConfig.Def_PerPointValue)
+    SetFAHurtTotalEx(actionData, faHurtTotal / ChConfig.Def_PerPointValue)
+    SetFAContribBoxCnt(actionData, faContribBoxCnt)
+    atkList = actionData.GetUserDict().get("atkList", [])
+    atkList.append([atkTime, addContribCnt, hurtTotal, atkType])
+    actionData.GetUserDict().update({"atkList":atkList})
+    
+    return actionData
+
 def GetTaofaBoxAward(curPlayer):
     boxUnGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt)
     if not boxUnGetCnt:
@@ -510,7 +581,7 @@
     return
 
 def SyncTaofaInfo(curPlayer):
-    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCFamilyTaofaInfo)
+    clientPack = ChPyNetSendPack.tagSCFamilyTaofaInfo()
     clientPack.BuZhenState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState)
     clientPack.AtkCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaCnt)
     clientPack.ItemAddCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt)
@@ -525,9 +596,8 @@
 
 def SyncTaofaAtkRet(curPlayer, atkType, hurtList, awardItemList):    
     atkHurtList = []
-    objPool = ObjPool.GetPoolMgr()
     for totalHurt, isSuper in hurtList:
-        atkHurt = objPool.acquire(ChPyNetSendPack.tagSCFamilyTaofaAtkHurt)
+        atkHurt = ChPyNetSendPack.tagSCFamilyTaofaAtkHurt()
         atkHurt.IsSuper = isSuper
         atkHurt.HurtValue = totalHurt % ChConfig.Def_PerPointValue
         atkHurt.HurtValueEx = totalHurt / ChConfig.Def_PerPointValue
@@ -535,12 +605,12 @@
         
     itemList = []
     for itemID, itemCount in awardItemList:
-        item = objPool.acquire(ChPyNetSendPack.tagSCFamilyTaofaAtkItem)
+        item = ChPyNetSendPack.tagSCFamilyTaofaAtkItem()
         item.ItemID = itemID
         item.Count = itemCount
         itemList.append(item)
         
-    clientPack = objPool.acquire(ChPyNetSendPack.tagSCFamilyTaofaAtkRet)
+    clientPack = ChPyNetSendPack.tagSCFamilyTaofaAtkRet()
     clientPack.AtkType = atkType
     clientPack.HurtList = atkHurtList
     clientPack.HurtCount = len(clientPack.HurtList)

--
Gitblit v1.8.0