hxp
2024-11-15 789490b7d362160f7fca4580df6176498e1eb271
10302 【越南】【英语】【砍树】【tqxbqy】【btgotq】仙缘-服务端
30个文件已修改
667 ■■■■ 已修改文件
PySysDB/PySysDBG.h 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_PlayerBuyZhenQi.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhanling.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyCountGift.py 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLoginNew.py 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTask.py 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAttrFruit.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMineArea.py 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSignDay.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBG.h
@@ -1215,9 +1215,6 @@
    BYTE        ActNum;    //活动分组编号, 活动类型 * 10 + 不同界面编号
    char        StartDate;    //开启日期
    char        EndDate;    //结束日期
    dict        NotifyInfoStart;    //全服提示信息 - 相对开始时间
    dict        NotifyInfoEnd;    //全服提示信息 - 相对结束时间
    list        NotifyInfoLoop;    //全服提示信息 - 循环广播[间隔分钟, 广播key]
    BYTE        IsDayReset;    //是否每天重置
    BYTE        ResetType;    //重置类型,0-0点重置;1-5点重置
};
@@ -1232,9 +1229,6 @@
    BYTE        ActNum;    //活动分组编号, 活动类型 * 10 + 不同界面编号
    char        StartDate;    //开启日期
    char        EndDate;    //结束日期
    dict        NotifyInfoStart;    //全服提示信息 - 相对开始时间
    dict        NotifyInfoEnd;    //全服提示信息 - 相对结束时间
    list        NotifyInfoLoop;    //全服提示信息 - 循环广播[间隔分钟, 广播key]
    BYTE        IsDayReset;    //是否每天重置
    BYTE        ResetType;    //重置类型,0-0点重置;1-5点重置
};
@@ -1249,9 +1243,6 @@
    BYTE        ActNum;    //活动分组编号, 活动类型 * 10 + 不同界面编号
    char        StartDate;    //开启日期
    char        EndDate;    //结束日期
    dict        NotifyInfoStart;    //全服提示信息 - 相对开始时间
    dict        NotifyInfoEnd;    //全服提示信息 - 相对结束时间
    list        NotifyInfoLoop;    //全服提示信息 - 循环广播[间隔分钟, 广播key]
};
//登录奖励时间表
PySysDB/PySysDBPY.h
@@ -2704,6 +2704,9 @@
    DWORD        _CfgID;    //配置ID
    char        StartDate;    //开启日期
    char        EndDate;    //结束日期
    WORD        RelateFuncID;    //关联功能ID
    BYTE        FuncActDays;    //功能活动天数
    BYTE        FuncLoop;    //功能是否循环
    WORD        LVLimit;    //限制等级
    BYTE        IsDayReset;    //是否每天重置
    BYTE        ResetType;    //重置类型,0-0点重置;1-5点重置
@@ -2720,6 +2723,9 @@
    DWORD        _CfgID;    //配置ID
    char        StartDate;    //开启日期
    char        EndDate;    //结束日期
    WORD        RelateFuncID;    //关联功能ID
    BYTE        FuncActDays;    //功能活动天数
    BYTE        FuncLoop;    //功能是否循环
    WORD        LVLimit;    //限制等级
    BYTE        IsDayReset;    //是否每天重置
    BYTE        ResetType;    //重置类型,0-0点重置;1-5点重置
@@ -2745,9 +2751,14 @@
    DWORD        _CfgID;    //配置ID
    char        StartDate;    //开启日期
    char        EndDate;    //结束日期
    WORD        RelateFuncID;    //关联功能ID
    BYTE        FuncActDays;    //功能活动天数
    BYTE        FuncLoop;    //功能是否循环
    WORD        LVLimit;    //限制等级
    list        RepSignCostMoneyInfo;    //补签消耗货币类型数量
    BYTE        TemplateID;    //登录奖励模板编号
    WORD        AwardExCTGID;    //扩展奖励礼包充值ID
    WORD        ActZhanlingType;    //关联活动战令类型
};
//登录活动奖励模板表新
@@ -2757,6 +2768,7 @@
    BYTE        _TemplateID;    //模板ID
    BYTE        DayNum;    //第X天从1开始
    list        LoginAwardItemList;    //奖励列表[[物品ID,个数,是否拍品], ...]
    list        LoginAwardItemListEx;    //扩展奖励列表[[物品ID,个数,是否拍品], ...]
};
//登录奖励时间表
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -38104,6 +38104,8 @@
    DayNum = 0    #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取
    Count = 0    #(BYTE Count)// 奖励物品数
    AwardItemList = list()    #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表
    CountEx = 0    #(BYTE CountEx)// 额外奖励物品数
    AwardItemListEx = list()    #(vector<tagMCActLoginNewItem> AwardItemListEx)//  额外奖励物品列表
    data = None
    def __init__(self):
@@ -38118,12 +38120,19 @@
            temAwardItemList = tagMCActLoginNewItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CountEx):
            temAwardItemListEx = tagMCActLoginNewItem()
            _pos = temAwardItemListEx.ReadData(_lpData, _pos)
            self.AwardItemListEx.append(temAwardItemListEx)
        return _pos
    def Clear(self):
        self.DayNum = 0
        self.Count = 0
        self.AwardItemList = list()
        self.CountEx = 0
        self.AwardItemListEx = list()
        return
    def GetLength(self):
@@ -38132,6 +38141,9 @@
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        length += 1
        for i in range(self.CountEx):
            length += self.AwardItemListEx[i].GetLength()
        return length
@@ -38141,17 +38153,24 @@
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.CountEx)
        for i in range(self.CountEx):
            data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                DayNum:%d,
                                Count:%d,
                                AwardItemList:%s
                                AwardItemList:%s,
                                CountEx:%d,
                                AwardItemListEx:%s
                                '''\
                                %(
                                self.DayNum,
                                self.Count,
                                "...",
                                self.CountEx,
                                "..."
                                )
        return DumpString
@@ -38165,6 +38184,7 @@
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    RepSignMoneyType = 0    #(BYTE RepSignMoneyType)// 补签消耗货币类型
    RepSignMoneyValue = 0    #(DWORD RepSignMoneyValue)// 补签消耗货币值
    AwardExCTGID = 0    #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励
    DayCount = 0    #(BYTE DayCount)
    AwardDayList = list()    #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表
    data = None
@@ -38184,6 +38204,7 @@
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.DayCount):
            temAwardDayList = tagMCActLoginNewDay()
@@ -38202,6 +38223,7 @@
        self.LimitLV = 0
        self.RepSignMoneyType = 0
        self.RepSignMoneyValue = 0
        self.AwardExCTGID = 0
        self.DayCount = 0
        self.AwardDayList = list()
        return
@@ -38215,6 +38237,7 @@
        length += 2
        length += 1
        length += 4
        length += 2
        length += 1
        for i in range(self.DayCount):
            length += self.AwardDayList[i].GetLength()
@@ -38230,6 +38253,7 @@
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.RepSignMoneyType)
        data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue)
        data = CommFunc.WriteWORD(data, self.AwardExCTGID)
        data = CommFunc.WriteBYTE(data, self.DayCount)
        for i in range(self.DayCount):
            data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer())
@@ -38244,6 +38268,7 @@
                                LimitLV:%d,
                                RepSignMoneyType:%d,
                                RepSignMoneyValue:%d,
                                AwardExCTGID:%d,
                                DayCount:%d,
                                AwardDayList:%s
                                '''\
@@ -38255,6 +38280,7 @@
                                self.LimitLV,
                                self.RepSignMoneyType,
                                self.RepSignMoneyValue,
                                self.AwardExCTGID,
                                self.DayCount,
                                "..."
                                )
@@ -38274,7 +38300,8 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    # 活动编号
                  ("LoginAward", c_int),    # 是否已领取,按天索引0代表第1天记录当天是否已领取
                  ("LoginAward", c_int),    # 普通奖励领取记录,按天对应二进制位记录是否已领取
                  ("LoginAwardEx", c_int),    # 额外奖励领取记录,按天对应二进制位记录是否已领取
                  ]
    def __init__(self):
@@ -38293,6 +38320,7 @@
        self.SubCmd = 0x70
        self.ActNum = 0
        self.LoginAward = 0
        self.LoginAwardEx = 0
        return
    def GetLength(self):
