From 593c79cbe45d9a6722f57d0e0287de3b11a79917 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期日, 09 十月 2022 16:26:58 +0800 Subject: [PATCH] 9687 【后端】【越南】【主干】【BT7】野外根据境界动态刷怪(修复切分线境界难度刷怪异常bug) --- ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py | 96 ++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 81 insertions(+), 15 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py index 91c1464..8cbc53c 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py @@ -15,9 +15,13 @@ #"""Version = 2019-01-29 16:00""" #------------------------------------------------------------------------------- -import PlayerFamilyRedPacket -import ShareDefine import GameWorld +import IpyGameDataPY +import PlayerDBGSEvent +import PlayerFamilyRedPacket +import ChPyNetSendPack +import NetPackCommon +import ShareDefine ## GM命令执行入口 @@ -26,23 +30,85 @@ # @return None or True # @remarks 函数详细说明. def OnExec(curPlayer, paramList): + GameWorld.DebugLog("执行GameServer->SetRedPacket: %s" % paramList) if not paramList: +# GameWorld.DebugAnswer(curPlayer, "---------------------------") +# GameWorld.DebugAnswer(curPlayer, "清所有红包:SetRedPacket 0") +# GameWorld.DebugAnswer(curPlayer, "清指定红包:SetRedPacket 0 类型A 类型B ...") +# GameWorld.DebugAnswer(curPlayer, "发指定红包:SetRedPacket 1 红包编号 个数") +# GameWorld.DebugAnswer(curPlayer, "设置抢红包:SetRedPacket 2 红包功能 可抢数 已抢额度") +# GameWorld.DebugAnswer(curPlayer, "红包功能:1-开服红包;2-节日红包") return - # 重置所有红包数据 - if len(paramList) == 1 and paramList[0] == 0: - GameWorld.DebugAnswer(curPlayer, "清除所有红包领取记录") - PlayerFamilyRedPacket.g_allRecordDict = {} - PlayerFamilyRedPacket.g_grabDataDict = {} - PlayerFamilyRedPacket.g_redPackCountDict = {} + paramA = paramList[0] + if paramA == 0: + 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))) - recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord - universalRecMgr = GameWorld.GetUniversalRecMgr() - universalRecMgr.Delete(recordType) - PlayerFamilyRedPacket.NotifyRedPacketInfo(curPlayer) - return - - + if delRedIDList: + sendPack = ChPyNetSendPack.tagGCRedPacketDel() + sendPack.DelRedPacketID = delRedIDList + sendPack.Cnt = len(delRedIDList) + + playerManager = GameWorld.GetPlayerManager() + for index in xrange(playerManager.GetPlayerCount()): + curPlayer = playerManager.GetPlayerByIndex(index) + if not curPlayer.GetID(): + continue + NetPackCommon.SendFakePack(curPlayer, sendPack) + + elif paramA == 1: + redPackID = paramList[1] if len(paramList) > 1 else 0 + sendCount = paramList[2] if len(paramList) > 2 else 0 + sendCount = min(100, sendCount) + ipyData = IpyGameDataPY.GetIpyGameData('FamilyRedPack', redPackID) + if not ipyData: + return + getType = ipyData.GetGetType() + wayType = PlayerFamilyRedPacket.GetRedPackGetWayType(getType) + if wayType == ShareDefine.RedPackWayType_Family: + return + openTime = ipyData.GetPacketOpenTime() # 如果有指定发放时间的 + if openTime: + sendCount = 1 + for _ in xrange(sendCount): + PlayerFamilyRedPacket.CreateSystemRedPacket(redPackID) + GameWorld.DebugAnswer(curPlayer, "成功发送红包编号:%s 共:%s个" % (redPackID, sendCount)) + + else: + GameWorld.DebugAnswer(curPlayer, "红包命令参数错误!") + + 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 -- Gitblit v1.8.0