From 23876f36a929f7e8f1fe94ae543b03bc24a61f1e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 25 二月 2025 20:24:08 +0800
Subject: [PATCH] 10263 【越南】【英文】【BT】【GM】【砍树】后端支持NPC仿真实玩家战斗和快速战斗(镜像回收时同步清除地图中缓存的镜像被动buff效果;)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py |   58 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
index 0067b13..1c95448 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
@@ -24,6 +24,7 @@
 import ChPyNetSendPack
 import PlayerCompensation
 import PlayerDBGSEvent
+import PlayerViewCache
 import PlayerControl
 import PlayerFamily
 import PyGameData
@@ -78,6 +79,7 @@
     #value4    moneyType
     #value5    getMoney
     #strValue1 名字
+    #strValue2 face|facePic
     
     recData.SetValue1(grabObj.redPacketID)
     recData.SetValue2(grabObj.playerID)
@@ -85,6 +87,7 @@
     recData.SetValue4(grabObj.moneyType)
     recData.SetValue5(grabObj.getMoney)
     recData.SetStrValue1(grabObj.playerName)
+    recData.SetStrValue2('%s|%s' % (grabObj.face, grabObj.facePic))
     return
 
 class RedPacketGrab():
@@ -97,6 +100,8 @@
         self.playerName = ""
         self.moneyType = 0
         self.getMoney = 0
+        self.face = 0
+        self.facePic = 0
         return
 
 class RedPacketData():
@@ -356,11 +361,15 @@
         if not redPacketObj:
             continue
         
+        strValue2List = recData.GetStrValue2().split('|')
+        
         grabObj = RedPacketGrab(redPacketID, playerID)
         grabObj.playerJob = recData.GetValue3()
         grabObj.playerName = recData.GetStrValue1()
         grabObj.moneyType = recData.GetValue4()
         grabObj.getMoney = recData.GetValue5()
+        grabObj.face = GameWorld.ToIntDef(strValue2List[0]) if len(strValue2List) > 0 else 0
+        grabObj.facePic = GameWorld.ToIntDef(strValue2List[1]) if len(strValue2List) > 1 else 0
         
         redPacketObj.grabDict[playerID] = grabObj
         
@@ -448,6 +457,14 @@
     PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount, 0) # 重置每日全服系统红包发放个数
     RandTodayServerSystemRedPacketSendTime()
     return
+
+def GetRedPackGetWayType(getWay):
+    ## 获取红包getWay所属红包分类
+    getWayTypeDict = IpyGameDataPY.GetFuncEvalCfg("RedPacketClassify", 1, {})
+    for getWayType, getWayList in getWayTypeDict.items():
+        if getWay in getWayList:
+            return getWayType
+    return ShareDefine.RedPackWayType_Family
 
 def CheckDelRedpacketData():
     ## 检查红包删除红包,5分钟一次: 1-删除过期红包,2-删除已全部抢完的红包
@@ -945,6 +962,9 @@
 
 def CreateSystemRedPacket(redPackID):
     ## 发放系统红包
+    if IpyGameDataPY.GetFuncCfg("RedPacketClassify", 2):
+        GameWorld.DebugLog("未开放红包发放! redPackID=%s" % redPackID)
+        return
     ipyData = IpyGameDataPY.GetIpyGameData('FamilyRedPack', redPackID)
     if not ipyData:
         return
@@ -961,7 +981,8 @@
         PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID, 1)
         GameWorld.DebugLog("定时发放的红包,设置已发放! redPackID=%s" % redPackID)
         
-    if getType == ShareDefine.RedPackType_Server:
+    getWayType = GetRedPackGetWayType(getType)
+    if getWayType == ShareDefine.RedPackWayType_Server:
         isAnonymous = 1
         
     job = 0
@@ -987,11 +1008,7 @@
         family = GameWorld.GetFamilyManager().FindFamily(familyID)
         if not family:
             return
-        #packetCnt = min(packetCnt, family.GetCount())
-#    if getType != 0:
-#        commonCntLimit = IpyGameDataPY.GetFuncCfg('FamilyRedPacketCnt')
-#        packetCnt = max(packetCnt, commonCntLimit)
-    
+        
     if outputNum < packetCnt:
         GameWorld.DebugLog("    生成新仙盟红包 红包额度不能低该红包个数!outputNum=%s,redCnt=%s" % (outputNum, packetCnt))
         return
@@ -1004,6 +1021,9 @@
 def CreatNewFamilyRedPacket(family, playerID, redPackID):
     '''外部接口,生成仙盟新红包'''
     if not family or not playerID or not redPackID:
+        return
+    if IpyGameDataPY.GetFuncCfg("RedPacketClassify", 2):
+        GameWorld.DebugLog("未开放红包发放! redPackID=%s,familyID=%s" % (redPackID, family.GetID()), playerID)
         return
     ipyData = IpyGameDataPY.GetIpyGameData('FamilyRedPack', redPackID)
     if not ipyData:
@@ -1063,21 +1083,14 @@
     
     #通知
     OnChangeRedPacketState(family, redPacketObj, None)
-    if getType == ShareDefine.RedPackType_OpenServer:
-        if not PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSRedPacket):
-            PlayerControl.WorldNotify(0, 'OpenRedBag2', [playerName, data, outputNum])
-            PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSRedPacket, 1)
-        elif data in IpyGameDataPY.GetFuncEvalCfg('OSRSuccess'):
-            PlayerControl.WorldNotify(0, 'OpenRedBag3', [playerName, data, outputNum])
-            
+    
     if not familyID:
         #大于200额度的红包
         getTypeRainDict = IpyGameDataPY.GetFuncEvalCfg('OpenServerRedPacketRain', 2, {})
         if str(getType) in getTypeRainDict:
             PlayerControl.WorldNotify(0, getTypeRainDict[str(getType)])
-        elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain') \
-            and getType not in [ShareDefine.RedPackType_Server]:
-            PlayerControl.WorldNotify(0, 'OSRedpackSfx', [getType])   
+        elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain'):
+            PlayerControl.WorldNotify(0, 'OSRedpackSfx', [getType])
             
     return redPacketObj
 
@@ -1187,9 +1200,10 @@
         GameWorld.ErrLog("领取的红包类型不一致,无法领取! reqGetWay=%s,getWay=%s" % (reqGetWay, getWay))
         return
     
-    if getWay in [ShareDefine.RedPackType_OpenServer, ShareDefine.RedPackType_Server]:
+    getWayType = GetRedPackGetWayType(getWay)
+    if getWayType == ShareDefine.RedPackWayType_Server:
         getNumformula = IpyGameDataPY.GetFuncCompileCfg('OpenRedRacketOutNum')
-    elif getWay in ShareDefine.FeastRedPackType:
+    elif getWayType == ShareDefine.RedPackWayType_Feast:
         getNumformula = IpyGameDataPY.GetFuncCompileCfg('FeastRedPacket', 2)
     else:
         getNumformula = IpyGameDataPY.GetFuncCompileCfg('FamilyRedRacketOutNum')
@@ -1204,6 +1218,8 @@
     grabObj = RedPacketGrab(redPacketID, playerID)
     grabObj.playerJob = curPlayer.GetJob()
     grabObj.playerName = curPlayer.GetName()
+    grabObj.face = curPlayer.GetFace()
+    grabObj.facePic = curPlayer.GetFacePic()
     grabObj.moneyType = moneyType
     grabObj.getMoney = getMoney
     grabRecordDict[playerID] = grabObj
@@ -1239,6 +1255,8 @@
         grabInfo.Name = grabObj.playerName
         grabInfo.NameLen = len(grabInfo.Name)
         grabInfo.PlayeJob = grabObj.playerJob
+        grabInfo.Face = grabObj.face
+        grabInfo.FacePic = grabObj.facePic
         grabInfo.MoneyNum = grabObj.getMoney
         sendPack.GrabInfo.append(grabInfo)
     sendPack.Count = len(sendPack.GrabInfo)
@@ -1296,7 +1314,7 @@
         if isAll and state in [State_HasGot, State_HasAllGot]:
             #GameWorld.DebugLog("    已抢或抢完的不发: redPacketID=%s,state=%s" % (redPacketID, state))
             continue
-        
+        tagCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(redPacketObj.playerID))
         packetInfo = ChPyNetSendPack.tagFRedPacketInfo()
         packetInfo.Clear()
         packetInfo.RedPacketID = redPacketObj.redPacketID
@@ -1305,6 +1323,8 @@
         packetInfo.NameLen = len(packetInfo.Name)
         packetInfo.Time = redPacketObj.createTime
         packetInfo.PlayeJob = redPacketObj.playerJob
+        packetInfo.Face = tagCacheDict.get("Face", 0)
+        packetInfo.FacePic = tagCacheDict.get("FacePic", 0)
         packetInfo.MoneyType = redPacketObj.moneyType
         packetInfo.MoneyNum = redPacketObj.moneyValue
         packetInfo.GetWay = redPacketObj.getWay

--
Gitblit v1.8.0