@@ -38306,13 +38334,15 @@
                                Cmd:%s,
                                SubCmd:%s,
                                ActNum:%d,
                                LoginAward:%d
                                LoginAward:%d,
                                LoginAwardEx:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.LoginAward
                                self.LoginAward,
                                self.LoginAwardEx
                                )
        return DumpString
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
@@ -869,7 +869,7 @@
    robPlayerID = mineItemData.RobPlayerID
    # 赶走抢夺者
    if robPlayerID and robPlayerID == tagPlayerID:
        __DoCancelPull(tagPlayerID, areaPlayerID, itemIndex)
        __DoCancelPull(tagPlayerID, areaPlayerID, itemIndex, "out")
    
    # 帮助的发奖
    if funcLineID == 0:
@@ -926,7 +926,7 @@
        return
    if workerCount <= 0:
        if not isPreview:
            __DoCancelPull(playerID, areaPlayerID, itemIndex)
            __DoCancelPull(playerID, areaPlayerID, itemIndex, "cancel")
        return
    GameWorld.DebugLog("请求福地拉物品! areaPlayerID=%s,itemIndex=%s,workerCount=%s,workerState=%s,workerTotal=%s,isPreview=%s" 
                       % (areaPlayerID, itemIndex, workerCount, workerState, workerTotal, isPreview), playerID)
@@ -1019,7 +1019,7 @@
    SyncMineAreaItemInfo(areaPlayerID, [itemIndex], notifyPlayerIDListEx)
    return
def __DoCancelPull(playerID, areaPlayerID, itemIndex):
def __DoCancelPull(playerID, areaPlayerID, itemIndex, reason=""):
    ## 取消拉取
    mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
    mineItemData = mineItemMgr.GetMineItem(areaPlayerID, itemIndex)
@@ -1054,6 +1054,9 @@
        __RefreshMineItemSpeed(mineItemData, True)
        
    SyncMineAreaItemInfo(areaPlayerID, [itemIndex], notifyPlayerIDListEx)
    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
    if curPlayer:
        MapServer_QueryPlayerResult(curPlayer, "MineAreaCancelPull", [areaPlayerID, reason])
    return
def __DoMineItemRefresh(areaPlayerID, areaPlayer=None, isSys=False, isSuper=False, isNotify=True, refreshIndexList=None, setPosition=None, setItemLV=None, setMineID=None):
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -975,9 +975,6 @@
                        ("BYTE", "ActNum", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ("BYTE", "IsDayReset", 0),
                        ("BYTE", "ResetType", 0),
                        ),
@@ -989,9 +986,6 @@
                        ("BYTE", "ActNum", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ("BYTE", "IsDayReset", 0),
                        ("BYTE", "ResetType", 0),
                        ),
@@ -1003,9 +997,6 @@
                        ("BYTE", "ActNum", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ),
                "ActLoginAward":(
@@ -2613,11 +2604,8 @@
    def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
    def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
    def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
    def GetIsDayReset(self): return self.attrTuple[9] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[10] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetIsDayReset(self): return self.attrTuple[6] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[7] # 重置类型,0-0点重置;1-5点重置 BYTE
# 任务活动时间表
class IPY_ActTask():
@@ -2632,11 +2620,8 @@
    def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
    def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
    def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
    def GetIsDayReset(self): return self.attrTuple[9] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[10] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetIsDayReset(self): return self.attrTuple[6] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[7] # 重置类型,0-0点重置;1-5点重置 BYTE
# 登录活动奖励时间表新
class IPY_ActLoginNew():
@@ -2650,10 +2635,7 @@
    def GetServerGroupIDList(self): return self.attrTuple[2] # 服务器ID列表 list
    def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
    def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
    def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
# 登录奖励时间表
class IPY_ActLoginAward():
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1156,7 +1156,9 @@
CDBPlayerRefresh_TiandaoFruit, # 天道果 267
CDBPlayerRefresh_Tuijinbi, # 推金币 268
CDBPlayerRefresh_PayCoinDay, # 代币时效 269
) = range(146, 270)
CDBPlayerRefresh_XianyuanScore, # 仙缘积分 270
CDBPlayerRefresh_HuanjinggeScore, # 幻境阁积分 271
) = range(146, 272)
TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
@@ -1192,6 +1194,9 @@
TYPE_Price_HorsePetTrainScore = 45    # 骑宠养成积分
TYPE_Price_GubaoTrainScore = 46    # 古宝养成积分
TYPE_Price_TiandaoFruit = 47    # 天道果
TYPE_Price_Tuijinbi = 48    # 推金币
TYPE_Price_XianyuanScore = 49    # 仙缘积分
TYPE_Price_HuanjinggeScore = 50    # 幻境阁积分
TYPE_Price_PayCoinDay = 98    # 代币时效,每日过天重置
TYPE_Price_PayCoin = 99    # 代币
@@ -1201,6 +1206,7 @@
                 16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘", 
                 29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点", 
                 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 
                 49:"仙缘积分", 50:"幻境阁积分",
                 98:"代币时效", 99:"代币"
                 }
@@ -1241,6 +1247,8 @@
                           TYPE_Price_HorsePetTrainScore:CDBPlayerRefresh_HorsePetTrainScore,
                           TYPE_Price_GubaoTrainScore:CDBPlayerRefresh_GubaoTrainScore,
                           TYPE_Price_TiandaoFruit:CDBPlayerRefresh_TiandaoFruit,
                           TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore,
                           TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore,
                           TYPE_Price_PayCoinDay:CDBPlayerRefresh_PayCoinDay,
                           }
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4189,6 +4189,7 @@
#登录活动新
Def_PDict_ActLoginNewID = "ActLoginNewID_%s"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
Def_PDict_ActLoginNewAward = "ActLoginNewAward_%s"  # 登录活动奖励记录,按位记录登录天是否已领取,参数:(活动编号)
Def_PDict_ActLoginNewAwardEx = "ActLoginNewAwardEx_%s"  # 登录活动额外奖励记录,按位记录登录天是否已领取,参数:(活动编号)
#任务活动
Def_PDict_ActTaskID = "ActTaskID_%s"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
@@ -6208,7 +6209,25 @@
ActTaskType_HorseTrainItem3, # 消耗X个坐骑培养3道具 13
ActTaskType_PetTrainItem3, # 消耗X个灵宠培养3道具 14
ActTaskType_HorsePetActScore, # 获得X点骑宠养成积分 15
) = range(1, 1 + 15)
ActTaskType_KillNPC, # 杀怪x次 16
ActTaskType_TreasureJipin, # 极品寻宝达到x次 17
ActTaskType_TreasureRune, # 符印寻宝达到x次 18
ActTaskType_TreasureJueshi, # 绝世寻宝达到x次 19
ActTaskType_TreasureGatherTheSoul, # 猎魔寻宝达到x次 20
ActTaskType_GubaoLVUp, # 古宝升级X次 21
ActTaskType_GubaoStarUp, # 古宝升星X次 22
ActTaskType_Sign, # 签到X次 23
ActTaskType_MoneyPray, # 灵石祈愿X次 24
ActTaskType_ExpPray, # 修为祈愿X次 25
ActTaskType_Arena, # 竞技场挑战X次 26
ActTaskType_MineAreaEndSelf, # 福地完成采集自己道具X次  27
ActTaskType_MineAreaEndOther, # 福地完成采集他人道具X次  28
ActTaskType_FruitStoveEatTimes, # 服用丹药X次 29
ActTaskType_SkyTower, # 天星塔X次 30
ActTaskType_FMT, # 封魔坛X次 31
ActTaskType_EquipPlus, # 装备强化X次 32
ActTaskType_EquipWash, # 装备洗炼X次 33
) = range(1, 1 + 33)
# 套装枚举,普通套装,强化套装
(EquipSuitType_Normal,
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -38104,6 +38104,8 @@
    DayNum = 0    #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取
    Count = 0    #(BYTE Count)// 奖励物品数
    AwardItemList = list()    #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表
    CountEx = 0    #(BYTE CountEx)// 额外奖励物品数
    AwardItemListEx = list()    #(vector<tagMCActLoginNewItem> AwardItemListEx)//  额外奖励物品列表
    data = None
    def __init__(self):
@@ -38118,12 +38120,19 @@
            temAwardItemList = tagMCActLoginNewItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CountEx):
            temAwardItemListEx = tagMCActLoginNewItem()
            _pos = temAwardItemListEx.ReadData(_lpData, _pos)
            self.AwardItemListEx.append(temAwardItemListEx)
        return _pos
    def Clear(self):
        self.DayNum = 0
        self.Count = 0
        self.AwardItemList = list()
        self.CountEx = 0
        self.AwardItemListEx = list()
        return
    def GetLength(self):
