From f6b1972e51bb85ede4dcf4fbc3daf9f660c67cf4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 30 一月 2019 15:40:47 +0800
Subject: [PATCH] 6087 【后端】【1.5.200】春节红包雨活动(广播红包雨;新增红包GM命令 SetRedPacket)
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py | 20 ++++--
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py | 50 +++++++++++++++-
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py | 65 +++++++++++----------
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py | 2
7 files changed, 99 insertions(+), 46 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
index 91c1464..9a5ae44 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
@@ -18,6 +18,8 @@
import PlayerFamilyRedPacket
import ShareDefine
import GameWorld
+import IpyGameDataPY
+import PlayerDBGSEvent
## GM命令执行入口
@@ -29,21 +31,61 @@
if not paramList:
return
+# GameWorld.DebugAnswer(curPlayer, "重置所有红包领取:SetRedPacket 0")
+# GameWorld.DebugAnswer(curPlayer, "清除所有类型红包:SetRedPacket 0 0")
+# GameWorld.DebugAnswer(curPlayer, "清除指定类型红包:SetRedPacket 0 类型A 类型B ...")
+
+ paramA = paramList[0]
+ paramB = paramList[1] if len(paramList) > 1 else None
# 重置所有红包数据
- if len(paramList) == 1 and paramList[0] == 0:
- GameWorld.DebugAnswer(curPlayer, "清除所有红包领取记录")
+ if paramA == 0:
PlayerFamilyRedPacket.g_allRecordDict = {}
PlayerFamilyRedPacket.g_grabDataDict = {}
PlayerFamilyRedPacket.g_redPackCountDict = {}
- recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord
universalRecMgr = GameWorld.GetUniversalRecMgr()
- universalRecMgr.Delete(recordType)
+ # 清除所有类型红包
+ if paramB == 0:
+ universalRecMgr.Delete(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord)
+ __ResetSendState([])
+ GameWorld.DebugAnswer(curPlayer, "清除所有类型红包OK!")
+
+ # 清除指定类型红包
+ elif paramB:
+ delTypeList = paramList[1:]
+ allRecordList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord)
+ delCount = 0
+ for index in xrange(allRecordList.Count()):
+ universalRecData = allRecordList.At(index - delCount)
+ strValue1 = universalRecData.GetStrValue1()
+ strValue1List = strValue1.split('|')
+ getWay = int(strValue1List[3])
+ if getWay not in delTypeList:
+ continue
+ allRecordList.Delete(index)
+ delCount += 1
+ __ResetSendState(delTypeList)
+ GameWorld.DebugAnswer(curPlayer, "清除指定类型红包OK!%s,条数:%s" % (delTypeList, delCount))
+
+ # 清除抢的记录
+ universalRecMgr.Delete(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord)
PlayerFamilyRedPacket.NotifyRedPacketInfo(curPlayer)
+ GameWorld.DebugAnswer(curPlayer, "清除所有红包领取记录OK!")
return
return
+def __ResetSendState(delTypeList):
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetFamilyRedPackCount()):
+ ipyData = ipyDataMgr.GetFamilyRedPackByIndex(index)
+ if delTypeList and ipyData.GetGetType() not in delTypeList:
+ continue
+ redPackID = ipyData.GetID()
+ if PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerFamilyRedPacket.DBKey_RedPacketSend % redPackID):
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerFamilyRedPacket.DBKey_RedPacketSend % redPackID, 0)
+ return
+
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index 74a25aa..3c5ea40 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -473,8 +473,8 @@
PlayerNewFairyCeremony.ResetNewFairyCeremony()
elif actName == ShareDefine.OperationActionName_FeastRedPacket:
#重置节日红包
- if ipyData and dayIndex == 0:
- PlayerFamilyRedPacket.OnResetFeastRedPacket(ipyData)
+ if ipyData:
+ PlayerFamilyRedPacket.OnResetFeastRedPacket(ipyData, dayIndex)
elif actName == ShareDefine.OperationActionName_FlashSale:
#限时抢购重置购买次数 本次活动每场不能重复
#dayIndex = sendMapServerMsgDict.get(ShareDefine.ActKey_DayIndex, 0)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
index 88e6adb..7264f0b 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
## 生成新红包
@@ -254,22 +255,7 @@
job = curPlayer.GetJob()
jobRank = PlayerControl.GetJobRank(curPlayer)
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', [getType])
+ __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, wishStr, data=data)
return
def CreatNewFamilyRedPacket(family, playerID, redPackID):
@@ -293,13 +279,11 @@
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
@@ -314,6 +298,7 @@
GameWorld.DebugLog("当前红包数: g_redPackCountDict=%s" % g_redPackCountDict)
break
+ familyID = family.GetID() if family else 0
recData = recordList.AddRec()
@@ -337,6 +322,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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index a91cb04..6680a4f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1873,6 +1873,6 @@
FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
# 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
RedPackMaxCountDict = {1:[RedPackType_OpenServer],
- 2:[RedPackType_FeastSysBig, RedPackType_FeastSysSmall],
+ 2:[RedPackType_FeastSucc],
}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py
index b93b483..3e4e9f2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py
@@ -19,6 +19,7 @@
import PlayerControl
import ChConfig
import PlayerFamilyRedPacket
+import PlayerFeastRedPacket
import IpyGameDataPY
import PlayerSuccess
@@ -29,17 +30,23 @@
# @remarks 函数详细说明.
def OnExec(curPlayer, paramList):
if not paramList:
- GameWorld.DebugAnswer(curPlayer, "重置红包:SetRedPacket 0")
- GameWorld.DebugAnswer(curPlayer, "SetRedPacket 红包功能 可抢个数 已抢额度")
+ GameWorld.DebugAnswer(curPlayer, "重置所有红包领取:SetRedPacket 0")
+ GameWorld.DebugAnswer(curPlayer, "清除所有类型红包:SetRedPacket 0 0")
+ GameWorld.DebugAnswer(curPlayer, "清除指定类型红包:SetRedPacket 0 类型A 类型B ...")
+ GameWorld.DebugAnswer(curPlayer, "设置功能红包数据:SetRedPacket 红包功能 可抢个数 已抢额度")
GameWorld.DebugAnswer(curPlayer, "红包功能: 1-开服红包;2-节日红包")
return
+ paramA = paramList[0]
# 重置所有红包数据
- if len(paramList) == 1 and paramList[0] == 0:
+ if paramA == 0:
__DOResetSuccRedPack(curPlayer)
__DoResetRedPackFunc(curPlayer, 1, None, 0)
__DoResetRedPackFunc(curPlayer, 2, None, 0)
- curPlayer.GameServer_GMCmd("SetRedPacket 0") # 发送到GameServer清除红包
+ paramStr = ""
+ for param in paramList:
+ paramStr += " %s" % param
+ curPlayer.GameServer_GMCmd("SetRedPacket%s" % paramStr) # 发送到GameServer清除红包
return
if len(paramList) == 3:
@@ -84,8 +91,9 @@
elif redPackFuncType == 2:
if not isinstance(grabCount, int):
grabCount = IpyGameDataPY.GetFuncCfg('FeastRedPacket', 1)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketCanGrabCnt, grabCount)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketGrabMoney, grabMoney)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, grabCount)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketGrabMoney, grabMoney)
+ PlayerFeastRedPacket.Sync_FeastRedPackInfo(curPlayer)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index c99aa27..981b4d0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -1269,7 +1269,7 @@
#成就
PlayerSuccess.FinishDelayAddSuccessProgress(curPlayer, tick, False)
#开服红包处理
- PlayerFamilyRedPacket.ProcessOSRedPacket(curPlayer, tick)
+ #PlayerFamilyRedPacket.ProcessOSRedPacket(curPlayer, tick)
#限时抢购
PlayerFlashSale.ProcessFlashSaleMail(curPlayer, tick)
#地图经验
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index a91cb04..6680a4f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1873,6 +1873,6 @@
FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
# 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
RedPackMaxCountDict = {1:[RedPackType_OpenServer],
- 2:[RedPackType_FeastSysBig, RedPackType_FeastSysSmall],
+ 2:[RedPackType_FeastSucc],
}
--
Gitblit v1.8.0