xdh
2018-08-14 d1ad5d9c180f06127775498044c239d980689dbd
fix:2385 boss复活调整
21个文件已修改
1 文件已重命名
2个文件已删除
2个文件已添加
982 ■■■■■ 已修改文件
PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.des 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.h 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornPoint.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo 补丁 | 查看 | 原始文档 | blame | 历史
PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.des 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.h 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBG.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 290 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 290 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BossHome.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.des
File was deleted
PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.h
File was deleted
PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornPoint.h
@@ -4,4 +4,5 @@
{
    tagHead        Head;
    DWORD        Point;    // 复活点数
    DWORD        TotalPoint;    // 复活总点数
};
PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo
PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.des
New file
@@ -0,0 +1 @@
AB 04 Boss复活活动信息 #tagMCBossRebornInfo
PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.h
New file
@@ -0,0 +1,27 @@
// AB 04 Boss复活活动信息 #tagMCBossRebornInfo
struct    tagMCBossRebornAwardItem
{
    DWORD        ItemID;
    WORD        ItemCount;
    BYTE        IsBind;
};
struct    tagMCBossRebornTaskInfo
{
    BYTE        TaskID;    // id
    BYTE        TotalTimes;    // 可完成总次数,0表示不限次数
    BYTE        SingleTimes;    // 单次领奖需要次数
    BYTE        AwardItemCount;    // 奖励物品数
    tagMCBossRebornAwardItem        AwardItem[AwardItemCount];    // 奖励物品信息
};
struct    tagMCBossRebornInfo
{
    tagHead        Head;
    char        StartDate[10];    // 开始日期 y-m-d
    char        EndtDate[10];    // 结束日期 y-m-d
    WORD        LimitLV;    // 限制等级
    BYTE        TaskCnt;
    tagMCBossRebornTaskInfo        TaskInfo[TaskCnt];
};
PySysDB/PySysDBG.h
@@ -253,6 +253,7 @@
    dict        NotifyInfoStart;    //全服提示信息 - 相对开始时间
    dict        NotifyInfoEnd;    //全服提示信息 - 相对结束时间
    WORD        LVLimit;    //限制等级
    BYTE        TemplateID;    //模板编号
};
//仙界盛典活动时间表
PySysDB/PySysDBPY.h
@@ -1132,16 +1132,11 @@
struct tagBossReborn
{
    BYTE        _ID;    //ID
    BYTE        _TemplateID;    //模板ID
    BYTE        _ID;    //活动条目ID
    DWORD        TotalTimes;    //可完成的总次数,0表示不限次数
    WORD        SingleTimes;    //单次领奖需要的次数
    list        RewardItemID1;    //奖励物品ID1
    list        RewardItemCnt1;    //奖励物品数量1
    list        RewardItemID2;    //奖励物品ID2
    list        RewardItemCnt2;    //奖励物品数量2
    list        RewardItemID3;    //奖励物品ID3
    list        RewardItemCnt3;    //奖励物品数量3
    list        WorldLVList;    //世界等级
    list        Reward;    //奖励物品ID1
};
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -4129,84 +4129,6 @@
#------------------------------------------------------
# AC 07 BOSS复活活动信息 #tagGCBossRebornInfo
class  tagGCBossRebornInfo(Structure):
    Head = tagHead()
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    WorldLV = 0    #(WORD WorldLV)// 世界等级
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAC
        self.Head.SubCmd = 0x07
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAC
        self.Head.SubCmd = 0x07
        self.StartDate = ""
        self.EndtDate = ""
        self.WorldLV = 0
        self.LimitLV = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 10
        length += 10
        length += 2
        length += 2
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteWORD(data, self.WorldLV)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                StartDate:%s,
                                EndtDate:%s,
                                WorldLV:%d,
                                LimitLV:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.StartDate,
                                self.EndtDate,
                                self.WorldLV,
                                self.LimitLV
                                )
        return DumpString
m_NAtagGCBossRebornInfo=tagGCBossRebornInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornInfo.Head.Cmd,m_NAtagGCBossRebornInfo.Head.SubCmd))] = m_NAtagGCBossRebornInfo
#------------------------------------------------------
# AC 08 boss复活点数通知 #tagGCBossRebornPoint
class  tagGCBossRebornPoint(Structure):
@@ -4215,6 +4137,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Point", c_int),    # 复活点数
                  ("TotalPoint", c_int),    # 复活总点数
                  ]
    def __init__(self):
@@ -4232,6 +4155,7 @@
        self.Cmd = 0xAC
        self.SubCmd = 0x08
        self.Point = 0
        self.TotalPoint = 0
        return
    def GetLength(self):
@@ -4244,12 +4168,14 @@
        DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
                                Cmd:%s,
                                SubCmd:%s,
                                Point:%d
                                Point:%d,
                                TotalPoint:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Point
                                self.Point,
                                self.TotalPoint
                                )
        return DumpString
