From 9ed7a50c30881fd97a44c9fef82e1e4d97fcdff8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 23 四月 2021 18:12:58 +0800
Subject: [PATCH] 8901 【BT2】【后端】全服红包
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyRedPacket.py | 72 +++++++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 11 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 19 +++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 11 +
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py | 121 +++++++++++++++++++++--
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 3
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 19 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GrabFamilyRedPacketResult.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 2
10 files changed, 233 insertions(+), 30 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index ebff0fa..650f1b5 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -12768,6 +12768,7 @@
PacketCnt = 0 #(WORD PacketCnt)// 红包数量
MoneyNum = 0 #(WORD MoneyNum)//金钱数量
Wish = "" #(char Wish[33])//祝福语
+ IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名
data = None
def __init__(self):
@@ -12783,6 +12784,7 @@
self.PacketCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -12794,6 +12796,7 @@
self.PacketCnt = 0
self.MoneyNum = 0
self.Wish = ""
+ self.IsAnonymous = 0
return
def GetLength(self):
@@ -12803,6 +12806,7 @@
length += 2
length += 2
length += 33
+ length += 1
return length
@@ -12813,6 +12817,7 @@
data = CommFunc.WriteWORD(data, self.PacketCnt)
data = CommFunc.WriteWORD(data, self.MoneyNum)
data = CommFunc.WriteString(data, 33, self.Wish)
+ data = CommFunc.WriteBYTE(data, self.IsAnonymous)
return data
def OutputString(self):
@@ -12821,14 +12826,16 @@
RedPacketID:%d,
PacketCnt:%d,
MoneyNum:%d,
- Wish:%s
+ Wish:%s,
+ IsAnonymous:%d
'''\
%(
self.Head.OutputString(),
self.RedPacketID,
self.PacketCnt,
self.MoneyNum,
- self.Wish
+ self.Wish,
+ self.IsAnonymous
)
return DumpString
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 4d99f79..631dd3a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -1411,6 +1411,7 @@
PacketCnt = 0 #(BYTE PacketCnt)//可抢个数
State = 0 #(BYTE State)//0未发,1未领取,2已领取,3全部领完
Wish = "" #(char Wish[33])//祝福语
+ IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名
data = None
def __init__(self):
@@ -1430,6 +1431,7 @@
self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -1444,6 +1446,7 @@
self.PacketCnt = 0
self.State = 0
self.Wish = ""
+ self.IsAnonymous = 0
return
def GetLength(self):
@@ -1459,6 +1462,7 @@
length += 1
length += 1
length += 33
+ length += 1
return length
@@ -1475,6 +1479,7 @@
data = CommFunc.WriteBYTE(data, self.PacketCnt)
data = CommFunc.WriteBYTE(data, self.State)
data = CommFunc.WriteString(data, 33, self.Wish)
+ data = CommFunc.WriteBYTE(data, self.IsAnonymous)
return data
def OutputString(self):
@@ -1489,7 +1494,8 @@
GetWay:%d,
PacketCnt:%d,
State:%d,
- Wish:%s
+ Wish:%s,
+ IsAnonymous:%d
'''\
%(
self.RedPacketID,
@@ -1502,7 +1508,8 @@
self.GetWay,
self.PacketCnt,
self.State,
- self.Wish
+ self.Wish,
+ self.IsAnonymous
)
return DumpString
@@ -20843,6 +20850,7 @@
("Cmd", c_ubyte),
("SubCmd", c_ubyte),
("HasSendGold", c_int), # 已用额度
+ ("ServerGrabCnt", c_int), # 全服红包已抢次数
]
def __init__(self):
@@ -20860,6 +20868,7 @@
self.Cmd = 0xA5
self.SubCmd = 0x05
self.HasSendGold = 0
+ self.ServerGrabCnt = 0
return
def GetLength(self):
@@ -20872,12 +20881,14 @@
DumpString = '''// A5 05 通知家族钻石红包已用额度 //tagMCFamilyRedPacketGoldLimit:
Cmd:%s,
SubCmd:%s,
- HasSendGold:%d
+ HasSendGold:%d,
+ ServerGrabCnt:%d
'''\
%(
self.Cmd,
self.SubCmd,
- self.HasSendGold
+ self.HasSendGold,
+ self.ServerGrabCnt
)
return DumpString
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
index da7e44b..7c07e9a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
@@ -45,7 +45,7 @@
#value4 状态
#value5 时间,用来判断是否过期删除的,实际开放该红包领取的时间
#strValue1 创建者ID|创建者名字|创建者职业|获得途径(红包类型)
-#strValue2 可抢总个数
+#strValue2 可抢总个数|是否匿名(默认不匿名兼容老数据)
#strValue3 祝福语,玩家自己编辑的内容
#Def_UniversalGameRecType_FamilyRedPacketGrabRecord
@@ -68,6 +68,7 @@
g_redPackCountDict = {} #有限制最大红包个数的类型对应当前红包数 {类型组对应记录编号:当前个数, ...}
DBKey_RedPacketSend = "RedPacketSend_%s" # 系统定时红包是否已发放, 参数红包ID
+DBKey_RedPacketSystemDayCount = "RedPacketSystemDayCount" # 全服系统红包已发放个数
## 玩家登录
# @param None
@@ -82,7 +83,8 @@
# @return None
def DoOnDay():
__CheckGrabRecData()
-
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount, 0) # 重置每日全服系统红包发放个数
+ RandTodayServerSystemRedPacketSendTime()
return
##---------------------------------------- 节日红包 -----------------------------------------------
@@ -150,6 +152,8 @@
def OnRedPacketMinuteProcess():
## 每分钟处理,定时发放系统红包
+ CheckSendServerSystemRedPacket()
+
todayRedPacketByTimeList = __GetTodayRedPacketByTimeList()
if not todayRedPacketByTimeList:
return
@@ -203,6 +207,89 @@
return
##--------------------------------------------------------------------------------------------------
+##---------------------------------------- 全服系统红包 ---------------------------------------------
+
+def RandTodayServerSystemRedPacketSendTime():
+ ## 随机生成今日全服系统红包发放时间点
+
+ sendTimeList = []
+ sysRedPackketSendCountToday = PlayerDBGSEvent.GetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount)
+ maxCount = IpyGameDataPY.GetFuncCfg("ServerSysRedPacket", 1)
+ needSendCount = max(0, maxCount - sysRedPackketSendCountToday)
+
+ GameWorld.Log("随机生成发放全服系统红包时间! maxCount=%s,sysRedPackketSendCountToday=%s,needSendCount=%s"
+ % (maxCount, sysRedPackketSendCountToday, needSendCount))
+ if needSendCount > 0:
+ startHour, endHour = IpyGameDataPY.GetFuncEvalCfg("ServerSysRedPacket", 3)
+ serverTime = GameWorld.GetServerTime()
+ year, month, day = serverTime.year, serverTime.month, serverTime.day
+ startDateTime = datetime.datetime(year, month, day, startHour)
+ if endHour == 0:
+ endDateTime = datetime.datetime(year, month, day) + datetime.timedelta(days=1)
+ else:
+ endDateTime = datetime.datetime(year, month, day, endHour)
+
+ totalSeconds = (endDateTime - startDateTime).seconds # 可处理的总秒数
+ aveSeconds = totalSeconds / maxCount # 平均间隔
+ GameWorld.Log(" startDateTime=%s" % startDateTime)
+ GameWorld.Log(" endDateTime=%s" % endDateTime)
+ GameWorld.Log(" totalSeconds=%s,aveSeconds=%s" % (totalSeconds, aveSeconds))
+
+ nextStartDateTime = startDateTime
+ for _ in xrange(maxCount):
+ randSeconds = random.randint(60, aveSeconds - 60) # 前后扣掉1分钟,防止随机到同分钟
+ randSendDateTime = nextStartDateTime + datetime.timedelta(seconds=randSeconds)
+ if randSendDateTime > serverTime:
+ sendTimeList.append(randSendDateTime)
+ GameWorld.Log(" 随机起始时间=%s,randSeconds=%s,随机发放时间=%s" % (nextStartDateTime, randSeconds, randSendDateTime))
+
+ nextStartDateTime += datetime.timedelta(seconds=aveSeconds)
+
+ GameWorld.Log(" sendTimeList=%s" % sendTimeList)
+ IpyGameDataPY.SetConfigEx("ServerSystemRedPacketSendTime", sendTimeList)
+ return sendTimeList
+
+def CheckSendServerSystemRedPacket():
+ ## 检查发送今日全服系统红包
+
+ sendTimeList = IpyGameDataPY.GetConfigEx("ServerSystemRedPacketSendTime")
+ if sendTimeList == None:
+ sendTimeList = RandTodayServerSystemRedPacketSendTime()
+
+ if not sendTimeList:
+ #GameWorld.DebugLog("没有随机发放系统红包时间了!")
+ return
+
+ serverTime = GameWorld.GetServerTime()
+ nextSendTime = sendTimeList[0]
+ if serverTime.hour == nextSendTime.hour and serverTime.minute == nextSendTime.minute:
+ sendTimeList.pop(0)
+
+ randSysRedPacketList = IpyGameDataPY.GetFuncEvalCfg("ServerSysRedPacket", 2)
+ redPackID = GameWorld.GetResultByRandomList(randSysRedPacketList)
+ if not redPackID:
+ return
+
+ CreateSystemRedPacket(redPackID)
+
+ sysRedPackketSendCountToday = PlayerDBGSEvent.GetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount) + 1
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount, sysRedPackketSendCountToday)
+ GameWorld.Log("发放全服系统红包: redPackID=%s, sysRedPackketSendCountToday=%s" % (redPackID, sysRedPackketSendCountToday))
+
+ maxCount = IpyGameDataPY.GetFuncCfg("ServerSysRedPacket", 1)
+ if sysRedPackketSendCountToday >= maxCount:
+ IpyGameDataPY.SetConfigEx("ServerSystemRedPacketSendTime", [])
+ GameWorld.Log(" 今日全服系统红包已经全部发完了! maxCount=%s" % maxCount)
+
+ elif nextSendTime < serverTime:
+ sendTimeList.pop(0)
+ #GameWorld.DebugLog("发放系统红包时间过期了!serverTime=%s, nextSendTime=%s" % (serverTime, nextSendTime))
+ #else:
+ # GameWorld.DebugLog("非发放系统红包时间!serverTime=%s, nextSendTime=%s" % (serverTime, nextSendTime))
+
+ return
+
+##--------------------------------------------------------------------------------------------------
def CreateSystemRedPacket(redPackID):
## 发放系统红包
@@ -216,10 +303,14 @@
openTime = ipyData.GetPacketOpenTime() # 如果有指定发放时间的
sysCreateTime = GameWorld.ChangeTimeStrToNum("%s:00" % openTime) if openTime else None
+ isAnonymous = 0
state = State_NoGot # 暂直接设定已发放
if ipyData.GetPacketOpenTime():
PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID, 1)
GameWorld.DebugLog("定时发放的红包,设置已发放! redPackID=%s" % redPackID)
+
+ if getType == ShareDefine.RedPackType_Server:
+ isAnonymous = 1
job = 0
jobRank = 0
@@ -227,7 +318,7 @@
playerID = 0
family = None
- __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, sysCreateTime=sysCreateTime)
+ __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, sysCreateTime=sysCreateTime, isAnonymous=isAnonymous)
return
## 生成新红包
@@ -283,7 +374,7 @@
return
## 记录新红包数据
-def __SaveNewRedRecord(family, ownerid, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt,state=State_NoSend, wishStr='', sysCreateTime=None, data=0):
+def __SaveNewRedRecord(family, ownerid, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt,state=State_NoSend, wishStr='', sysCreateTime=None, data=0, isAnonymous=0):
global g_allRecordDict
global g_redPackCountDict
recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord
@@ -317,7 +408,7 @@
recData.SetValue4(state) #是否已发
recData.SetValue5(curTimeNum) #该时间为开放领取的时间,不一定等于创建时间
recData.SetStrValue1('%s|%s|%s|%s'%(ownerid,playerName,job,getType)) #创建者ID|创建者名字|创建者职业|途径
- recData.SetStrValue2(str(packetCnt))#可抢总个数
+ recData.SetStrValue2('%s|%s' % (packetCnt, int(isAnonymous)))#可抢总个数|是否匿名
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))
@@ -335,8 +426,9 @@
#大于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, getTypeRainDict[str(getType)])
+ elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain') \
+ and getType not in [ShareDefine.RedPackType_Server]:
PlayerControl.WorldNotify(0, 'OSRedpackSfx', [getType])
return recData
@@ -436,7 +528,7 @@
def SendFamilyRedPacket(msgList):
'''发系统赠送的红包,该红包已存在,只是状态未发放,由归属玩家自由选择发放时机'''
- playerID, redPacketID, packetCnt = msgList
+ playerID, redPacketID, packetCnt, isAnonymous = msgList
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
if not curPlayer:
return
@@ -468,7 +560,7 @@
return
recData.SetValue4(State_NoGot)
- recData.SetStrValue2(str(packetCnt))
+ recData.SetStrValue2('%s|%s' % (packetCnt, int(isAnonymous)))
#更新时间
curTimeNum = int(time.time())
recData.SetValue5(curTimeNum)
@@ -511,7 +603,9 @@
value3 = redPacketRecData.GetValue3()
moneyType, totalMoney =value3%10, value3/10
- packetCnt = int(redPacketRecData.GetStrValue2())
+ strValue2 = redPacketRecData.GetStrValue2()
+ strValue2List = strValue2.split('|')
+ packetCnt = int(strValue2List[0])
#找该红包的抢信息
grabRecordDict = __GetGrabRecord(redPacketID)
@@ -546,7 +640,7 @@
if reqGetWay != getWay:
GameWorld.ErrLog("领取的红包类型不一致,无法领取! reqGetWay=%s,getWay=%s" % (reqGetWay, getWay))
return
- if getWay == ShareDefine.RedPackType_OpenServer:
+ if getWay in [ShareDefine.RedPackType_OpenServer, ShareDefine.RedPackType_Server]:
getNumformula = IpyGameDataPY.GetFuncCompileCfg('OpenRedRacketOutNum')
elif getWay in ShareDefine.FeastRedPackType:
getNumformula = IpyGameDataPY.GetFuncCompileCfg('FeastRedPacket', 2)
@@ -817,7 +911,10 @@
#GameWorld.DebugLog("已抢或抢完的不发: RedPacketID=%s,state=%s" % (packetInfo.RedPacketID, state))
continue
packetInfo.State = state
- packetInfo.PacketCnt = int(packetData.GetStrValue2())
+ strValue2 = packetData.GetStrValue2()
+ strValue2List = strValue2.split('|')
+ packetInfo.PacketCnt = int(strValue2List[0])
+ packetInfo.IsAnonymous = int(strValue2List[1]) if len(strValue2List) > 1 else 0
packetInfo.Wish = packetData.GetStrValue3()
sendPack.RedPacketInfo.append(packetInfo)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 38b4c10..db8a215 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1871,10 +1871,13 @@
RedPackType_FeastSysBig = 31 # 节日系统大红包
RedPackType_FeastSysSmall = 32 # 节日系统小红包
RedPackType_FeastSucc = 33 # 节日成就红包
+RedPackType_Server = 36 # 全服红包
+
# 节日红包类型
FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
# 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
RedPackMaxCountDict = {1:[RedPackType_OpenServer],
2:[RedPackType_FeastSucc],
+ 3:[RedPackType_Server],
}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index a7d3216..14822b0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3526,7 +3526,6 @@
Def_PDict_FirstGoldRemainTime = "FirstGoldRemainTime" # 首充提示剩余时间
Def_PDict_FirstGoldTipStartTime = "FirstGoldTipStartTime" # 首充提示开始时间
Def_PDict_FirstGoldTry = "FirstGoldTry" # 首充试用状态 0-不可试用 1-可试用 2-已试用
-Def_PDict_DailyChargeState = "DailyChargeState" # 当日是否已充值
Def_PDict_SuperGiftStartTime = "SuperGiftStartTime" # 超值礼包开始时间
Def_PDict_IsReBorn = "Def_PDict_IsReBorn" # 是否回城复活
Def_PDict_FamilyWarDailyReward = "FamilyWarDailyReward" # 王者仙盟每日俸禄领取状态
@@ -3999,6 +3998,7 @@
Def_PDict_OSRedPacketGrabMoney = "OSRedPacketGrabMoney" # 开服红包已抢数量
Def_PDict_OSRedPacketCanGrabCnt = "OSRedPacketCanGrabCnt" # 开服红包可抢次数
Def_PDict_OSRedPacketStartTime = "OSRedPacketStartTime" #开服红包开始倒计时时间
+Def_PDict_ServerRedPacketGrabCnt = "ServerRedPacketGrabCnt" # 今日已抢全服红包次数
#节日红包
Def_PDict_FeastRedPacketActID = "FeastRedPacketActID" # 玩家身上的节日红包活动ID,唯一标识,取活动开始日期time值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index ebff0fa..650f1b5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -12768,6 +12768,7 @@
PacketCnt = 0 #(WORD PacketCnt)// 红包数量
MoneyNum = 0 #(WORD MoneyNum)//金钱数量
Wish = "" #(char Wish[33])//祝福语
+ IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名
data = None
def __init__(self):
@@ -12783,6 +12784,7 @@
self.PacketCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -12794,6 +12796,7 @@
self.PacketCnt = 0
self.MoneyNum = 0
self.Wish = ""
+ self.IsAnonymous = 0
return
def GetLength(self):
@@ -12803,6 +12806,7 @@
length += 2
length += 2
length += 33
+ length += 1
return length
@@ -12813,6 +12817,7 @@
data = CommFunc.WriteWORD(data, self.PacketCnt)
data = CommFunc.WriteWORD(data, self.MoneyNum)
data = CommFunc.WriteString(data, 33, self.Wish)
+ data = CommFunc.WriteBYTE(data, self.IsAnonymous)
return data
def OutputString(self):
@@ -12821,14 +12826,16 @@
RedPacketID:%d,
PacketCnt:%d,
MoneyNum:%d,
- Wish:%s
+ Wish:%s,
+ IsAnonymous:%d
'''\
%(
self.Head.OutputString(),
self.RedPacketID,
self.PacketCnt,
self.MoneyNum,
- self.Wish
+ self.Wish,
+ self.IsAnonymous
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 4d99f79..631dd3a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -1411,6 +1411,7 @@
PacketCnt = 0 #(BYTE PacketCnt)//可抢个数
State = 0 #(BYTE State)//0未发,1未领取,2已领取,3全部领完
Wish = "" #(char Wish[33])//祝福语
+ IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名
data = None
def __init__(self):
@@ -1430,6 +1431,7 @@
self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -1444,6 +1446,7 @@
self.PacketCnt = 0
self.State = 0
self.Wish = ""
+ self.IsAnonymous = 0
return
def GetLength(self):
@@ -1459,6 +1462,7 @@
length += 1
length += 1
length += 33
+ length += 1
return length
@@ -1475,6 +1479,7 @@
data = CommFunc.WriteBYTE(data, self.PacketCnt)
data = CommFunc.WriteBYTE(data, self.State)
data = CommFunc.WriteString(data, 33, self.Wish)
+ data = CommFunc.WriteBYTE(data, self.IsAnonymous)
return data
def OutputString(self):
@@ -1489,7 +1494,8 @@
GetWay:%d,
PacketCnt:%d,
State:%d,
- Wish:%s
+ Wish:%s,
+ IsAnonymous:%d
'''\
%(
self.RedPacketID,
@@ -1502,7 +1508,8 @@
self.GetWay,
self.PacketCnt,
self.State,
- self.Wish
+ self.Wish,
+ self.IsAnonymous
)
return DumpString
@@ -20843,6 +20850,7 @@
("Cmd", c_ubyte),
("SubCmd", c_ubyte),
("HasSendGold", c_int), # 已用额度
+ ("ServerGrabCnt", c_int), # 全服红包已抢次数
]
def __init__(self):
@@ -20860,6 +20868,7 @@
self.Cmd = 0xA5
self.SubCmd = 0x05
self.HasSendGold = 0
+ self.ServerGrabCnt = 0
return
def GetLength(self):
@@ -20872,12 +20881,14 @@
DumpString = '''// A5 05 通知家族钻石红包已用额度 //tagMCFamilyRedPacketGoldLimit:
Cmd:%s,
SubCmd:%s,
- HasSendGold:%d
+ HasSendGold:%d,
+ ServerGrabCnt:%d
'''\
%(
self.Cmd,
self.SubCmd,
- self.HasSendGold
+ self.HasSendGold,
+ self.ServerGrabCnt
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyRedPacket.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyRedPacket.py
index db0a347..4e2b21a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyRedPacket.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyRedPacket.py
@@ -48,6 +48,7 @@
if onEventType == ShareDefine.Def_OnEventType:
#发钻石红包额度重置
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyRedPacketGoldLimit, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ServerRedPacketGrabCnt, 0)
__NotifyGoldLimt(curPlayer)
elif onEventType == ShareDefine.Def_OnEventTypeEx:
oscDay = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg')
@@ -57,6 +58,34 @@
sendCnt = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg', 5)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketCanGrabCnt, grabCnt+sendCnt)
NotifyOSRedPacket(curPlayer)
+ return
+
+def OnPlayerRecharge(curPlayer, orderRMB):
+ ## 玩家充值
+
+ todayCoin = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AllCoinToday)
+ # 每日首充红包
+ if todayCoin - orderRMB * 100 == 0:
+ dayFirstRedPacketID = IpyGameDataPY.GetFuncCfg("RechargeRedPacket", 1)
+ GameWorld.DebugLog("每日首充红包: dayFirstRedPacketID=%s" % dayFirstRedPacketID)
+ if dayFirstRedPacketID:
+ CreatRedPacketByID(curPlayer, dayFirstRedPacketID)
+ #else:
+ # GameWorld.DebugLog("非每日首充: todayCoin=%s" % todayCoin)
+
+ # 单笔充值红包
+ rmbRedPacketID = 0
+ rmbRedPackIDDict = IpyGameDataPY.GetFuncEvalCfg("RechargeRedPacket", 2, {})
+ rmbList = rmbRedPackIDDict.keys()
+ rmbList.sort()
+ for rmb in rmbList:
+ if orderRMB <= rmb:
+ rmbRedPacketID = rmbRedPackIDDict[rmb]
+ break
+
+ if rmbRedPacketID:
+ GameWorld.DebugLog("单笔充值红包: orderRMB=%s,rmbRedPacketID=%s" % (orderRMB, rmbRedPacketID))
+ CreatRedPacketByID(curPlayer, rmbRedPacketID)
return
def CreatCacheRedPacktet(curPlayer):
@@ -91,6 +120,8 @@
if not PlayerFeastRedPacket.GetFeastRedPacketState():
GameWorld.DebugLog(' 非节日红包活动中,不可发送!')
return
+ isFamilyRedPacket = False
+ elif getType == ShareDefine.RedPackType_Server:
isFamilyRedPacket = False
else:
if not curPlayer.GetFamilyID():
@@ -141,7 +172,7 @@
return
-#// A6 08 发家族红包 #tagCMSendFamilyRedPacket
+#// A6 08 发家族红包 #tagCMSendFamilyRedPacket
#
#struct tagCMSendFamilyRedPacket
#{
@@ -149,8 +180,8 @@
# DWORD RedPacketID; // 红包ID,没有发0
# WORD PacketCnt; // 红包数量
# WORD MoneyNum; //金钱数量
-# WORD WishLen; //祝福语长度
-# char Wish[NameLen]; //size=WishLen
+# char Wish[33]; //祝福语
+# BYTE IsAnonymous; //是否匿名
#};
## 发家族红包
def OnSendFamilyRedPacket(index, clientData, tick):
@@ -159,6 +190,7 @@
packetCnt = clientData.PacketCnt
moneyNum = clientData.MoneyNum
wishInfo = clientData.Wish
+ isAnonymous = clientData.IsAnonymous
if not redPacketID:
#主动发的钻石红包 vip限制
if not PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FamilyGoldPack):
@@ -167,7 +199,7 @@
__DoCreatRedPacket(curPlayer, ShareDefine.RedPackType_GoldPacket, IPY_GameWorld.TYPE_Price_Gold_Money, moneyNum, packetCnt, State_NoGot, wishInfo)
else:
# 注意:该函数发放的是已创建的红包,该操作只是把该红包开放给玩家可抢
- msg = str([curPlayer.GetPlayerID(), redPacketID, packetCnt])
+ msg = str([curPlayer.GetPlayerID(), redPacketID, packetCnt, isAnonymous])
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "SendFamilyRedPacket", msg, len(msg))
return
@@ -178,6 +210,7 @@
packData = ChPyNetSendPack.tagMCFamilyRedPacketGoldLimit()
packData.Clear()
packData.HasSendGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyRedPacketGoldLimit, 0)
+ packData.ServerGrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ServerRedPacketGrabCnt)
NetPackCommon.SendFakePack(curPlayer, packData)
return
@@ -213,11 +246,13 @@
canGrabCnt = GetOSCanGrabCnt(curPlayer)
elif reqGetWay == ShareDefine.RedPackType_FeastSucc:
canGrabCnt = PlayerFeastRedPacket.GetFeastSuccRedPacketCanGrabCnt(curPlayer)
+ elif reqGetWay == ShareDefine.RedPackType_Server:
+ canGrabCnt = GetServerRedPackCanGrabCnt(curPlayer)
else:
canGrabCnt = -1
msg = str([redPacketID, reqGetWay, canGrabCnt])
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "GrabFamilyRedPacket", msg, len(msg))
- GameWorld.DebugLog(' 抢红包 getWay=%s,canGrabCnt=%s' % (reqGetWay, canGrabCnt))
+ GameWorld.DebugLog(' 抢红包 redPacketID=%s,getWay=%s,canGrabCnt=%s' % (redPacketID, reqGetWay, canGrabCnt))
return
@@ -264,6 +299,33 @@
NotifyOSRedPacket(curPlayer)
return
+def GetServerRedPackCanGrabCnt(curPlayer):
+ #获取全服红包可抢次数
+ # @return: -1为不限
+ vipLVMaxGrabCntDict = IpyGameDataPY.GetFuncEvalCfg("RechargeRedPacket", 3, {})
+ vipLVList = vipLVMaxGrabCntDict.keys()
+ vipLVList.sort()
+ for vipLV in vipLVList:
+ if curPlayer.GetVIPLv() <= vipLV:
+ maxGrabCnt = vipLVMaxGrabCntDict[vipLV]
+ if not maxGrabCnt:
+ return -1
+ todayGrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ServerRedPacketGrabCnt)
+ return max(0, maxGrabCnt - todayGrabCnt)
+ return 0
+
+def GrabServerRedPacketResult(curPlayer, moneyNum, isSelf):
+ ##抢全服红包结果
+
+ if isSelf:
+ return
+
+ grabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ServerRedPacketGrabCnt)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ServerRedPacketGrabCnt, grabCnt + 1)
+
+ __NotifyGoldLimt(curPlayer)
+ return
+
def ProcessOSRedPacket(curPlayer, tick):
return
#开服红包恢复次数
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GrabFamilyRedPacketResult.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GrabFamilyRedPacketResult.py
index d6bffb9..85ddc37 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GrabFamilyRedPacketResult.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GrabFamilyRedPacketResult.py
@@ -54,6 +54,8 @@
PlayerFamilyRedPacket.GrabOSRedPacketResult(curPlayer, moneyNum, isSelf)
elif getWay in ShareDefine.FeastRedPackType:
PlayerFeastRedPacket.GrabFeastRedPacketResult(curPlayer, moneyNum, getWay, isSelf)
+ elif getWay == ShareDefine.RedPackType_Server:
+ PlayerFamilyRedPacket.GrabServerRedPacketResult(curPlayer, moneyNum, isSelf)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 38b4c10..db8a215 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1871,10 +1871,13 @@
RedPackType_FeastSysBig = 31 # 节日系统大红包
RedPackType_FeastSysSmall = 32 # 节日系统小红包
RedPackType_FeastSucc = 33 # 节日成就红包
+RedPackType_Server = 36 # 全服红包
+
# 节日红包类型
FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
# 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
RedPackMaxCountDict = {1:[RedPackType_OpenServer],
2:[RedPackType_FeastSucc],
+ 3:[RedPackType_Server],
}
--
Gitblit v1.8.0