From 3a782c0cf0b9ed7addf228a8c94a9ae772d483a0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 06 十二月 2024 13:15:15 +0800
Subject: [PATCH] 10312 【越南】【英文】【bt】【砍树】查看跨服玩家数据向对应子服查询(修复查看玩家简要信息找不到玩家缓存数据时报错)

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

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
index b2f693e..531c787 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
         
@@ -422,6 +431,8 @@
             playerCanGetIDList = []
             for redPacketID in nowActiveRedPacketIDList:
                 redPacketObj = redPacketMgr.GetRedPacketObj(redPacketID, False)
+                if not redPacketObj:
+                    continue
                 if playerID in redPacketObj.grabDict:
                     continue
                 playerCanGetIDList.append(redPacketID)
@@ -446,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-删除已全部抢完的红包
@@ -711,6 +730,8 @@
     for i in xrange(checkIndex + 1, len(nowActiveRedPacketIDList)):
         newCanGetRedID = nowActiveRedPacketIDList[i]
         newRedPacketObj = redPacketMgr.GetRedPacketObj(newCanGetRedID, False)
+        if not newRedPacketObj:
+            continue
         if playerID in newRedPacketObj.grabDict:
             continue
         if newCanGetRedID not in canGetIDList:
@@ -957,7 +978,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
@@ -983,11 +1005,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
@@ -1059,21 +1077,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
 
@@ -1183,9 +1194,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')
@@ -1200,6 +1212,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
@@ -1235,6 +1249,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)
@@ -1292,7 +1308,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
@@ -1301,6 +1317,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