@@ -20431,6 +20357,210 @@
#------------------------------------------------------
# AB 04 Boss复活活动信息 #tagMCBossRebornInfo
class  tagMCBossRebornAwardItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("ItemCount", c_ushort),
                  ("IsBind", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.ItemCount = 0
        self.IsBind = 0
        return
    def GetLength(self):
        return sizeof(tagMCBossRebornAwardItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo:
                                ItemID:%d,
                                ItemCount:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.ItemID,
                                self.ItemCount,
                                self.IsBind
                                )
        return DumpString
class  tagMCBossRebornTaskInfo(Structure):
    TaskID = 0    #(BYTE TaskID)// id
    TotalTimes = 0    #(BYTE TotalTimes)// 可完成总次数,0表示不限次数
    SingleTimes = 0    #(BYTE SingleTimes)// 单次领奖需要次数
    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
    AwardItem = list()    #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AwardItemCount):
            temAwardItem = tagMCBossRebornAwardItem()
            _pos = temAwardItem.ReadData(_lpData, _pos)
            self.AwardItem.append(temAwardItem)
        return _pos
    def Clear(self):
        self.TaskID = 0
        self.TotalTimes = 0
        self.SingleTimes = 0
        self.AwardItemCount = 0
        self.AwardItem = list()
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 1
        length += 1
        length += 1
        for i in range(self.AwardItemCount):
            length += self.AwardItem[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.TaskID)
        data = CommFunc.WriteBYTE(data, self.TotalTimes)
        data = CommFunc.WriteBYTE(data, self.SingleTimes)
        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
        for i in range(self.AwardItemCount):
            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                TaskID:%d,
                                TotalTimes:%d,
                                SingleTimes:%d,
                                AwardItemCount:%d,
                                AwardItem:%s
                                '''\
                                %(
                                self.TaskID,
                                self.TotalTimes,
                                self.SingleTimes,
                                self.AwardItemCount,
                                "..."
                                )
        return DumpString
class  tagMCBossRebornInfo(Structure):
    Head = tagHead()
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    TaskCnt = 0    #(BYTE TaskCnt)
    TaskInfo = list()    #(vector<tagMCBossRebornTaskInfo> TaskInfo)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAB
        self.Head.SubCmd = 0x04
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TaskCnt):
            temTaskInfo = tagMCBossRebornTaskInfo()
            _pos = temTaskInfo.ReadData(_lpData, _pos)
            self.TaskInfo.append(temTaskInfo)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAB
        self.Head.SubCmd = 0x04
        self.StartDate = ""
        self.EndtDate = ""
        self.LimitLV = 0
        self.TaskCnt = 0
        self.TaskInfo = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 10
        length += 10
        length += 2
        length += 1
        for i in range(self.TaskCnt):
            length += self.TaskInfo[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.TaskCnt)
        for i in range(self.TaskCnt):
            data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                StartDate:%s,
                                EndtDate:%s,
                                LimitLV:%d,
                                TaskCnt:%d,
                                TaskInfo:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.StartDate,
                                self.EndtDate,
                                self.LimitLV,
                                self.TaskCnt,
                                "..."
                                )
        return DumpString
m_NAtagMCBossRebornInfo=tagMCBossRebornInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo
#------------------------------------------------------
# AB 23 摇骰子奖励回包 #tagMCDiceAward
class  tagMCDiceAward(Structure):
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -71,11 +71,7 @@
        ipyData = operationActionDict[ShareDefine.OperationActionName_ExpRate][0]
        if ipyData:
            Sync_OperationAction_ExpRate(ipyData, curPlayer)
    # BOSS复活活动进行中
    if ShareDefine.OperationActionName_BossReborn in operationActionDict:
        ipyData = operationActionDict[ShareDefine.OperationActionName_BossReborn][0]
        if ipyData:
            GameWorldBoss.Sync_OperationAction_BossReborn(ipyData, curPlayer)
    # 仙界盛典活动进行中
    if ShareDefine.OperationActionName_FairyCeremony in operationActionDict:
        ipyData = operationActionDict[ShareDefine.OperationActionName_FairyCeremony][0]
@@ -327,7 +323,11 @@
                             ShareDefine.ActKey_ShopTypeList:todayShopType}
    # Boss复活活动
    elif actName == ShareDefine.OperationActionName_BossReborn:
        mapServerInfoDict = {ShareDefine.ActKey_ID:actID}
        mapServerInfoDict = {ShareDefine.ActKey_ID:actID,
                             ShareDefine.ActKey_TemplateID:ipyData.GetTemplateID(),
                             ShareDefine.ActKey_StartDate:ipyData.GetStartDate(),
                             ShareDefine.ActKey_EndDate:ipyData.GetEndDate(),
                             ShareDefine.ActKey_LVLimit:ipyData.GetLVLimit(),}
    # 限时礼包活动
    elif actName == ShareDefine.OperationActionName_FlashGiftbag:
        isDayReset = ipyData.GetIsDayReset()
@@ -397,7 +397,8 @@
                PlayerControl.WorldNotify(0, notifyKey, paramList)
                
        dictName = ChConfig.Def_WorldKey_OperationActionState % actName
        if not isReload and gameWorld.GetDictByKey(dictName) == state:
        preState = gameWorld.GetDictByKey(dictName)
        if not isReload and preState == state:
            #已经是这个状态了
            continue
        #更新字典值
@@ -408,6 +409,11 @@
        curActID = sendMapServerMsgDict.get(ShareDefine.ActKey_ID)
        if state >= 1 and curActID and PlayerDBGSEvent.GetDBGSTrig_ByKey(dbOperationActIDKey) != curActID:
            PlayerDBGSEvent.SetDBGSTrig_ByKey(dbOperationActIDKey, curActID)
            if actName in ShareDefine.NeedWorldLVOperationActNameList:
                #记录开启时世界等级
                worldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
                PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % actName, worldLV)
            #此处为活动开启时
            if actName == ShareDefine.OperationActionName_BossReborn:
                #重置BOSS复活点
@@ -416,10 +422,7 @@
                #重置仙界盛典
                PlayerFairyCeremony.ResetFairyCeremony()
            
            if actName in ShareDefine.NeedWorldLVOperationActNameList:
                #记录开启时世界等级
                worldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
                PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % actName, worldLV)
                
        if state == 1 and actName in ShareDefine.NeedWorldLVOperationActNameList:
            actWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % actName)
@@ -434,11 +437,12 @@
                pass
        elif actName == ShareDefine.OperationActionName_BossReborn:
            if isReload and ipyData:
                GameWorldBoss.Sync_OperationAction_BossReborn(ipyData)
                GameWorldBoss.SetBossRebornNeedPoint(True)
        elif actName == ShareDefine.OperationActionName_FairyCeremony:
            if isReload and ipyData:
                PlayerFairyCeremony.Sync_OperationAction_FairyCeremony(ipyData)
            if state == 0:
            if preState != state and state == 0:
                PlayerFairyCeremony.OnFairyCeremonyEnd()
        elif actName == ShareDefine.OperationActionName_RealmPoint:
            if isReload and ipyData:
@@ -449,7 +453,7 @@
        sendMapServerMsgDict[ShareDefine.ActKey_State] = state
        GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OperationActionInfo % actName, sendMapServerMsgDict)
        
        GameWorld.Log("运营活动变更: actName=%s,state=%s,dictName=%s, %s" % (actName, state, dictName, sendMapServerMsgDict))
        GameWorld.Log("运营活动变更: actName=%s,preState=%s,state=%s,dictName=%s, %s" % (actName, preState, state, dictName, sendMapServerMsgDict))
    return
def Sync_OperationAction_ExpRate(ipyData, curPlayer=None):
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
@@ -888,7 +888,7 @@
        return
    totalPoint = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_BossRebornNeedPoint)
    if not totalPoint:
        totalPoint = __SetBossRebornNeedPoint()
        totalPoint = SetBossRebornNeedPoint()
    if not totalPoint:
        GameWorld.Log(' 增加boss复活点 没有总点数!!!!')
        return
@@ -935,27 +935,35 @@
def ResetBossRebornPoint():
    ## 重置boss复活点
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BossRebornPoint, 0)
    Sync_BossRebornPoint()
    # 活动开启时设置参数 服务器人数
    lvLimit = IpyGameDataPY.GetFuncCfg('ServerActivePlayerCnt')
    yesterdayPlayerCnt = len([1 for lv in PyGameData.g_yesterdayPlayerLVDict.values() if lv >= lvLimit]) #参数昨日活跃人数
    serverActivePlayerCnt = eval(IpyGameDataPY.GetFuncCompileCfg('ServerActivePlayerCnt', 2))
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BRServerPlayerCnt, serverActivePlayerCnt)
    GameWorld.Log('    boss复活活动开启时设置昨日活跃人数yesterdayPlayerCnt=%s'%yesterdayPlayerCnt)
    #重新计算需要总点数
    __SetBossRebornNeedPoint()
    SetBossRebornNeedPoint()
    Sync_BossRebornPoint()
    return
def __SetBossRebornNeedPoint():
def SetBossRebornNeedPoint(isSync=False):
    totalPointList = IpyGameDataPY.GetFuncEvalCfg('BossRebornTotalPoint')
    worldLVList = IpyGameDataPY.GetFuncEvalCfg('BossRebornTotalPoint', 2)
    playerCntList = IpyGameDataPY.GetFuncEvalCfg('BossRebornTotalPoint', 2)
    
    actWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % ShareDefine.OperationActionName_BossReborn)
    BRServerPlayerCnt = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BRServerPlayerCnt)
    
    index = len(worldLVList)-1
    for i, lv in enumerate(worldLVList):
        prelv = 0 if i ==0 else worldLVList[i-1]
        if prelv <=actWorldLV < lv:
    index = len(playerCntList)-1
    for i, cnt in enumerate(playerCntList):
        preCnt = 0 if i ==0 else playerCntList[i-1]
        if preCnt <=BRServerPlayerCnt < cnt:
            index = i
            break
    
    totalPoint = totalPointList[-1] if index >= len(totalPointList) else totalPointList[index]
    GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_BossRebornNeedPoint, totalPoint)
    if isSync:
        Sync_BossRebornPoint()
    return totalPoint
def BossRebornWorldNotify(curTime):
@@ -974,6 +982,10 @@
    ##通知BOSS复活点数
    packData = ChPyNetSendPack.tagGCBossRebornPoint()
    packData.Point = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BossRebornPoint)
    totalPoint = GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_BossRebornNeedPoint)
    if not totalPoint:
        totalPoint = SetBossRebornNeedPoint()
    packData.TotalPoint = totalPoint
    playerManager = GameWorld.GetPlayerManager()
    if not curPlayer:
        for i in xrange(playerManager.GetActivePlayerCount()):
@@ -989,30 +1001,3 @@
        NetPackCommon.SendFakePack(curPlayer, packData)
    return
def Sync_OperationAction_BossReborn(ipyData, curPlayer=None):
    ## 通知boss复活活动信息
    if not ipyData:
        return
    bossRebornInfo = ChPyNetSendPack.tagGCBossRebornInfo()
    bossRebornInfo.Clear()
    bossRebornInfo.StartDate = ipyData.GetStartDate()
    bossRebornInfo.EndtDate = ipyData.GetEndDate()
    bossRebornInfo.WorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % ShareDefine.OperationActionName_BossReborn)
    bossRebornInfo.LimitLV = ipyData.GetLVLimit()
    if not curPlayer:
        # 全服广播在线玩家
        playerManager = GameWorld.GetPlayerManager()
        for i in xrange(playerManager.GetActivePlayerCount()):
            curPlayer = playerManager.GetActivePlayerAt(i)
            if curPlayer == None or not curPlayer.GetInitOK():
                continue
            if PlayerControl.GetIsTJG(curPlayer):
                continue
            NetPackCommon.SendFakePack(curPlayer, bossRebornInfo)
    else:
        if PlayerControl.GetIsTJG(curPlayer):
            return
        NetPackCommon.SendFakePack(curPlayer, bossRebornInfo)
    return
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -105,6 +105,7 @@
import PlayerXMZZ
import PlayerTeam
import PyGameData
import ChPlayer
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -161,7 +162,8 @@
    # GameDataRecord.OnDayResetRecord()
    # 仙盟红包
    PlayerFamilyRedPacket.DoOnDay()
    # 玩家等级记录更新
    ChPlayer.UpdataPlayerLVInfo()
    # 通知开服天数
    #openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
    #GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
@@ -1231,6 +1233,8 @@
    __DoMixServerInit()
    #仙魔之争
    PlayerXMZZ.OnGameServerInitOK()
    #加载活跃玩家等级信息
    ChPlayer.LoadPlayerLVData()
    #世界boss被杀次数重置
    #GameWorldBoss.CheckResetBossKilledCntOnServerInit()
    #GameWorldActionTeHui.OnGameServerInitOK() # 特惠活动初始化
@@ -1866,6 +1870,7 @@
#  @return None
def BeforeClose(tick):
    PlayerTeam.OnServerClose(tick)
    ChPlayer.SavePlayerLVData()
    GameWorld.Log("通知C++关服!")
    GameWorld.GetGameWorld().OnServerClose()
    
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -226,6 +226,7 @@
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("WORD", "LVLimit", 0),
                        ("BYTE", "TemplateID", 0),
                        ),
                "ActFairyCeremony":(
@@ -659,7 +660,8 @@
        self.EndDate = ""
        self.NotifyInfoStart = {}
        self.NotifyInfoEnd = {}
        self.LVLimit = 0
        self.LVLimit = 0
        self.TemplateID = 0
        return
        
    def GetCfgID(self): return self.CfgID # 配置ID
@@ -669,7 +671,8 @@
    def GetEndDate(self): return self.EndDate # 结束日期
    def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
    def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
    def GetLVLimit(self): return self.LVLimit # 限制等级
    def GetLVLimit(self): return self.LVLimit # 限制等级
    def GetTemplateID(self): return self.TemplateID # 模板编号
# 仙界盛典活动时间表
class IPY_ActFairyCeremony():
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -65,6 +65,7 @@
import PlayerGeTui
import GameWorldActionControl
import GMT_CTG
import PyGameData
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -154,6 +155,8 @@
        PlayerGeTui.CleanNewGuyCallBackGeTui(curPlayer.GetID())
        #活动
        GameWorldActionControl.OnPlayerLogin(curPlayer)
        #玩家等级记录
        PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
        
        GMT_CTG.OnPlayerLogin(curPlayer)
        
@@ -620,6 +623,10 @@
    elif packType == IPY_GameServer.CDBPlayerRefresh_LV:
        curPlayer.SetLV(packValue)
        PlayerSocial.UpdateSocialInfo(curPlayer, packType, packValue)
        #玩家等级记录
        playerID = curPlayer.GetID()
        if playerID in PyGameData.g_todayPlayerLVDict:
            PyGameData.g_todayPlayerLVDict[playerID] = packValue
    elif packType == IPY_GameServer.CDBPlayerRefresh_Job:
        curPlayer.SetJob(packValue)
@@ -1114,5 +1121,52 @@
    NetPackCommon.SendFakePack(curPlayer, serverDateTime)
    return
def UpdataPlayerLVInfo():
    #Onday更新玩家等级信息
    PyGameData.g_yesterdayPlayerLVDict = PyGameData.g_todayPlayerLVDict
    PyGameData.g_todayPlayerLVDict = {}
    playerManager = GameWorld.GetPlayerManager()
    for i in xrange(playerManager.GetActivePlayerCount()):
        curPlayer = playerManager.GetActivePlayerAt(i)
        if curPlayer == None or not curPlayer.GetInitOK():
            continue
        if PlayerControl.GetIsTJG(curPlayer):
            continue
        PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
    return
def LoadPlayerLVData():
    #服务器开启时加载活跃玩家等级信息
    universalRecMgr = GameWorld.GetUniversalRecMgr()
    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
    allCnt = recDataList.Count()
    for index in xrange(allCnt):
        recData = recDataList.At(index)
        PyGameData.g_todayPlayerLVDict[recData.GetValue1()] = recData.GetValue2()
    
    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
    allCnt = recDataList.Count()
    for index in xrange(allCnt):
        recData = recDataList.At(index)
        PyGameData.g_yesterdayPlayerLVDict[recData.GetValue1()] = recData.GetValue2()
    GameWorld.DebugLog('    服务器开启时加载活跃玩家等级信息g_todayPlayerLVDict=%s, g_yesterdayPlayerLVDict=%s'%(PyGameData.g_todayPlayerLVDict,PyGameData.g_yesterdayPlayerLVDict))
    return
def SavePlayerLVData():
    #服务器关闭前时保存活跃玩家等级信息
    GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
    GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
    universalRecMgr = GameWorld.GetUniversalRecMgr()
    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
    for playerID, lv in PyGameData.g_todayPlayerLVDict.items():
        recData = recDataList.AddRec()
        recData.SetValue1(playerID)
        recData.SetValue2(lv)
    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
    for playerID, lv in PyGameData.g_yesterdayPlayerLVDict.items():
        recData = recDataList.AddRec()
        recData.SetValue1(playerID)
        recData.SetValue2(lv)
    return
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py
@@ -35,7 +35,7 @@
import time
import json
Def_Sort_IndexList_Interval = IpyGameDataPY.GetFuncCfg('BourseUpdataCD')  #五分钟更新一次子索引列表
g_lastSortTimeForQueryTypeDict = {}     #记录对应查询类型上次更新子索引列表时间
g_dict_Of_QueryTypeIndexList = {}       #储存对应查询类型的排序列表的字典
@@ -215,6 +215,7 @@
    lastSortTick = g_lastSortTimeForQueryTypeDict.get(queryType, 0)
    
    queryTypeList = g_dict_Of_QueryTypeIndexList.get(queryType, None)
    Def_Sort_IndexList_Interval = IpyGameDataPY.GetFuncCfg('BourseUpdataCD')  #五分钟更新一次子索引列表
    if queryTypeList == None or tick - lastSortTick > Def_Sort_IndexList_Interval:
        SortIndexList(queryType)#重新排序指定类型
        lastSortTick = tick
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
@@ -144,6 +144,8 @@
Def_OActWorldLV = "OActWorldLV_%s"
#boss复活活动当前复活点
Def_BossRebornPoint = "BossRebornPoint"
#boss复活活动参数服务器人数
Def_BRServerPlayerCnt = "BRServerPlayerCnt"
## 查找事件
#  @param findID 查找的ID
ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
@@ -62,5 +62,7 @@
g_bossShuntDeadLine = {} # boss分流线路boss已死亡的线路 {bossID:[lineID, ...], ...}
g_bossShuntDeadLineChangeBoss = [] # boss分流已死亡线路有变更的boss列表
g_ctgOfflinePlayerInfo = {} # {playerID:[[ctgInfo], ...], ...} # 离线玩家CTG信息缓存
g_todayPlayerLVDict = {} #今日玩家等级字典 {playerID:lv,..}
g_yesterdayPlayerLVDict = {} #昨日玩家等级字典{playerID:lv,..}
g_ctgOfflinePlayerInfo = {} # {playerID:[[ctgInfo], ...], ...} # 离线玩家CTG信息缓存
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -230,7 +230,7 @@
                           OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
                           OperationActionName_RealmPoint]
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_BossReborn, OperationActionName_FairyCeremony]
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony]
#活动信息字典key定义
ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
@@ -921,8 +921,8 @@
                                Def_UniversalGameRecType_LVAwardRecord,  #玩家等级奖励记录 3
                                Def_UniversalGameRecType_LimitFBOpenRecord,#限时副本开启时间记录4
                                Def_UniversalGameRecType_DujieHelpCntRecord, # 渡劫副本护法次数5
                                Def_UniversalGameRecType_6,
                                Def_UniversalGameRecType_7,
                                Def_UniversalGameRecType_TodayPlayerLVInfo, #今日活跃玩家等级信息6
                                Def_UniversalGameRecType_YesterdayPlayerLVInfo,#昨日活跃玩家等级信息7
                                Def_UniversalGameRecType_8,
                                Def_UniversalGameRecType_9,
                                Def_UniversalGameRecType_10,
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3554,9 +3554,9 @@
#BOSS复活
Def_PDict_BossRebornID = "BossRebornID"  # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
Def_PDict_BossRebornTemplateID = "BossRebornTemplateID"  # 玩家身上的BOSS复活模板ID
Def_PDict_BRActionCurTimes = "BRActionCurTimes_%s" #当前完成次数 参数BOSS复活活动ID
Def_PDict_BRActionGotTimes = "BRActionGotTimes_%s" #当前已领次数 参数BOSS复活活动ID
Def_PDict_BRActionWorldLV = "BRActionWorldLV" #玩家身上的BOSS复活时的世界等级
#仙界盛典
Def_PDict_FairyCeremonyID = "FairyCeremonyID"  # 玩家身上的仙界盛典活动ID,唯一标识,取活动开始日期time值
@@ -4941,14 +4941,16 @@
Def_BRAct_GodArea, #进入古神禁地副本 2
Def_BRAct_MoneyPray, #铜钱祈愿 3
Def_BRAct_ExpPray, #经验祈愿 4
Def_BRAct_Treasure, #寻宝 5
Def_BRAct_Treasure, #极品寻宝 5
Def_BRAct_WorldBOSS, #击杀世界boss获得掉落归属 6
Def_BRAct_BOSSHome, #击杀boss之家获得掉落归属 7
Def_BRAct_FMT, #挑战封魔坛BOSS 8
Def_BRAct_RunTask, #完成师门悬赏 9
Def_BRAct_XJMJ, #完成仙界秘境 10
Def_BRAct_KirinHome, #完成麒麟之府 11
) = range(1, 11+1)
Def_BRAct_TowerSweep, #符印塔扫荡 12
Def_BRAct_RuneTreasure,  #符印寻宝 13
) = range(1, 13+1)
#全民来嗨活动定义
PeoplePartyActIDList = (
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -4129,84 +4129,6 @@
#------------------------------------------------------
# AC 07 BOSS复活活动信息 #tagGCBossRebornInfo
class  tagGCBossRebornInfo(Structure):
    Head = tagHead()
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    WorldLV = 0    #(WORD WorldLV)// 世界等级
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAC
        self.Head.SubCmd = 0x07
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAC
        self.Head.SubCmd = 0x07
        self.StartDate = ""
        self.EndtDate = ""
        self.WorldLV = 0
        self.LimitLV = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 10
        length += 10
        length += 2
        length += 2
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteWORD(data, self.WorldLV)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                StartDate:%s,
                                EndtDate:%s,
                                WorldLV:%d,
                                LimitLV:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.StartDate,
                                self.EndtDate,
                                self.WorldLV,
                                self.LimitLV
                                )
        return DumpString
m_NAtagGCBossRebornInfo=tagGCBossRebornInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornInfo.Head.Cmd,m_NAtagGCBossRebornInfo.Head.SubCmd))] = m_NAtagGCBossRebornInfo
#------------------------------------------------------
# AC 08 boss复活点数通知 #tagGCBossRebornPoint
class  tagGCBossRebornPoint(Structure):
@@ -4215,6 +4137,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Point", c_int),    # 复活点数
                  ("TotalPoint", c_int),    # 复活总点数
                  ]
    def __init__(self):
@@ -4232,6 +4155,7 @@
        self.Cmd = 0xAC
        self.SubCmd = 0x08
        self.Point = 0
        self.TotalPoint = 0
        return
    def GetLength(self):
@@ -4244,12 +4168,14 @@
        DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
                                Cmd:%s,
                                SubCmd:%s,
                                Point:%d
                                Point:%d,
                                TotalPoint:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Point
                                self.Point,
                                self.TotalPoint
                                )
        return DumpString
@@ -20431,6 +20357,210 @@
#------------------------------------------------------
# AB 04 Boss复活活动信息 #tagMCBossRebornInfo
class  tagMCBossRebornAwardItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("ItemCount", c_ushort),
                  ("IsBind", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.ItemCount = 0
        self.IsBind = 0
        return
    def GetLength(self):
        return sizeof(tagMCBossRebornAwardItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo:
                                ItemID:%d,
                                ItemCount:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.ItemID,
                                self.ItemCount,
                                self.IsBind
                                )
        return DumpString
class  tagMCBossRebornTaskInfo(Structure):
    TaskID = 0    #(BYTE TaskID)// id
    TotalTimes = 0    #(BYTE TotalTimes)// 可完成总次数,0表示不限次数
    SingleTimes = 0    #(BYTE SingleTimes)// 单次领奖需要次数
    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
    AwardItem = list()    #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AwardItemCount):
            temAwardItem = tagMCBossRebornAwardItem()
            _pos = temAwardItem.ReadData(_lpData, _pos)
            self.AwardItem.append(temAwardItem)
        return _pos
    def Clear(self):
        self.TaskID = 0
        self.TotalTimes = 0
        self.SingleTimes = 0
        self.AwardItemCount = 0
        self.AwardItem = list()
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 1
        length += 1
        length += 1
        for i in range(self.AwardItemCount):
            length += self.AwardItem[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.TaskID)
        data = CommFunc.WriteBYTE(data, self.TotalTimes)
        data = CommFunc.WriteBYTE(data, self.SingleTimes)
        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
        for i in range(self.AwardItemCount):
            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                TaskID:%d,
                                TotalTimes:%d,
                                SingleTimes:%d,
                                AwardItemCount:%d,
                                AwardItem:%s
                                '''\
                                %(
                                self.TaskID,
                                self.TotalTimes,
                                self.SingleTimes,
                                self.AwardItemCount,
                                "..."
                                )
        return DumpString
class  tagMCBossRebornInfo(Structure):
    Head = tagHead()
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    TaskCnt = 0    #(BYTE TaskCnt)
    TaskInfo = list()    #(vector<tagMCBossRebornTaskInfo> TaskInfo)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAB
        self.Head.SubCmd = 0x04
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TaskCnt):
            temTaskInfo = tagMCBossRebornTaskInfo()
            _pos = temTaskInfo.ReadData(_lpData, _pos)
            self.TaskInfo.append(temTaskInfo)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAB
        self.Head.SubCmd = 0x04
        self.StartDate = ""
        self.EndtDate = ""
        self.LimitLV = 0
        self.TaskCnt = 0
        self.TaskInfo = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 10
        length += 10
        length += 2
        length += 1
        for i in range(self.TaskCnt):
            length += self.TaskInfo[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.TaskCnt)
        for i in range(self.TaskCnt):
            data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                StartDate:%s,
                                EndtDate:%s,
                                LimitLV:%d,
                                TaskCnt:%d,
                                TaskInfo:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.StartDate,
                                self.EndtDate,
                                self.LimitLV,
                                self.TaskCnt,
                                "..."
                                )
        return DumpString
