From cb45ad934671c0c54c1024f834e630109dfa5c73 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 14 四月 2025 15:01:13 +0800
Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(增加查看其他指定仙盟/跨服仙盟支持;增加领取点赞奖励;修改仙盟轮次伤害计算规则受当前城池剩余生命影响;)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py |   62 +++++++++++++++++++-----------
 1 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
index c5ac94a..115236e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
@@ -90,7 +90,8 @@
 AwwardType_Guess, # 竞猜
 AwwardType_PlayerHurt, # 个人伤害排行
 AwwardType_FamilyScore, # 仙盟积分排行
-) = range(3)
+AwwardType_Like, # 点赞
+) = range(4)
 
 
 class FamilyGCZFighter(object):
@@ -1287,9 +1288,13 @@
     value5 = joinFamily.serverID
     groupValue1 = joinFamily.zoneID
     groupValue2 = GetRoundHurtGroupID(joinFamily.batType, joinFamily.groupNum)
-    roundTotalHurt = sum(joinFamily.cityWall.fighterHurtDict.values())
-    cmpValue = roundTotalHurt / ChConfig.Def_PerPointValue
-    cmpValue2 = roundTotalHurt % ChConfig.Def_PerPointValue
+    memHurtTotal = sum(joinFamily.cityWall.fighterHurtDict.values())
+    cityRemainHPPer = joinFamily.cityWall.hp / float(joinFamily.cityWall.hpMax)
+    familyRoundHurt = eval(IpyGameDataPY.GetFuncCompileCfg("FamilyGCZCity", 3))
+    GameWorld.DebugLog("计算仙盟轮次伤害榜值: familyID=%s,familyRoundHurt=%s,memHurtTotal=%s,cityRemainHPPer=%s, %s/%s" 
+                       % (dataID, familyRoundHurt, memHurtTotal, cityRemainHPPer, joinFamily.cityWall.hp, joinFamily.cityWall.hpMax))
+    cmpValue = familyRoundHurt / ChConfig.Def_PerPointValue
+    cmpValue2 = familyRoundHurt % ChConfig.Def_PerPointValue
     cmpValue3 = joinFamily.sortWeight
     CrossBillboard.UpdCrossBillboard(ShareDefine.Def_CBT_FamilyGCZRoundHurt, groupValue1, dataID, name1, name2, type2, value1, value2,
                                      cmpValue, cmpValue2, cmpValue3, groupValue2=groupValue2, id2=id2, autoSort=True, value3=value3, value5=value5)
@@ -1855,7 +1860,11 @@
                            % (remainHurtTotal, killCnt, curCity.atkReportDict, tagCity.defReportDict))
         
     GameWorld.DebugLog("cityHP=%s/%s,atkedGuardIDList=%s" % (tagCity.hp, tagCity.hpMax, atkedGuardIDList))
-    
+    if tagFamilyID:
+        tagJoinFamily = zone.GetZoneJoinFamily(tagFamilyID)
+        if tagJoinFamily:
+            UndFamilyRoundHurtBillboard(tagJoinFamily) # 榜单伤害受城池血量影响,所以被攻击方也要更新榜单
+            
     for memID, memHurt in memHurtDict.items():
         GameWorld.DebugLog("攻击方成员输出: memID=%s,%s" % (memID, memHurt))
         joinMember = zone.GetZoneJoinMember(memID)
@@ -1875,6 +1884,8 @@
             
     if not curCity.IsBroken():
         UndFamilyRoundHurtBillboard(curJoinFamily)
+    else:
+        GameWorld.DebugLog("    攻击方仙盟城池已被摧毁,不再累加本轮仙盟伤害榜值! familyID=%s" % curFamilyID)
         
     if not CheckXiuluoCity(zoneID, curRound, batType, groupNum, gmPlayerID):
         Sync_FamilyGCZBatSceneInfo(zoneID, batType, groupNum)
@@ -2052,6 +2063,9 @@
         hurtDict[tagCityID] = oneHurtTotal # 飘血按伤害
         # 通知被攻击盟成员大本营城池信息
         if tagCity.familyID:
+            tagJoinFamily = zone.GetZoneJoinFamily(tagCity.familyID)
+            if tagJoinFamily:
+                UndFamilyRoundHurtBillboard(tagJoinFamily) # 榜单伤害受城池血量影响,所以被攻击方也要更新榜单
             Sync_FamilyGCZCampInfo(zoneID, tagCity.familyID, defMemIDList=atkedGuardIDList)
         Sync_FamilyGCZBatCityInfo(zoneID, batType, groupNum, tagCityID, AtkRet_OK, playerID, oneHurtTotal, killCnt)
         
@@ -2467,7 +2481,11 @@
     # 竞猜
     if awardType == AwwardType_Guess:
         awardTemplateID = ipyDataInfo.get("GuessTemplateID", 0)
-        __clientServer_GetAward_Guess(zoneID, playerID, serverGroupID, actID, state, awardType, awardTemplateID)
+        playerAwardID, awardItemList = GetGuessAwardInfo(zoneID, state, awardTemplateID, playerID)
+        if not awardItemList:
+            GameWorld.ErrLog("仙盟攻城战玩家没有竞猜奖励! zoneID=%s" % (zoneID), playerID)
+            return
+        __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, playerAwardID, awardItemList)
         return
     
     gczMgr = GetFamilyGCZMgr()
@@ -2497,6 +2515,12 @@
         billboardType = ShareDefine.Def_CBT_FamilyGCZScore
         awardTemplateID = ipyDataInfo.get("FamilyTemplateID", 0)
         
+    # 点赞奖励
+    elif awardType == AwwardType_Like:
+        awardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyGCZGuess", 4)
+        __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, 0, awardItemList)
+        return
+    
     else:
         return
     
@@ -2518,30 +2542,22 @@
     if not playerAwardItemList:
         return
     
-    GameWorld.Log("仙盟攻城战玩家请求领取奖励! zoneID=%s,awardType=%s,playerAwardItemList=%s" 
-                  % (zoneID, awardType, playerAwardItemList), playerID)
-    
-    joinMember.awardState = joinMember.awardState | pow(2, awardType) # 标记已推送
-    msgInfo = {"zoneID":zoneID, "playerID":playerID, "actID":actID, "awardType":awardType, "awardValue":billRank, 
-               "awardItemList":playerAwardItemList, "fmLV":fmLV}
-    Send_CrossServerMsg_FamilyGCZ("FamilyGCZAward", msgInfo, [serverGroupID])
+    __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, billRank, playerAwardItemList)
     return
 
-def __clientServer_GetAward_Guess(zoneID, playerID, serverGroupID, actID, state, awardType, guessTemplateID):
-    ## 竞猜领奖
-    playerAwardID, awardItemList = GetGuessAwardInfo(zoneID, state, guessTemplateID, playerID)
-    if not awardItemList:
-        GameWorld.ErrLog("仙盟攻城战玩家没有竞猜奖励! zoneID=%s" % (zoneID), playerID)
-        return
-    GameWorld.Log("仙盟攻城战玩家请求领取竞猜奖励! zoneID=%s,playerAwardID=%s,awardItemList=%s" 
-                  % (zoneID, playerAwardID, awardItemList), playerID)
-    
+def __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, awardValue, awardItemList):
+    ## 同步子服领奖结果
     gczMgr = GetFamilyGCZMgr()
     zone = gczMgr.GetActZone(zoneID)
     joinMember = zone.GetZoneJoinMember(playerID)
+    fmLV = 0
     if joinMember:
+        fmLV = joinMember.fmLV
         joinMember.awardState = joinMember.awardState | pow(2, awardType) # 标记已推送
-    msgInfo = {"zoneID":zoneID, "playerID":playerID, "actID":actID, "awardType":awardType, "awardValue":playerAwardID, "awardItemList":awardItemList}
+    GameWorld.Log("仙盟攻城战玩家请求领取奖励! zoneID=%s,awardType=%s,awardValue=%s,awardItemList=%s" 
+                  % (zoneID, awardType, awardValue, awardItemList), playerID)
+    msgInfo = {"zoneID":zoneID, "playerID":playerID, "actID":actID, "awardType":awardType, "awardValue":awardValue, 
+               "awardItemList":awardItemList, "fmLV":fmLV}
     Send_CrossServerMsg_FamilyGCZ("FamilyGCZAward", msgInfo, [serverGroupID])
     return
 

--
Gitblit v1.8.0