From a3d7f713806648255f13ef5934090e8ec71f3465 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 13 十一月 2020 15:01:22 +0800
Subject: [PATCH] 4859 【主干】【长尾】【BT】仙盟红包个数超过255报错(修正红包已抢完状态通知;红包已抢或抢完的登录不通知;红包总数超过255防范;)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
index 4693671..da7e44b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
@@ -515,8 +515,17 @@
     
     #找该红包的抢信息
     grabRecordDict = __GetGrabRecord(redPacketID)
-    if playerID in grabRecordDict or len(grabRecordDict) >= packetCnt:
-        GameWorld.DebugLog("    该玩家已抢过此红包!",playerID)
+    if playerID in grabRecordDict:
+        GameWorld.DebugLog("    该玩家已抢过此红包!", playerID)
+        __NotifyGrabRedPacketInfo(curPlayer, redPacketID, grabRecordDict)
+        return
+    
+    if len(grabRecordDict) >= packetCnt:
+        GameWorld.DebugLog("    红包已被抢完!", playerID)
+        if state != State_HasAllGot:
+            redPacketRecData.SetValue4(State_HasAllGot)
+            #GameWorld.DebugLog("    纠正红包已抢完状态! state=%s,updState=%s" % (state, State_HasAllGot))
+            __NotifyFamilyRedPacketInfo(curFamily, redPacketRecData, grabRecordDict.keys())
         __NotifyGrabRedPacketInfo(curPlayer, redPacketID, grabRecordDict)
         return
     
@@ -555,7 +564,7 @@
     #{playerid:[抢到的钱,名字,job]}
     g_grabDataDict[redPacketID] = grabRecordDict
     
-    if len(grabRecordDict) == packetCnt:
+    if len(grabRecordDict) >= packetCnt:
         redPacketRecData.SetValue4(State_HasAllGot)
         
         #通知该玩家红包抢结果
@@ -804,11 +813,17 @@
 
         if curPlayer.GetPlayerID() in grabHeroIDList:
             state = State_HasGot
+        if sendPack.IsAll and state in [State_HasGot, State_HasAllGot]:
+            #GameWorld.DebugLog("已抢或抢完的不发: RedPacketID=%s,state=%s" % (packetInfo.RedPacketID, state))
+            continue
         packetInfo.State = state
         packetInfo.PacketCnt = int(packetData.GetStrValue2())
         
         packetInfo.Wish = packetData.GetStrValue3()
         sendPack.RedPacketInfo.append(packetInfo)
+        if len(sendPack.RedPacketInfo) > 250:
+            #GameWorld.DebugLog("红包太多了!")
+            break
     
     sendPack.Count = len(sendPack.RedPacketInfo)
     NetPackCommon.SendFakePack(curPlayer, sendPack)

--
Gitblit v1.8.0