m_NAtagMCBossRebornInfo=tagMCBossRebornInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo
#------------------------------------------------------
# AB 23 摇骰子奖励回包 #tagMCDiceAward
class  tagMCDiceAward(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BossHome.py
@@ -82,7 +82,9 @@
#  @return None
def DoEnterFB(curPlayer, tick):
    playerID = curPlayer.GetPlayerID()
    if curPlayer.GetHP() == 0:
        PlayerControl.PlayerLeaveFB(curPlayer)
        return
    # 设置副本公共属性的单独处理,防止队员进入后被修改
    if not FBCommon.GetHadSetFBPropertyMark():
        lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine)
@@ -101,7 +103,8 @@
            infoDict = {"MapID":mapID,"LineID":lineID}
            for moneyType, moneyNum in costMoneyList:
                if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_EnterFB, infoDict):
                    GameWorld.DebugLog("仙玉不足!costGold=%s" % costGold)
                    GameWorld.Log("仙玉不足!costGold=%s" % costGold)
                    PlayerControl.PlayerLeaveFB(curPlayer)
                    return
        EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_BossHome, lineID, ChConfig.CME_Log_Start)
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
@@ -38,6 +38,7 @@
import random
import math
import PlayerBossReborn
g_runeTypeDict = {}
FBDict_Level = 'FBDict_Level'   # 副本关卡
@@ -651,4 +652,6 @@
    FBCommon.Notify_FB_Over(curPlayer, overDict)
    #成就
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TowerSD, 1)
    #BOSS复活活动
    PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_TowerSweep, 1)
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -899,16 +899,11 @@
                        ),
                "BossReborn":(
                        ("BYTE", "TemplateID", 1),
                        ("BYTE", "ID", 1),
                        ("DWORD", "TotalTimes", 0),
                        ("WORD", "SingleTimes", 0),
                        ("list", "RewardItemID1", 0),
                        ("list", "RewardItemCnt1", 0),
                        ("list", "RewardItemID2", 0),
                        ("list", "RewardItemCnt2", 0),
                        ("list", "RewardItemID3", 0),
                        ("list", "RewardItemCnt3", 0),
                        ("list", "WorldLVList", 0),
                        ("list", "Reward", 0),
                        ),
                "TrialExchange":(
@@ -2753,28 +2748,18 @@
class IPY_BossReborn():
    
    def __init__(self):
        self.TemplateID = 0
        self.ID = 0
        self.TotalTimes = 0
        self.SingleTimes = 0
        self.RewardItemID1 = []
        self.RewardItemCnt1 = []
        self.RewardItemID2 = []
        self.RewardItemCnt2 = []
        self.RewardItemID3 = []
        self.RewardItemCnt3 = []
        self.WorldLVList = []
        self.Reward = []
        return
        
    def GetID(self): return self.ID # ID
    def GetTemplateID(self): return self.TemplateID # 模板ID
    def GetID(self): return self.ID # 活动条目ID
    def GetTotalTimes(self): return self.TotalTimes # 可完成的总次数,0表示不限次数
    def GetSingleTimes(self): return self.SingleTimes # 单次领奖需要的次数
    def GetRewardItemID1(self): return self.RewardItemID1 # 奖励物品ID1
    def GetRewardItemCnt1(self): return self.RewardItemCnt1 # 奖励物品数量1
    def GetRewardItemID2(self): return self.RewardItemID2 # 奖励物品ID2
    def GetRewardItemCnt2(self): return self.RewardItemCnt2 # 奖励物品数量2
    def GetRewardItemID3(self): return self.RewardItemID3 # 奖励物品ID3
    def GetRewardItemCnt3(self): return self.RewardItemCnt3 # 奖励物品数量3
    def GetWorldLVList(self): return self.WorldLVList # 世界等级
    def GetReward(self): return self.Reward # 奖励物品ID1
# 宗门试炼兑换表
class IPY_TrialExchange():
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
@@ -38,7 +38,9 @@
        # 活动中同步活动信息
        if actCostRebateInfo.get(ShareDefine.ActKey_State):
            SyncBossRebornInfo(curPlayer)
            SyncBossRebornPlayerInfo(curPlayer)
    return
def RefreshOperationAction_BossReborn():
    playerManager = GameWorld.GetPlayerManager()
@@ -58,43 +60,48 @@
    bossRebornID = actBossRebornInfo.get(ShareDefine.ActKey_ID, 0)
    state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
    
    playerBossRebornID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornID) # 玩家身上的活动ID
    playerBossRebornID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornID)  # 玩家身上的活动ID
    
    # 活动ID 相同的话不处理
    if bossRebornID == playerBossRebornID:
        #GameWorld.DebugLog("BOSS复活活动ID不变,不处理!", curPlayer.GetPlayerID())
        return
    BRWorldLV = actBossRebornInfo.get(ShareDefine.ActKey_WorldLV, 0)
    playerBRWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionWorldLV)
    GameWorld.DebugLog("BOSS复活重置! costRebateID=%s,playerCostRebateID=%s,state=%s,BRWorldLV=%s,playerBRWorldLV=%s"
                       % (bossRebornID, playerBossRebornID, state, BRWorldLV, playerBRWorldLV), playerID)
    templateID = actBossRebornInfo.get(ShareDefine.ActKey_TemplateID, 0)
    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
    GameWorld.DebugLog("BOSS复活重置! costRebateID=%s,playerCostRebateID=%s,state=%s,templateID=%s,playerTemplateID=%s"
                       % (bossRebornID, playerBossRebornID, state, templateID, playerTemplateID), playerID)
    
    # 未领取的奖励邮件发放
    __SendBossRebornMail(curPlayer, playerBRWorldLV)
    __SendBossRebornMail(curPlayer, playerTemplateID)
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossRebornID, bossRebornID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionWorldLV, BRWorldLV)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossRebornTemplateID, templateID)
    for brid in ChConfig.BossRebornActIDList:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionCurTimes % brid, 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionGotTimes % brid, 0)
    SyncBossRebornInfo(curPlayer)
    SyncBossRebornPlayerInfo(curPlayer)
    return True