@@ -38132,6 +38141,9 @@
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        length += 1
        for i in range(self.CountEx):
            length += self.AwardItemListEx[i].GetLength()
        return length
@@ -38141,17 +38153,24 @@
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.CountEx)
        for i in range(self.CountEx):
            data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                DayNum:%d,
                                Count:%d,
                                AwardItemList:%s
                                AwardItemList:%s,
                                CountEx:%d,
                                AwardItemListEx:%s
                                '''\
                                %(
                                self.DayNum,
                                self.Count,
                                "...",
                                self.CountEx,
                                "..."
                                )
        return DumpString
@@ -38165,6 +38184,7 @@
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    RepSignMoneyType = 0    #(BYTE RepSignMoneyType)// 补签消耗货币类型
    RepSignMoneyValue = 0    #(DWORD RepSignMoneyValue)// 补签消耗货币值
    AwardExCTGID = 0    #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励
    DayCount = 0    #(BYTE DayCount)
    AwardDayList = list()    #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表
    data = None
@@ -38184,6 +38204,7 @@
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.DayCount):
            temAwardDayList = tagMCActLoginNewDay()
@@ -38202,6 +38223,7 @@
        self.LimitLV = 0
        self.RepSignMoneyType = 0
        self.RepSignMoneyValue = 0
        self.AwardExCTGID = 0
        self.DayCount = 0
        self.AwardDayList = list()
        return
@@ -38215,6 +38237,7 @@
        length += 2
        length += 1
        length += 4
        length += 2
        length += 1
        for i in range(self.DayCount):
            length += self.AwardDayList[i].GetLength()
@@ -38230,6 +38253,7 @@
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.RepSignMoneyType)
        data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue)
        data = CommFunc.WriteWORD(data, self.AwardExCTGID)
        data = CommFunc.WriteBYTE(data, self.DayCount)
        for i in range(self.DayCount):
            data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer())
@@ -38244,6 +38268,7 @@
                                LimitLV:%d,
                                RepSignMoneyType:%d,
                                RepSignMoneyValue:%d,
                                AwardExCTGID:%d,
                                DayCount:%d,
                                AwardDayList:%s
                                '''\
@@ -38255,6 +38280,7 @@
                                self.LimitLV,
                                self.RepSignMoneyType,
                                self.RepSignMoneyValue,
                                self.AwardExCTGID,
                                self.DayCount,
                                "..."
                                )
@@ -38274,7 +38300,8 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    # 活动编号
                  ("LoginAward", c_int),    # 是否已领取,按天索引0代表第1天记录当天是否已领取
                  ("LoginAward", c_int),    # 普通奖励领取记录,按天对应二进制位记录是否已领取
                  ("LoginAwardEx", c_int),    # 额外奖励领取记录,按天对应二进制位记录是否已领取
                  ]
    def __init__(self):
@@ -38293,6 +38320,7 @@
        self.SubCmd = 0x70
        self.ActNum = 0
        self.LoginAward = 0
        self.LoginAwardEx = 0
        return
    def GetLength(self):
@@ -38306,13 +38334,15 @@
                                Cmd:%s,
                                SubCmd:%s,
                                ActNum:%d,
                                LoginAward:%d
                                LoginAward:%d,
                                LoginAwardEx:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.LoginAward
                                self.LoginAward,
                                self.LoginAwardEx
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
@@ -29,6 +29,7 @@
import PlayerSuccess
import IpyGameDataPY
import PlayerActLogin
import PlayerActTask
import GameWorld
import ChConfig
import ChEquip
@@ -158,6 +159,7 @@
    PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipPlus, 1)
    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Plus, 1)
    PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_Plus, 1)
    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_EquipPlus)
    return
def __EquipMayaPlusChange(curPlayer, packType, curEquip, index, updPlusLV):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
@@ -26,6 +26,7 @@
import PlayerActGarbageSorting
import DataRecordPack
import PlayerActLogin
import PlayerActTask
import ShareDefine
import ItemCommon
import ChConfig
@@ -299,6 +300,7 @@
    PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipWash, 1)
    PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_EquipWash)
    PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_Wash, 1)
    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_EquipWash)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_PlayerBuyZhenQi.py
@@ -32,6 +32,7 @@
import PlayerNewFairyCeremony
import PlayerFeastTravel
import PlayerActLogin
import PlayerActTask
import PlayerWeekParty
import EventShell
#------------------------------------------------------------------------------ 
@@ -129,6 +130,7 @@
        PlayerControl.GiveMoney(curPlayer, giveMoneyType, addMoney, ChConfig.Def_GiveMoney_Pray, addDataDict, False)
        PlayerControl.NotifyCode(curPlayer, 'MoneyPray_HowMuch', [addMoney, giveMoneyType])
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_MoneyPray, 1)
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MoneyPray)
        
    #经验祈愿    
    elif buyType == ChConfig.VIPPrivilege_ExpPray:
@@ -164,6 +166,7 @@
        if not isCostItem: #用物品不增加次数
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasPrayCnt % buyType, curCnt + 1)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_ExpPray, 1)
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_ExpPray)
    else:
        return
    EventShell.EventRespons_Pray(curPlayer, buyType)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhanling.py
@@ -33,6 +33,7 @@
    if not msgList:
        GameWorld.DebugAnswer(curPlayer, "重置奖励: Zhanling 0 类型")
        GameWorld.DebugAnswer(curPlayer, "设置战令: Zhanling 类型 是否激活普通   高级")
        GameWorld.DebugAnswer(curPlayer, "设置进度: Zhanling v 类型  进度值")
        return
    
    value = msgList[0]
@@ -42,6 +43,14 @@
        PlayerZhanling.ResetZhanling(curPlayer, zhanlingType, backValue)
        GameWorld.DebugAnswer(curPlayer, "重置战令(%s)!" % (zhanlingType))
        
    elif value == "v":
        zhanlingType = msgList[1] if len(msgList) > 1 else 0
        value1 = msgList[2] if len(msgList) > 2 else 0
        retValue = PlayerZhanling.SetZhanlingValue(curPlayer, zhanlingType, value1)
        if retValue == None:
            GameWorld.DebugAnswer(curPlayer, "该战令不用设置进度值! %s" % (zhanlingType))
            return
        GameWorld.DebugAnswer(curPlayer, "战令进度:Type=%s,V=%s" % (zhanlingType, retValue))
    else:
        zhanlingType = value
        activiteC = msgList[1] if len(msgList) > 1 else 0
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
@@ -744,6 +744,112 @@
    endDateStr = "%d-%d-%d" % (endDateTime.year, endDateTime.month, endDateTime.day)
    return startDateStr, endDateStr
