From 19e0109ec1e936204cb85362d2e3f705b8b9554c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 03 十二月 2020 11:19:38 +0800
Subject: [PATCH] 8585 【主干】【BT】【长尾】【后端】竞技场(封包)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py | 94 +++++++++++++++++++++++++++-------------------
1 files changed, 55 insertions(+), 39 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
index 169174c..da7e44b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
@@ -87,19 +87,23 @@
##---------------------------------------- 节日红包 -----------------------------------------------
-def OnResetFeastRedPacket(ipyData):
+def OnResetFeastRedPacket(ipyData, dayIndex):
## 重置节日红包状态
if not ipyData:
return
dayRedPackIDList = ipyData.GetRedPacketIDList()
- GameWorld.DebugLog("重置红包发放状态: dayRedPackIDList=%s" % dayRedPackIDList)
- for redPackIDList in dayRedPackIDList:
- for redPackID in redPackIDList:
- if PlayerDBGSEvent.GetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID):
- PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID, 0)
-
+ GameWorld.Log("重置节日红包发放状态: dayRedPackIDList=%s, dayIndex=%s" % (dayRedPackIDList, dayIndex))
+ if dayIndex < 0 or dayIndex >= len(dayRedPackIDList):
+ GameWorld.ErrLog("当前节日天索引没有配配置系统红包ID! dayRedPackIDList=%s, dayIndex=%s" % (dayRedPackIDList, dayIndex))
+ return
+
+ for redPackID in dayRedPackIDList[dayIndex]:
+ GameWorld.Log(" 重置节日红包发放状态: redPackID=%s" % redPackID)
+ if PlayerDBGSEvent.GetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID):
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID, 0)
+
return
def __GetTodayRedPacketByTimeList():
@@ -221,12 +225,9 @@
jobRank = 0
playerName = ""
playerID = 0
- familyID = 0
family = None
- redPacketRecData = __SaveNewRedRecord(familyID, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, sysCreateTime=sysCreateTime)
- #通知
- __NotifyFamilyRedPacketInfo(family, redPacketRecData, [])
+ __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, sysCreateTime=sysCreateTime)
return
## 生成新红包
@@ -252,24 +253,9 @@
GameWorld.DebugLog(" 生成新仙盟红包 红包额度不能低于红包个数!outputNum=%s,redCnt=%s" % (outputNum, packetCnt))
return
job = curPlayer.GetJob()
- jobRank = PlayerControl.GetJobRank(curPlayer)
+ jobRank = 0
playerName = curPlayer.GetName()
- redPacketRecData = __SaveNewRedRecord(familyID, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, wishStr)
- #通知
- if redPacketRecData:
- __NotifyFamilyRedPacketInfo(family, redPacketRecData, [])
- if not familyID:
- 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])
- #大于200额度的红包
- getTypeRainDict = IpyGameDataPY.GetFuncEvalCfg('OpenServerRedPacketRain', 2, {})
- if str(getType) in getTypeRainDict:
- PlayerControl.WorldNotify(0, getTypeRainDict[str(getType)])
- elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain'):
- PlayerControl.WorldNotify(0, 'OSRedpackSfx')
+ __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, wishStr, data=data)
return
def CreatNewFamilyRedPacket(family, playerID, redPackID):
@@ -293,16 +279,13 @@
jobRank = 0
playerName = member.GetName()
- redPacketRecData = __SaveNewRedRecord(familyID, playerID, playerName, job, jobRank, getType, moneyType, outputNum, 0)
- #通知
- __NotifyFamilyRedPacketInfo(family, redPacketRecData, [])
+ __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, 0)
return
## 记录新红包数据
-def __SaveNewRedRecord(familyID, ownerid, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt,state=State_NoSend, wishStr='', sysCreateTime=None):
+def __SaveNewRedRecord(family, ownerid, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt,state=State_NoSend, wishStr='', sysCreateTime=None, data=0):
global g_allRecordDict
global g_redPackCountDict
- job = job + jobRank * 10 #个位是job 十位百位是jobrank
recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord
universalRecMgr = GameWorld.GetUniversalRecMgr()
recordList = universalRecMgr.GetTypeList(recordType)
@@ -314,6 +297,7 @@
GameWorld.DebugLog("当前红包数: g_redPackCountDict=%s" % g_redPackCountDict)
break
+ familyID = family.GetID() if family else 0
recData = recordList.AddRec()
@@ -337,6 +321,24 @@
recData.SetStrValue3(wishStr)#祝福语
g_allRecordDict[redPacketID] = recData
GameWorld.Log("生成新的红包: familyID=%s,redPacketID=%s,ownerid=%s,ownername=%s,getType=%s,moneyType=%s,outputNum=%s,packetCnt=%s" % (familyID, redPacketID, ownerid, playerName, getType, moneyType, outputNum, packetCnt))
+
+ #通知
+ __NotifyFamilyRedPacketInfo(family, recData, [])
+ 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'):
+ PlayerControl.WorldNotify(0, 'OSRedpackSfx', [getType])
+
return recData
@@ -487,8 +489,6 @@
playerID= curPlayer.GetPlayerID()
job = curPlayer.GetJob()
- jobRank = PlayerControl.GetJobRank(curPlayer)
- job = jobRank * 10 + job
playerName = curPlayer.GetName()
@@ -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)
#通知该玩家红包抢结果
@@ -635,7 +644,8 @@
strValue1 = universalRecData.GetStrValue1()
strValue1List = strValue1.split('|')
playerID = strValue1List[0]
- if playerID:
+ getWay = int(strValue1List[3])
+ if playerID and getWay is ShareDefine.RedPackType_GoldPacket:
playerID = int(playerID)
grabRecordDict = __GetGrabRecord(redPacketID)
outNum = sum([a[0] for a in grabRecordDict.values()]) #已被抢的钱
@@ -803,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