def __SendBossRebornMail(curPlayer, playerBRWorldLV):
    #未领取的奖励邮件发放
def __SendBossRebornMail(curPlayer, playerTemplateID):
    # 未领取的奖励邮件发放
    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("BossReborn", {'TemplateID':playerTemplateID}, True)
    if not ipyDataList:
        return
    totalItemDict = {}
    for brid in ChConfig.BossRebornActIDList:
        ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', brid)
        if not ipyData:
            continue
    for ipyData in ipyDataList:
        brid = ipyData.GetID()
        singleTimes = ipyData.GetSingleTimes()
        curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionCurTimes % brid)
        gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionGotTimes % brid)
        canGotCnt = (curTimes - gotTimes) / singleTimes
        if not canGotCnt:
            continue
        itemDict = __GetAwardItem(curPlayer, playerBRWorldLV, ipyData, canGotCnt)
        itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)
        GameWorld.AddDictValue(totalItemDict, itemDict)
    
    #去掉复活点道具
@@ -105,6 +112,7 @@
    PlayerControl.SendMailByKey('BossFHUnGetMail', [curPlayer.GetID()], totalItemList)
    return
def AddBossRebornActionCnt(curPlayer, actionID, addCnt=1):
    '''增加boss复活相关活动完成次数'''
    #判断活动是否开启