def GetActRelateFuncInfo(curPlayer, actName, actInfo, playerActID):
    ## 获取活动关联玩家功能开启信息
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    if not cfgID:
        return
    ipyData = IpyGameDataPY.GetIpyGameDataNotLog(actName, cfgID)
    if not ipyData:
        return
    if not hasattr(ipyData, "GetRelateFuncID"):
        return
    relateFuncID = ipyData.GetRelateFuncID()
    if not relateFuncID:
        return
    funcActDays = ipyData.GetFuncActDays()
    funcLoop = ipyData.GetFuncLoop()
    playerID = curPlayer.GetPlayerID()
    isInAct = False # 是否活动中
    actID = playerActID # 玩家实际的活动ID
    if not actInfo.get(ShareDefine.ActKey_State, 0):
        #DebugLog("关联功能非活动中默认不开活动! actName=%s,cfgID=%s" % (actName, cfgID), playerID)
        return isInAct, actID
    isOpen = GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, relateFuncID, True)
    if not isOpen:
        DebugLog("关联功能未开启默认不开活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
        return isInAct, actID
    isDayRest = 0 if not hasattr(ipyData, "GetIsDayReset") else ipyData.GetIsDayReset()
    actNum = actInfo.get(ShareDefine.ActKey_ActNum)
    serverTime = GetCurrentTime()
    newAct = False
    if isDayRest:
        newAct = True
        DebugLog("关联功能活动,每日重置的活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
    elif not playerActID:
        newAct = True
        DebugLog("关联功能活动,玩家首次开启活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
    # 有活动期限的
    elif funcActDays:
        startDayDate, endDayDate = GetActRelateFuncDate(ipyData, playerActID)
        if startDayDate <= serverTime < endDayDate:
            isInAct = True
            DebugLog("关联功能活动,正常活动中! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
        elif serverTime >= endDayDate:
            if funcLoop:
                newAct = True
                DebugLog("关联功能活动,活动结束,重新开始循环新活动! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
            else:
                DebugLog("关联功能活动,活动结束,不循环! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
        else:
            DebugLog("关联功能活动,玩家活动ID超过当前时间,可能是调时间引起,重新开始循环新活动! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
            newAct = True
    # 永久的,默认活动中
    else:
        isInAct = True
        DebugLog("关联功能活动,永久开放的活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
    if newAct:
        isInAct = True
        resetType = 0 if not hasattr(ipyData, "GetResetType") else ipyData.GetResetType() # 重置类型,0-0点重置;1-5点重置
        startDateStr = "%d-%d-%d" % (serverTime.year, serverTime.month, serverTime.day)
        if resetType == 1:
            startDayDate = datetime.datetime.strptime("%s 05:00:00" % (startDateStr), ChConfig.TYPE_Time_Format)
        else:
            startDayDate = datetime.datetime.strptime("%s 00:00:00" % (startDateStr), ChConfig.TYPE_Time_Format)
        actID = int(time.mktime(startDayDate.timetuple()))
    DebugLog("关联功能活动! actName=%s,cfgID=%s,actNum=%s,relateFuncID=%s,playerActID=%s,actID=%s,isInAct=%s"
             % (actName, cfgID, actNum, relateFuncID, playerActID, actID, isInAct), playerID)
    return isInAct, actID
def GetActRelateFuncDate(ipyData, startTime, returnYmdStr=False):
    funcActDays = ipyData.GetFuncActDays()
    isDayRest = 0 if not hasattr(ipyData, "GetIsDayReset") else ipyData.GetIsDayReset()
    resetType = 0 if not hasattr(ipyData, "GetResetType") else ipyData.GetResetType() # 重置类型,0-0点重置;1-5点重置
    if isDayRest:
        funcActDays = 1
    startDayDate = ChangeTimeNumToDatetime(startTime, ChConfig.TYPE_Time_Format)
    if funcActDays:
        startDayStr = str(startDayDate)[:10]
        if resetType == 1:
            endDayDate = datetime.datetime.strptime("%s 04:59:59" % (startDayStr), ChConfig.TYPE_Time_Format) + datetime.timedelta(days=funcActDays)
        elif resetType == 2:
            endDayDate = datetime.datetime.strptime("%s 23:59:59" % (startDayStr), ChConfig.TYPE_Time_Format) + datetime.timedelta(days=(funcActDays-1))
        else:
            endDayDate = datetime.datetime.strptime("%s 23:59:59" % (startDayStr), ChConfig.TYPE_Time_Format) + datetime.timedelta(days=(funcActDays-1))
    else:
        endDateStr = ipyData.GetEndDate()
        if resetType == 1:
            endDayDate = datetime.datetime.strptime("%s 04:59:59" % (endDateStr), ChConfig.TYPE_Time_Format)
        elif resetType == 2:
            endDayDate = datetime.datetime.strptime("%s 23:59:59" % (endDateStr), ChConfig.TYPE_Time_Format)
        else:
            endDayDate = datetime.datetime.strptime("%s 23:59:59" % (endDateStr), ChConfig.TYPE_Time_Format)
    if returnYmdStr:
        startDateStr = "%d-%d-%d" % (startDayDate.year, startDayDate.month, startDayDate.day)
        endDateStr = "%d-%d-%d" % (endDayDate.year, endDayDate.month, endDayDate.day)
        return startDateStr, endDateStr
    return startDayDate, endDayDate
##获得服务器系统时间
# @param 无
# @return 返回值. 时间Data格式
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py
@@ -35,6 +35,7 @@
import PlayerFeastTravel
import PlayerWeekParty
import PlayerActLogin
import PlayerActTask
import EventReport
import PlayerTeam
import NPCHurtManager
@@ -338,6 +339,7 @@
    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FMT, addCnt)
    PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_FMT, addCnt)
    PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_FMT, addCnt)
    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_FMT, addCnt)
    return prizeItemList
def OnPickUpItem(curPlayer, curItem, tick):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
@@ -32,6 +32,7 @@
import PlayerActivity
import PlayerBillboard
import PlayerSuccess
import PlayerActTask
import GameObj
import GameWorldProcess
@@ -203,8 +204,9 @@
    elif fbStep > FB_State_Fighting:
        PlayerControl.PlayerLeaveFB(curPlayer)
        return
    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_SkyTower)
    # 不做处理,有副本行为客户端发包选择挑战关卡
    #EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_SkyTower, 0, ChConfig.CME_Log_Start)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -2104,6 +2104,9 @@
                        ("DWORD", "CfgID", 1),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("WORD", "RelateFuncID", 0),
                        ("BYTE", "FuncActDays", 0),
                        ("BYTE", "FuncLoop", 0),
                        ("WORD", "LVLimit", 0),
                        ("BYTE", "IsDayReset", 0),
                        ("BYTE", "ResetType", 0),
@@ -2117,6 +2120,9 @@
                        ("DWORD", "CfgID", 1),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("WORD", "RelateFuncID", 0),
                        ("BYTE", "FuncActDays", 0),
                        ("BYTE", "FuncLoop", 0),
                        ("WORD", "LVLimit", 0),
                        ("BYTE", "IsDayReset", 0),
                        ("BYTE", "ResetType", 0),
@@ -2136,15 +2142,21 @@
                        ("DWORD", "CfgID", 1),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("WORD", "RelateFuncID", 0),
                        ("BYTE", "FuncActDays", 0),
                        ("BYTE", "FuncLoop", 0),
                        ("WORD", "LVLimit", 0),
                        ("list", "RepSignCostMoneyInfo", 0),
                        ("BYTE", "TemplateID", 0),
                        ("WORD", "AwardExCTGID", 0),
                        ("WORD", "ActZhanlingType", 0),
                        ),
                "ActLoginNewAward":(
                        ("BYTE", "TemplateID", 1),
                        ("BYTE", "DayNum", 0),
                        ("list", "LoginAwardItemList", 0),
                        ("list", "LoginAwardItemListEx", 0),
                        ),
                "ActLoginAward":(
@@ -5653,13 +5665,16 @@
    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
    def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
    def GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
    def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[5] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetCTGIDList(self): return self.attrTuple[6] # 充值ID列表 [ctgID, ...] list
    def GetCTGCountAwardInfo(self): return self.attrTuple[7] # 累计充值次数额外奖励 dict
    def GetCTGCountDayResetList(self): return self.attrTuple[8] # 每日重置累充次数列表 list
    def GetActShopType(self): return self.attrTuple[9] # 商城类型 DWORD
    def GetRelateFuncID(self): return self.attrTuple[3] # 关联功能ID WORD
    def GetFuncActDays(self): return self.attrTuple[4] # 功能活动天数 BYTE
    def GetFuncLoop(self): return self.attrTuple[5] # 功能是否循环 BYTE
    def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
    def GetIsDayReset(self): return self.attrTuple[7] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[8] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetCTGIDList(self): return self.attrTuple[9] # 充值ID列表 [ctgID, ...] list
    def GetCTGCountAwardInfo(self): return self.attrTuple[10] # 累计充值次数额外奖励 dict
    def GetCTGCountDayResetList(self): return self.attrTuple[11] # 每日重置累充次数列表 list
    def GetActShopType(self): return self.attrTuple[12] # 商城类型 DWORD
# 任务活动时间表
class IPY_ActTask():
@@ -5671,11 +5686,14 @@
    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
    def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
    def GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
    def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[5] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetTemplateID(self): return self.attrTuple[6] # 登录奖励模板编号 BYTE
    def GetRoundMax(self): return self.attrTuple[7] # 任务最大轮次 BYTE
    def GetRelateFuncID(self): return self.attrTuple[3] # 关联功能ID WORD
    def GetFuncActDays(self): return self.attrTuple[4] # 功能活动天数 BYTE
    def GetFuncLoop(self): return self.attrTuple[5] # 功能是否循环 BYTE
    def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
    def GetIsDayReset(self): return self.attrTuple[7] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[8] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetTemplateID(self): return self.attrTuple[9] # 登录奖励模板编号 BYTE
    def GetRoundMax(self): return self.attrTuple[10] # 任务最大轮次 BYTE
# 任务活动模板表
class IPY_ActTaskTemp():
@@ -5700,9 +5718,14 @@
    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
    def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
    def GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
    def GetRepSignCostMoneyInfo(self): return self.attrTuple[4] # 补签消耗货币类型数量 list
    def GetTemplateID(self): return self.attrTuple[5] # 登录奖励模板编号 BYTE
    def GetRelateFuncID(self): return self.attrTuple[3] # 关联功能ID WORD
    def GetFuncActDays(self): return self.attrTuple[4] # 功能活动天数 BYTE
    def GetFuncLoop(self): return self.attrTuple[5] # 功能是否循环 BYTE
    def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
    def GetRepSignCostMoneyInfo(self): return self.attrTuple[7] # 补签消耗货币类型数量 list
    def GetTemplateID(self): return self.attrTuple[8] # 登录奖励模板编号 BYTE
    def GetAwardExCTGID(self): return self.attrTuple[9] # 扩展奖励礼包充值ID WORD
    def GetActZhanlingType(self): return self.attrTuple[10] # 关联活动战令类型 WORD
# 登录活动奖励模板表新
class IPY_ActLoginNewAward():
@@ -5713,7 +5736,8 @@
        
    def GetTemplateID(self): return self.attrTuple[0] # 模板ID BYTE
    def GetDayNum(self): return self.attrTuple[1] # 第X天从1开始 BYTE
    def GetLoginAwardItemList(self): return self.attrTuple[2] # 奖励列表[[物品ID,个数,是否拍品], ...] list
    def GetLoginAwardItemList(self): return self.attrTuple[2] # 奖励列表[[物品ID,个数,是否拍品], ...] list
    def GetLoginAwardItemListEx(self): return self.attrTuple[3] # 扩展奖励列表[[物品ID,个数,是否拍品], ...] list
# 登录奖励时间表
class IPY_ActLoginAward():
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -66,6 +66,7 @@
import NPCHurtManager
import PlayerActLogin
import PlayerActTask
import PlayerZhanling
import FamilyRobBoss
import IpyGameDataPY
import PlayerGubao
@@ -2579,6 +2580,7 @@
        PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_WorldBoss, 1)
        PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_WorldBOSS, 1)
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_WorldBoss, 1)
        PlayerZhanling.AddZhanlingValue(curPlayer, PlayerZhanling.ZhanlingType_Huanjingge, 1)
        PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_WorldBoss, 1)
        
    elif limitIndex == ShareDefine.Def_Boss_Func_Home:
@@ -5191,6 +5193,7 @@
            if GetNPCLV(curNPC) >= curPlayer.GetLV() - IpyGameDataPY.GetFuncCfg('DailyQuestKillMonster'):
                PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_KillNPC)
                PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillNPC)
                PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_KillNPC)
            PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_KillSpecificNPC, 1, [npcID])
            
        if ChConfig.IsGameBoss(curNPC):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -42,6 +42,9 @@
import PlayerFreeGoods
import FunctionNPCCommon
import PlayerGreatMaster
import PlayerActBuyCountGift
import PlayerActLoginNew
import PlayerActTask
import IPY_GameWorld
import ItemCommon
import ItemControler
@@ -168,6 +171,11 @@
            GameWorld.DebugLog("notifyGameServerFuncIDList=%s" % notifyGameServerFuncIDList)
            msgInfo = str(notifyGameServerFuncIDList)
            GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "FuncOpen", msgInfo, len(msgInfo))
        PlayerActTask.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
        PlayerActLoginNew.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
        PlayerActBuyCountGift.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
    return
## 功能是否可用
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyCountGift.py
@@ -29,12 +29,17 @@
import GameWorld
import ChConfig
def OnDay(curPlayer):
def OnDay(curPlayer, onEventType):
    OnCheckRelateFuncAct(curPlayer)
    if onEventType != ShareDefine.Def_OnEventType:
        return
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BuyCountGift, {}).values():
        if not actInfo.get(ShareDefine.ActKey_State):
            continue
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
        if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum):
            continue
        ipyData = IpyGameDataPY.GetIpyGameData("ActBuyCountGift", cfgID)
        if not ipyData:
            continue
@@ -56,10 +61,31 @@
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        isReset = __CheckPlayerBuyCountGiftAction(curPlayer, actNum)
        # 活动中同步活动信息
        if not isReset and actInfo.get(ShareDefine.ActKey_State):
        if not isReset and actInfo.get(ShareDefine.ActKey_State) and curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum):
            Sync_BuyCountGiftActionInfo(curPlayer, actNum)
            Sync_BuyCountGiftPlayerInfo(curPlayer, actNum)
            
    return
def OnCheckRelateFuncAct(curPlayer, openFuncIDList=None):
    ## 检查关联功能ID开启的活动
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BuyCountGift, {}).values():
        if not actInfo.get(ShareDefine.ActKey_State):
            continue
        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
        ipyData = IpyGameDataPY.GetIpyGameData("ActBuyCountGift", cfgID)
        if not ipyData:
            continue
        if not hasattr(ipyData, "GetRelateFuncID"):
            continue
        relateFuncID = ipyData.GetRelateFuncID()
        if not relateFuncID:
            continue
        if openFuncIDList and relateFuncID not in openFuncIDList:
            continue
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        __CheckPlayerBuyCountGiftAction(curPlayer, actNum)
    return
def RefreshBuyCountGiftActionInfo(actNum):
@@ -85,6 +111,12 @@
    
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum) # 玩家身上的活动ID
    
    funcActInfo = GameWorld.GetActRelateFuncInfo(curPlayer, "ActBuyCountGift", actInfo, playerActID)
    if funcActInfo:
        isInAct, actID = funcActInfo
        if not isInAct:
            return
    # 活动ID 相同的话不处理
    if actID == playerActID:
        GameWorld.DebugLog("购买次数礼包活动ID不变,不处理! actNum=%s,cfgID=%s,actID=%s" % (actNum, cfgID, actID), curPlayer.GetPlayerID())
@@ -128,6 +160,8 @@
    
    if not actInfo.get(ShareDefine.ActKey_State):
        GameWorld.DebugLog("购买次数礼包非活动中无法领取奖励! actNum=%s" % actNum, playerID)
        return
    if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum):
        return
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    
@@ -187,14 +221,19 @@
    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BuyCountGift, actNum)
    if not actInfo.get(ShareDefine.ActKey_State):
        return
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum)
    if not playerActID:
        return
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    ipyData = IpyGameDataPY.GetIpyGameData("ActBuyCountGift", cfgID)
    if not ipyData:
        return
    CTGCountAwardInfo = ipyData.GetCTGCountAwardInfo()
    
    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
    if hasattr(ipyData, "GetRelateFuncID") and ipyData.GetRelateFuncID():
        startDateStr, endDateStr = GameWorld.GetActRelateFuncDate(ipyData, playerActID, True)
    else:
        startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
    startDateSync = actInfo.get(ShareDefine.ActKey_StartDateSync, startDateStr)
    actInfo = ChPyNetSendPack.tagMCActBuyCountGiftInfo()
    actInfo.ActNum = actNum
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLoginNew.py
@@ -16,15 +16,18 @@
#-------------------------------------------------------------------------------
import PyGameData
import PlayerCoin
import ShareDefine
import PlayerControl
import IpyGameDataPY
import PlayerZhanling
import ChPyNetSendPack
import ItemControler
import IPY_GameWorld
import NetPackCommon
import GameWorld
import ChConfig
import time
def OnPlayerLogin(curPlayer):
    
