From eb687522f9474a04716596f6c82e38f2f060b211 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 23 四月 2021 18:13:26 +0800 Subject: [PATCH] 8901 【BT2】【后端】全服红包(修改红包GM命令;修复限制下发全服红包补充可领红包逻辑) --- ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py | 95 +++++++++++++++++++++++++++-------------------- 1 files changed, 55 insertions(+), 40 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py index 9a5ae44..cd8ba65 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py @@ -15,11 +15,12 @@ #"""Version = 2019-01-29 16:00""" #------------------------------------------------------------------------------- -import PlayerFamilyRedPacket -import ShareDefine import GameWorld import IpyGameDataPY import PlayerDBGSEvent +import PlayerFamilyRedPacket +import ChPyNetSendPack +import NetPackCommon ## GM命令执行入口 @@ -28,52 +29,66 @@ # @return None or True # @remarks 函数详细说明. def OnExec(curPlayer, paramList): + GameWorld.DebugLog("执行GameServer->SetRedPacket: %s" % paramList) if not paramList: +# GameWorld.DebugAnswer(curPlayer, "清除所有类型红包:SetRedPacket 0") +# GameWorld.DebugAnswer(curPlayer, "清除指定类型红包:SetRedPacket 0 类型A 类型B ...") +# GameWorld.DebugAnswer(curPlayer, "发送全服系统红包:SetRedPacket 36 红包编号 个数") +# GameWorld.DebugAnswer(curPlayer, "全服系统红包编号:126~130") +# GameWorld.DebugAnswer(curPlayer, "红包类型:36-全服红包;33-节日成就") 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 paramA == 0: - PlayerFamilyRedPacket.g_allRecordDict = {} - PlayerFamilyRedPacket.g_grabDataDict = {} - PlayerFamilyRedPacket.g_redPackCountDict = {} + delRedIDList = [] + delTypeList = paramList[1:] + redpacketMgr = PlayerFamilyRedPacket.GetRedpacketMgr() + for redPacketID, redPacketObj in redpacketMgr.allRedPacketDict.items(): + getWay = redPacketObj.getWay + if delTypeList and getWay not in delTypeList: + continue + delRedIDList.append(redPacketID) + redpacketMgr.allRedPacketDict.pop(redPacketID) + familyID = redPacketObj.familyID + if familyID in redpacketMgr.familyRedPacketDict: + redpacketMgr.DelFamilyRedPacketID(familyID, redPacketID) + redpacketMgr.DelActiveRedPacketID(getWay, redPacketID) + for playerID in redpacketMgr.playerNosendRedPacketIDInfo.keys(): + redpacketMgr.DelPlayerNosendRedPacketID(playerID, getWay, redPacketID) + for playerID in redpacketMgr.playerCanGetRedPacketIDInfo.keys(): + redpacketMgr.DelPlayerCanGetRedPacketID(playerID, getWay, redPacketID) + if redPacketID in redpacketMgr.notifyAllServerRedPacketIDList: + redpacketMgr.notifyAllServerRedPacketIDList.remove(redPacketID) + + __ResetSendState(delTypeList) + GameWorld.DebugAnswer(curPlayer, "清除类型红包OK!%s,条数:%s" % (delTypeList, len(delRedIDList))) - universalRecMgr = GameWorld.GetUniversalRecMgr() - # 清除所有类型红包 - if paramB == 0: - universalRecMgr.Delete(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord) - __ResetSendState([]) - GameWorld.DebugAnswer(curPlayer, "清除所有类型红包OK!") + if delRedIDList: + sendPack = ChPyNetSendPack.tagGCRedPacketDel() + sendPack.DelRedPacketID = delRedIDList + sendPack.Cnt = len(delRedIDList) - # 清除指定类型红包 - 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: + playerManager = GameWorld.GetPlayerManager() + for index in xrange(playerManager.GetPlayerCount()): + curPlayer = playerManager.GetPlayerByIndex(index) + if not curPlayer.GetID(): 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 - - + NetPackCommon.SendFakePack(curPlayer, sendPack) + + elif paramA == 36: + redPackID = paramList[1] if len(paramList) > 1 else 0 + sendCount = paramList[2] if len(paramList) > 2 else 0 + sendCount = min(100, sendCount) + canSendRedPacketIDList = range(126, 130 + 1) + [] + if redPackID not in canSendRedPacketIDList or not sendCount: + GameWorld.DebugAnswer(curPlayer, "发送全服系统红包参数错误!") + return + for _ in xrange(sendCount): + PlayerFamilyRedPacket.CreateSystemRedPacket(redPackID) + GameWorld.DebugAnswer(curPlayer, "成功发送红包编号:%s 共:%s个" % (redPackID, sendCount)) + + else: + GameWorld.DebugAnswer(curPlayer, "红包命令参数错误!") return def __ResetSendState(delTypeList): -- Gitblit v1.8.0