@@ -112,7 +120,8 @@
    state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
    if not state:
        return
    ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', actionID)
    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
    ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', playerTemplateID, actionID)
    if not ipyData:
        return
    totalTimes = ipyData.GetTotalTimes()
@@ -123,12 +132,14 @@
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionCurTimes % actionID, curTimes + addCnt)
    
    SyncBossRebornInfo(curPlayer, actionID)
    SyncBossRebornPlayerInfo(curPlayer, actionID)
    return
def GetBossRebornActionAward(curPlayer, actionID):
    '''领取boss复活活动奖励'''
    ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', actionID)
    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
    ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', playerTemplateID, actionID)
    if not ipyData:
        return
    singleTimes = ipyData.GetSingleTimes()
@@ -138,8 +149,7 @@
        return
    
    #给奖励
    curWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionWorldLV)
    awardDict = __GetAwardItem(curPlayer, curWorldLV, ipyData)
    awardDict = __GetAwardItem(curPlayer, ipyData)
    # 检查背包
    needSpace = len(awardDict)
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
@@ -153,40 +163,25 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionGotTimes % actionID, newGotTimes)
    for itemID, itemCnt in awardDict.items():
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 1, [IPY_GameWorld.rptItem])
    SyncBossRebornInfo(curPlayer, actionID)
    SyncBossRebornPlayerInfo(curPlayer, actionID)
    return