@@ -32,10 +35,35 @@
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        isReset = __CheckPlayerActLoginAction(curPlayer, actNum)
        # 活动中同步活动信息
        if not isReset and actInfo.get(ShareDefine.ActKey_State):
        if not isReset and actInfo.get(ShareDefine.ActKey_State) and curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum):
            Sync_ActLoginActionInfo(curPlayer, actNum)
            Sync_ActLoginPlayerInfo(curPlayer, actNum)
            
    return
def OnDay(curPlayer):
    OnCheckRelateFuncAct(curPlayer)
    return
def OnCheckRelateFuncAct(curPlayer, openFuncIDList=None):
    ## 检查关联功能ID开启的活动
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ActLoginNew, {}).values():
        if not actInfo.get(ShareDefine.ActKey_State):
            continue
        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
        ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID)
        if not ipyData:
            continue
        if not hasattr(ipyData, "GetRelateFuncID"):
            continue
        relateFuncID = ipyData.GetRelateFuncID()
        if not relateFuncID:
            continue
        if openFuncIDList and relateFuncID not in openFuncIDList:
            continue
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        __CheckPlayerActLoginAction(curPlayer, actNum)
    return
def RefreshActLoginActionInfo(actNum):
@@ -59,6 +87,12 @@
    
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum) # 玩家身上的活动ID
    
    funcActInfo = GameWorld.GetActRelateFuncInfo(curPlayer, "ActLoginNew", actInfo, playerActID)
    if funcActInfo:
        isInAct, actID = funcActInfo
        if not isInAct:
            return
    # 活动ID 相同的话不处理
    if actID == playerActID:
        GameWorld.DebugLog("新登录活动ID不变,不处理! actNum=%s,actID=%s" % (actNum, actID), curPlayer.GetPlayerID())
@@ -67,8 +101,16 @@
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewID % actNum, actID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAward % actNum, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAwardEx % actNum, 0)
    
    if state:
        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
        ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID)
        if ipyData:
            if ipyData.GetAwardExCTGID():
                PlayerCoin.DoResetCTGCountByIDList(curPlayer, "ActLoginNew", [ipyData.GetAwardExCTGID()])
            if ipyData.GetActZhanlingType():
                PlayerZhanling.ResetZhanling(curPlayer, ipyData.GetActZhanlingType())
        Sync_ActLoginActionInfo(curPlayer, actNum)
        Sync_ActLoginPlayerInfo(curPlayer, actNum)
    return True
@@ -76,6 +118,8 @@
def OnGetActLoginAward(curPlayer, dayNum, actNum):
    ## 领取活动奖励
    
    isAwardEx = dayNum / 1000
    dayNum = dayNum % 1000
    actNum = GameWorld.ToIntDef(actNum)
    
    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_ActLoginNew, actNum)
@@ -87,7 +131,11 @@
        GameWorld.DebugLog("非登录活动中! actNum=%s" % actNum)
        return
    
    curDayNum = actInfo.get(ShareDefine.ActKey_DayIndex) + 1
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum)
    if not playerActID:
        return
    curDayNum = GameWorld.GetDiff_Day(int(time.time()), playerActID) + 1
    if curDayNum < dayNum:
        GameWorld.DebugLog("未到可领取的登录天,无法领取!  actNum=%s,curDayNum=%s < %s" % (actNum, curDayNum, dayNum))
        return
@@ -111,9 +159,25 @@
    if not findIpyData:
        GameWorld.DebugLog("找不到对应登录天奖励! actNum=%s,cfgID=%s,templateID=%s,dayNum=%s" % (actNum, cfgID, templateID, dayNum))
        return
    awardItemList = findIpyData.GetLoginAwardItemList()
    if isAwardEx:
        awardExCTGID = ipyData.GetAwardExCTGID()
        if not awardExCTGID:
            GameWorld.DebugLog("该登录活动没有扩展奖励! actNum=%s,cfgID=%s" % (actNum, cfgID))
            return
        if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % awardExCTGID):
            GameWorld.DebugLog("该登录活动扩展奖励礼包未购买,无法领取! actNum=%s,cfgID=%s,awardExCTGID=%s" % (actNum, cfgID, awardExCTGID))
            return
        stateKey = ChConfig.Def_PDict_ActLoginNewAwardEx
        awardItemList = findIpyData.GetLoginAwardItemListEx()
    else:
        stateKey = ChConfig.Def_PDict_ActLoginNewAward
        awardItemList = findIpyData.GetLoginAwardItemList()
        
    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAward % actNum)
    if not awardItemList:
        return
    awardRecord = curPlayer.NomalDictGetProperty(stateKey % actNum)
    if awardRecord & pow(2, dayNum):
        GameWorld.DebugLog("登录活动该天已领奖! actNum=%s,dayNum=%s,awardRecord=%s" % (actNum, dayNum, awardRecord))
        return
@@ -129,13 +193,13 @@
        return
    
    if costMoneyType and costMoneyValue:
        PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "ActLoginNew", {"actNum":actNum, "dayNum":dayNum})
        PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "ActLoginNew", {"actNum":actNum, "dayNum":dayNum, "isAwardEx":isAwardEx})
        
    updAwardRecord = awardRecord | pow(2, dayNum)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAward % actNum, updAwardRecord)
    PlayerControl.NomalDictSetProperty(curPlayer, stateKey % actNum, updAwardRecord)
    Sync_ActLoginPlayerInfo(curPlayer, actNum)
    
    GameWorld.DebugLog("领取登录活动奖励! actNum=%s,dayNum=%s,awardItemList=%s" % (actNum, dayNum, awardItemList))
    GameWorld.DebugLog("领取登录活动奖励! actNum=%s,dayNum=%s,isAwardEx=%s,awardItemList=%s,curDayNum=%s" % (actNum, dayNum, isAwardEx, awardItemList, curDayNum))
    
    for itemID, itemCount, isAuctionItem in awardItemList:
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["ActLoginNew", False, {}])
@@ -147,6 +211,7 @@
    clientPack = ChPyNetSendPack.tagMCActLoginPlayerInfoNew()
    clientPack.ActNum = actNum
    clientPack.LoginAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAward % actNum)
    clientPack.LoginAwardEx = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAwardEx % actNum)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
@@ -156,6 +221,9 @@
    if not actInfo:
        return
    if not actInfo.get(ShareDefine.ActKey_State):
        return
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum)
    if not playerActID:
        return
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID)
@@ -167,7 +235,10 @@
    if not dayIpyDataList:
        return
    
    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
    if hasattr(ipyData, "GetRelateFuncID") and ipyData.GetRelateFuncID():
        startDateStr, endDateStr = GameWorld.GetActRelateFuncDate(ipyData, playerActID, True)
    else:
        startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
    actPack = ChPyNetSendPack.tagMCActLoginNew()
    actPack.Clear()
    actPack.ActNum = actNum
@@ -176,6 +247,7 @@
    actPack.LimitLV = ipyData.GetLVLimit()
    actPack.RepSignMoneyType = moneyType
    actPack.RepSignMoneyValue = moneyValue
    actPack.AwardExCTGID = ipyData.GetAwardExCTGID()
    
    actPack.AwardDayList = []
    for dayIpyData in dayIpyDataList:
@@ -190,6 +262,15 @@
            dayInfo.AwardItemList.append(itemInfo)
        dayInfo.Count = len(dayInfo.AwardItemList)
        
        dayInfo.AwardItemListEx = []
        for itemID, itemCount, isAuctionItem in dayIpyData.GetLoginAwardItemListEx():
            itemInfo = ChPyNetSendPack.tagMCActLoginNewItem()
            itemInfo.ItemID = itemID
            itemInfo.ItemCount = itemCount
            itemInfo.IsBind = isAuctionItem
            dayInfo.AwardItemListEx.append(itemInfo)
        dayInfo.CountEx = len(dayInfo.AwardItemListEx)
        actPack.AwardDayList.append(dayInfo)
    actPack.DayCount = len(actPack.AwardDayList)
    NetPackCommon.SendFakePack(curPlayer, actPack)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTask.py
