6087 【后端】【1.5.200】春节红包雨活动(广播红包雨;新增红包GM命令 SetRedPacket)
7个文件已修改
139 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
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)
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
@@ -87,16 +87,20 @@
##---------------------------------------- 节日红包 -----------------------------------------------
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:
    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)
                
@@ -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
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],
                       }
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
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)
    #地图经验
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],
                       }