def __GetAwardItem(curPlayer, worldLV, ipyData, times=1):
    worldLVList = ipyData.GetWorldLVList()
    playerLV = curPlayer.GetLV()
    awardIndex = len(worldLVList) - 1
    for i, lv in enumerate(worldLVList):
        prelv = 0 if i ==0 else worldLVList[i-1]
        if prelv<=playerLV < lv:
            awardIndex = i
            break
def __GetAwardItem(curPlayer, ipyData, times=1):
    awardDict = {}
    for i in xrange(3): #目前配置3个奖励
        if not hasattr(ipyData, 'GetRewardItemID%s' % (i + 1)):
            break
        itemIDList = getattr(ipyData, 'GetRewardItemID%s' % (i + 1))()
        itemCntList = getattr(ipyData, 'GetRewardItemCnt%s' % (i + 1))()
        if awardIndex >= len(itemIDList) or awardIndex >= len(itemCntList):
            GameWorld.ErrLog('BOSS复活表奖励配置错误!')
            return awardDict
        itemID, itemCnt = itemIDList[awardIndex], itemCntList[awardIndex]
    for itemID, itemCnt, isbind in ipyData.GetReward():
        if not itemID or not itemCnt:
            continue
        awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
        
    return awardDict
def SyncBossRebornInfo(curPlayer, actID= -1):
def SyncBossRebornPlayerInfo(curPlayer, actID=-1):
    #通知当前次数、已领次数 
    packData = ChPyNetSendPack.tagMCBossRebornPlayerInfo()
    packData.DataList = []
    if actID !=-1:
    if actID != -1:
        syneActIDList = [actID]
    else:
        syneActIDList = []