@@ -32,11 +32,36 @@
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        isReset = __CheckPlayerActTaskAction(curPlayer, actNum)
        # 活动中同步活动信息
        if not isReset and actInfo.get(ShareDefine.ActKey_State):
        if not isReset and actInfo.get(ShareDefine.ActKey_State) and curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum):
            Sync_ActTaskActionInfo(curPlayer, actNum)
            Sync_ActTaskPlayerValueInfo(curPlayer, actNum)
            Sync_ActTaskPlayerInfo(curPlayer, actNum)
            
    return
def OnDay(curPlayer):
    OnCheckRelateFuncAct(curPlayer)
    return
def OnCheckRelateFuncAct(curPlayer, openFuncIDList=None):
    ## 检查关联功能ID开启的活动
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ActTask, {}).values():
        if not actInfo.get(ShareDefine.ActKey_State):
            continue
        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
        ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
        if not ipyData:
            continue
        if not hasattr(ipyData, "GetRelateFuncID"):
            continue
        relateFuncID = ipyData.GetRelateFuncID()
        if not relateFuncID:
            continue
        if openFuncIDList and relateFuncID not in openFuncIDList:
            continue
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        __CheckPlayerActTaskAction(curPlayer, actNum)
    return
def RefreshActTaskActionInfo(actNum):
@@ -62,6 +87,12 @@
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum) # 玩家身上的活动ID
    lastTempID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskTempID % actNum)
    
    funcActInfo = GameWorld.GetActRelateFuncInfo(curPlayer, "ActTask", actInfo, playerActID)
    if funcActInfo:
        isInAct, actID = funcActInfo
        if not isInAct:
            return
    # 活动ID 相同的话不处理
    if actID == playerActID:
        GameWorld.DebugLog("任务活动ID不变,不处理! actNum=%s,actID=%s" % (actNum, actID), playerID)
@@ -121,7 +152,8 @@
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        if not actInfo.get(ShareDefine.ActKey_State):
            continue
        if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum):
            continue
        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
        ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
        if not ipyData:
@@ -150,7 +182,7 @@
        
    return
    
def AddActTaskValue(curPlayer, taskType, addValue):
def AddActTaskValue(curPlayer, taskType, addValue=1):
    ## 增加任务活动进度值
    
    playerID = curPlayer.GetPlayerID()
@@ -158,7 +190,8 @@
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        if not actInfo.get(ShareDefine.ActKey_State):
            continue
        if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum):
            continue
        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
        ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
        if not ipyData:
@@ -350,6 +383,9 @@
        return
    if not actInfo.get(ShareDefine.ActKey_State):
        return
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum) # 玩家身上的活动ID
    if not playerActID:
        return
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
    if not ipyData:
@@ -359,7 +395,10 @@
    if not taskIpyDataList:
        return
    
    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
    if hasattr(ipyData, "GetRelateFuncID") and ipyData.GetRelateFuncID():
        startDateStr, endDateStr = GameWorld.GetActRelateFuncDate(ipyData, playerActID, True)
    else:
        startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
    actPack = ChPyNetSendPack.tagMCActTaskInfo()
    actPack.Clear()
    actPack.ActNum = actNum
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
@@ -27,6 +27,7 @@
import IPY_GameWorld
import ItemControler
import EventShell
import PlayerActTask
import PlayerWeekParty
import PlayerFeastTravel
import PlayerActivity
@@ -308,6 +309,7 @@
    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Arena, 1)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Arena, 1)
    PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_Arena, 1)
    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_Arena)
    return
def __DoUpdateArenaScore(curPlayer, cmdDict={}):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAttrFruit.py
@@ -38,6 +38,7 @@
import IpyGameDataPY
import PlayerPet
import PlayerRefineStove
import PlayerActTask
import PlayerSuccess
import SkillShell
@@ -265,6 +266,7 @@
    PlayerControl.NomalDictSetProperty(curPlayer, eatCntKey, eatCnt)
    if funcIndex == ShareDefine.Def_AttrFruitFunc_Stove:
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_UseStoveBylv, hasUseCnt, [item.GetLV()])
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_FruitStoveEatTimes) # 算次数,不算个数
        
    alchemyIpyData = IpyGameDataPY.GetIpyGameDataByCondition("Alchemy", {"AlchemItemID":itemID}, False, True)
    if alchemyIpyData:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -541,7 +541,6 @@
        PlayerVip.VipOnDay(curPlayer)
        
        PlayerCoin.OnDay(curPlayer)
        PlayerActBuyCountGift.OnDay(curPlayer)
        
        #成就
        PlayerSuccess.SuccOnDay(curPlayer)
@@ -644,6 +643,12 @@
    PlayerTongTianLing.OnDay(curPlayer, onEventType)
    #bossƾ֤
    PlayerActBossTrial.PlayerOnDay(curPlayer, onEventType)
    #任务活动
    PlayerActTask.OnDay(curPlayer)
    #登录活动
    PlayerActLoginNew.OnDay(curPlayer)
    #购买次数礼包
    PlayerActBuyCountGift.OnDay(curPlayer, onEventType)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -32,6 +32,7 @@
import PlayerDienstgrad
import PlayerGatherTheSoul
import PlayerActGubao
import PlayerActTask
import PlayerCoat
GubaoEffType_FamilyWar = 48 # 参与仙盟联赛每X次+XXX属性    x次
@@ -266,6 +267,7 @@
    Sync_GubaoInfo(curPlayer, [gubaoID])
    
    PlayerActGubao.OnGubaoCost(curPlayer, needPieceInfo, realNeedItemList)
    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_GubaoStarUp)
    return
def DoGubaoAddFreePoint(curPlayer, gubaoID=0):
@@ -396,6 +398,7 @@
    Sync_GubaoInfo(curPlayer, [gubaoID])
    
    PlayerActGubao.OnGubaoCost(curPlayer, needPieceInfo, realNeedItemList)
    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_GubaoLVUp)
    return
def GetGubaoTotalLVStar(curPlayer):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMineArea.py
@@ -20,6 +20,7 @@
import IpyGameDataPY
import IPY_GameWorld
import ChPyNetSendPack
import PlayerActTask
import NetPackCommon
import ItemControler
import ItemCommon
@@ -184,7 +185,12 @@
    if msgType == "MineAreaAwardGet":
        awardInfoList = dataMsg[0]
        __DoGiveMineAreaAward(curPlayer, awardInfoList)
    ## 取消拉取 (包含主动 或 被动驱赶)
    elif msgType == "MineAreaCancelPull":
        areaPlayerID, reason =  dataMsg
        __OnMineAreaPullEnd(curPlayer, areaPlayerID, reason)
    return
def __DoGiveMineAreaAward(curPlayer, awardInfoList):
@@ -206,6 +212,7 @@
        GUIDList.append(GUID)
        GameWorld.DebugLog("结算福地奖励! areaPlayerID=%s,mineID=%s,itemLV=%s,itemID=%s,itemCount=%s,awardTime=%s,isToday=%s,workerCount=%s %s" 
                           % (areaPlayerID, mineID, itemLV, itemID, itemCount, GameWorld.ChangeTimeNumToStr(awardTime), isToday, workerCount, GUID), playerID)
        __OnMineAreaPullEnd(curPlayer, areaPlayerID, "OK")
        
    if addEnergyUsed:
        energyUsed += addEnergyUsed
@@ -223,6 +230,15 @@
    SendToGameServer_MineArea(curPlayer, "MineAreaAwardGetOK", [GUIDList, awardItemList])
    return
def __OnMineAreaPullEnd(curPlayer, areaPlayerID, reason):
    ## 拉取结束额外处理, 包含拉完、取消、被驱赶等
    GameWorld.DebugLog("__OnMineAreaPullEnd: areaPlayerID=%s, reason=%s" % (areaPlayerID, reason))
    if curPlayer.GetPlayerID() == areaPlayerID:
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MineAreaEndSelf)
    else:
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MineAreaEndOther)
    return
def OnMineTreasureByCTGID(curPlayer, ctgID):
    ## 充值激活聚宝盆
    treasureCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 1)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSignDay.py