@@ -207,3 +202,39 @@
    packData.Count = len(packData.DataList)
    NetPackCommon.SendFakePack(curPlayer, packData)
    return
def SyncBossRebornInfo(curPlayer):
    actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossReborn, {})
    state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
    if not state:
        return
    templateID = actBossRebornInfo.get(ShareDefine.ActKey_TemplateID, 0)
    if not templateID:
        return
    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("BossReborn", {'TemplateID':templateID}, True)
    if not ipyDataList:
        return
    actInfo = ChPyNetSendPack.tagMCBossRebornInfo()
    actInfo.Clear()
    actInfo.StartDate = actBossRebornInfo.get(ShareDefine.ActKey_StartDate, "")
    actInfo.EndtDate = actBossRebornInfo.get(ShareDefine.ActKey_EndDate, "")
    actInfo.LimitLV = actBossRebornInfo.get(ShareDefine.ActKey_LVLimit, 0)
    actInfo.TaskInfo = []
    for ipyData in ipyDataList:
        taskInfo = ChPyNetSendPack.tagMCBossRebornTaskInfo()
        taskInfo.TaskID = ipyData.GetID()
        taskInfo.TotalTimes = ipyData.GetTotalTimes()
        taskInfo.SingleTimes = ipyData.GetSingleTimes()
        taskInfo.AwardItem = []
        for itemID, itemCnt, isBind in ipyData.GetReward():
            awardItem = ChPyNetSendPack.tagMCBossRebornAwardItem()
            awardItem.ItemID = itemID
            awardItem.ItemCount = itemCnt
            awardItem.IsBind = isBind
            taskInfo.AwardItem.append(awardItem)
        taskInfo.AwardItemCount = len(taskInfo.AwardItem)
        actInfo.TaskInfo.append(taskInfo)
    actInfo.TaskCnt = len(actInfo.TaskInfo)
    NetPackCommon.SendFakePack(curPlayer, actInfo)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -309,11 +309,13 @@
        updLuck = 0
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), updLuck)
    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_TreasureScore, addScore)
    PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
    if treasureType == 2:
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount)
    else:
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
    # 给物品
    mailItemList = []
    itemControl = ItemControler.PlayerItemControler(curPlayer)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -230,7 +230,7 @@
                           OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
                           OperationActionName_RealmPoint]
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_BossReborn, OperationActionName_FairyCeremony]
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony]
#活动信息字典key定义
ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
@@ -921,8 +921,8 @@
                                Def_UniversalGameRecType_LVAwardRecord,  #玩家等级奖励记录 3
                                Def_UniversalGameRecType_LimitFBOpenRecord,#限时副本开启时间记录4
                                Def_UniversalGameRecType_DujieHelpCntRecord, # 渡劫副本护法次数5
                                Def_UniversalGameRecType_6,
                                Def_UniversalGameRecType_7,
                                Def_UniversalGameRecType_TodayPlayerLVInfo, #今日活跃玩家等级信息6
                                Def_UniversalGameRecType_YesterdayPlayerLVInfo,#昨日活跃玩家等级信息7
                                Def_UniversalGameRecType_8,
                                Def_UniversalGameRecType_9,
                                Def_UniversalGameRecType_10,