@@ -30,6 +30,7 @@
import ChPyNetSendPack
import PlayerMagicWeapon
import PlayerTongTianLing
import PlayerActTask
import PlayerPet
import PlayerControl
import GameWorld
@@ -182,6 +183,7 @@
            PlayerControl.NotifyCode(curPlayer, "SignInText2", [ChConfig.Def_SkillID_PetSignDay, curEffect.GetEffectID(), curEffect.GetEffectValue(0)])
            
    PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_Sign, 1)
    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_Sign)
    return
## 签到总奖励天数
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -43,7 +43,7 @@
TreasureTypeList = (
TreasureType_Jipin, # 极品寻宝 1
TreasureType_Rune, # 符印寻宝 2
TreasureType_Jueshi, # 绝世君宝 3
TreasureType_Jueshi, # 绝世寻宝 3
TreasureType_GatherTheSoul, # 聚魂猎魔 4
TreasureType_Gubao, # 古宝寻宝 5
) = range(1, 1 + 5)
@@ -388,16 +388,19 @@
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
        PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_RuneTreasure, treasureCount)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount)
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureRune, treasureCount)
    elif treasureType == TreasureType_Jipin:
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount)
        PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Treasure, treasureCount)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureJipin, treasureCount)
    elif treasureType == TreasureType_Jueshi:
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_JSTreasure, treasureCount)
        PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_JSTreasure, treasureCount)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_JSTreasure, treasureCount)
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureJueshi, treasureCount)
    elif treasureType == TreasureType_GatherTheSoul:
        pass
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureGatherTheSoul, treasureCount)
    elif treasureType == TreasureType_Gubao:
        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureGubao, treasureCount)
        
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
@@ -16,6 +16,7 @@
#-------------------------------------------------------------------------------
import GameWorld
import ShareDefine
import NetPackCommon
import IpyGameDataPY
import PlayerControl
@@ -31,15 +32,17 @@
# 战令类型
ZhanlingTypeList = (
ZhanlingType_LV,
ZhanlingType_Realm,
ZhanlingType_SkyTower,
ZhanlingType_GubaoStar,
ZhanlingType_Login,
ZhanlingType_GatherTheSoulLV,
ZhanlingType_HorsePetTrain,
ZhanlingType_GubaoTrain,
) = range(1, 1 + 8)
ZhanlingType_LV, # 等级 1
ZhanlingType_Realm, # 境界 2
ZhanlingType_SkyTower, # 天星塔 3
ZhanlingType_GubaoStar, # 古宝总星数 4
ZhanlingType_Login, # 登录 5
ZhanlingType_GatherTheSoulLV, # 聚魂 6
ZhanlingType_HorsePetTrain, # 骑宠养成 7
ZhanlingType_GubaoTrain, # 古宝养成 8
ZhanlingType_Xianyuan, # 仙缘 9
ZhanlingType_Huanjingge, # 幻境阁 10
) = range(1, 1 + 10)
def OnPlayerLogin(curPlayer):
    for zhanlingType in ZhanlingTypeList:
@@ -96,6 +99,9 @@
    updStateH = GameWorld.SetBitValue(stateH, zhanlingType, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingState, updState)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingStateH, updStateH)
    if zhanlingType == ZhanlingType_Xianyuan:
        backValue = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanScore)
        PlayerControl.SetMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanScore, 0)
    GameWorld.Log("重置战令: zhanlingType=%s,backValue=%s,state=(%s to %s) stateH=(%s to %s)" 
                  % (zhanlingType, backValue, state, updState, stateH, updStateH), curPlayer.GetPlayerID())
    
@@ -154,6 +160,25 @@
    PlayerControl.SendMailByKey("ZhanlingRewardUnget", [playerID], itemList, paramList)
    return
def AddZhanlingValue(curPlayer, zhanlingType, addValue=1):
    if zhanlingType not in [ZhanlingType_Huanjingge]:
        return
    curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
    updValue = min(ChConfig.Def_UpperLimit_DWord, curValue + addValue)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, updValue)
    GameWorld.DebugLog("增加战令进度: zhanlingType=%s,addValue=%s,curValue=%s,updValue=%s"
                       % (zhanlingType, addValue, curValue, updValue), curPlayer.GetPlayerID())
    SyncZhanlingInfo(curPlayer, zhanlingType, [])
    return updValue
def SetZhanlingValue(curPlayer, zhanlingType, value1):
    if zhanlingType not in [ZhanlingType_Huanjingge]:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, value1)
    GameWorld.DebugLog("设置战令进度: zhanlingType=%s,value1=%s" % (zhanlingType, value1), curPlayer.GetPlayerID())
    SyncZhanlingInfo(curPlayer, zhanlingType, [])
    return value1
def GetZhanlingReward(curPlayer, zhanlingType, rewardID):
    ## 领取战令奖励
    rewardID = GameWorld.ToIntDef(rewardID)
@@ -184,6 +209,10 @@
        curValue = PlayerActHorsePetTrain.GetActHorsePetTrainScore(curPlayer)
    elif zhanlingType == ZhanlingType_GubaoTrain:
        curValue = PlayerActGubao.GetActGubaoTrainScore(curPlayer)
    elif zhanlingType == ZhanlingType_Xianyuan:
        curValue = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanScore)
    elif zhanlingType == ZhanlingType_Huanjingge:
        curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
    else:
        return
        
@@ -223,7 +252,7 @@
    
    # 更新已领取成功标记
    GameWorld.SetDictValueByBit(curPlayer, rewardKey, rewardIndex, 1, True, [zhanlingType])
    SyncZhanlingInfo(curPlayer, zhanlingType, ipyData)
    SyncZhanlingInfo(curPlayer, zhanlingType, [ipyData])
    GameWorld.DebugLog("领取战令奖励: zhanlingType=%s,needValue=%s,rewardType=%s,itemList=%s" % (zhanlingType, needValue, rewardType, itemList), playerID)
    
    # 给物品
@@ -232,17 +261,11 @@
        
    return
def SyncZhanlingInfo(curPlayer, zhanlingType, ipyData=None):
def SyncZhanlingInfo(curPlayer, zhanlingType, ipyDataList=None):
    
    ipyDataList = []
    if ipyData == None:
    if ipyDataList == None:
        ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Zhanling", {"ZhanlingType":zhanlingType}, True)
    else:
        ipyDataList = [ipyData]
    if not ipyDataList:
        return
    rewardList = []
    for ipyData in ipyDataList:
        rewardIndex = ipyData.GetRewardIndex()
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1156,7 +1156,9 @@
CDBPlayerRefresh_TiandaoFruit, # 天道果 267
CDBPlayerRefresh_Tuijinbi, # 推金币 268
CDBPlayerRefresh_PayCoinDay, # 代币时效 269
) = range(146, 270)
CDBPlayerRefresh_XianyuanScore, # 仙缘积分 270
CDBPlayerRefresh_HuanjinggeScore, # 幻境阁积分 271
) = range(146, 272)
TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
@@ -1192,6 +1194,9 @@
TYPE_Price_HorsePetTrainScore = 45    # 骑宠养成积分
TYPE_Price_GubaoTrainScore = 46    # 古宝养成积分
TYPE_Price_TiandaoFruit = 47    # 天道果
TYPE_Price_Tuijinbi = 48    # 推金币
TYPE_Price_XianyuanScore = 49    # 仙缘积分
TYPE_Price_HuanjinggeScore = 50    # 幻境阁积分
TYPE_Price_PayCoinDay = 98    # 代币时效,每日过天重置
TYPE_Price_PayCoin = 99    # 代币
@@ -1201,6 +1206,7 @@
                 16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘", 
                 29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点", 
                 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 
                 49:"仙缘积分", 50:"幻境阁积分",
                 98:"代币时效", 99:"代币"
                 }
@@ -1241,6 +1247,8 @@
                           TYPE_Price_HorsePetTrainScore:CDBPlayerRefresh_HorsePetTrainScore,
                           TYPE_Price_GubaoTrainScore:CDBPlayerRefresh_GubaoTrainScore,
                           TYPE_Price_TiandaoFruit:CDBPlayerRefresh_TiandaoFruit,
                           TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore,
                           TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore,
                           TYPE_Price_PayCoinDay:CDBPlayerRefresh_PayCoinDay,
                           }