hxp
2025-12-05 c80c8718c507a7e52f065eee9e35bb4f27573f48
374 【活动内容】开服庆典-服务端
25个文件已修改
2个文件已删除
1592 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 535 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Success.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Tianzi.py 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_BossFirstKill.py 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -1324,15 +1324,6 @@
    BYTE        SkillResist;    //是否技能抵抗
};
//Boss首杀
struct tagBOSSFirstKill
{
    DWORD        _NPCID;    //ID
    WORD        PerPlayerMoneyAward;    // 首杀全服玩家奖励灵石额度/人
    list        PersonFirstKillAward;    // 个人首次击杀奖励 [[物品ID,个数,是否拍品], ...]
};
//NPC秀表
struct tagNPCShow
@@ -1809,29 +1800,6 @@
    BYTE        ChooseItemCount;    //选择个数
    dict        LibItemInfo;    //物品编号对应物品信息 {物品编号:[物品ID,个数,是否拍品,可选次数], ...}  0不限次数
    list        NotifyItemNumList;    //需要广播的编号列表
};
//BOSS复活活动时间表
struct tagActBossReborn
{
    DWORD        _CfgID;    //配置ID
    char        StartDate;    //开启日期
    char        EndDate;    //结束日期
    BYTE        ResetType;    //重置类型,0-0点重置;1-5点重置
    WORD        LVLimit;    //限制等级
    BYTE        TemplateID;    //模板编号
};
//BOSS复活表
struct tagBossReborn
{
    BYTE        _TemplateID;    //模板ID
    BYTE        _ID;    //活动条目ID
    DWORD        TotalTimes;    //可完成的总次数,0表示不限次数
    WORD        SingleTimes;    //单次领奖需要的次数
    dict        Reward;    //奖励物品ID1
};
//多倍修行点活动时间表
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -30,6 +30,7 @@
import PlayerLLMJ
import PlayerPrestigeSys
import CrossServerPackLogic
import PlayerSuccess
import IpyGameDataPY
import PlayerOnline
import NPCCommon
@@ -1325,6 +1326,7 @@
        PlayerLLMJ.AddUseZhanchui(curPlayer, useZhanchui)
        PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_UseXiantao, useZhanchui)
        PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_CutTree, useZhanchui)
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSACutTree, useZhanchui)
        PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_CutTree, useZhanchui)
        
    # 历练秘境额外经验
@@ -1337,6 +1339,7 @@
    if killNPCCnt > 0:
        PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_KillNPC, killNPCCnt)
        PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_KillNPC, killNPCCnt)
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAKillNPC, killNPCCnt)
        
    # 结算逻辑最后重置数据
    mainFightMgr.resetMainFightExDataRec()
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3473,16 +3473,6 @@
Def_PDict_CollectWordsExchangeCount = "CollectWordsCount_%s_%s"  # 兑换编号对应已兑换次数,参数(活动编号, 兑换编号)
Def_PDict_CollectWordsGJSeconds = "CollectWordsGJSeconds_%s"  # 挂机未处理收益的秒数,参数(活动编号)
#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复活活动开启时世界等级
#Boss首杀
Def_PDict_BossFirstKillState = "BossFirstKillState_%s" # boss首杀相关状态记录
#限时抢购活动
Def_PDict_FlashSaleID = "FlashSaleID_%s"  # 玩家身上的限时抢购活动ID,唯一标识,取活动开始日期time,参数(活动编号)
Def_PDict_FlashSaleState = "FlashSaleState_%s"  # 玩家身上的限时抢购活动state,参数(活动编号)
@@ -3705,6 +3695,10 @@
# 成就 Def_PDictType_Success
Def_PDict_SuccessValue = "Succ_%s_%s" # 当前次数值,参数(成就类型、条件)
Def_PDict_SuccessAward = "Succ_Award_%s" # 成就领奖记录,按成就ID位存储0-未领,1-已领,参数(key编号)
# 开服庆典
Def_PDict_OSACelebrationPoint = "OSACelebrationPoint" # 开服庆典累计积分
Def_PDict_OSACelebrationAward = "OSACelebrationAward" # 开服庆典累计积分阶段奖励领奖状态,按积分排序后的索引位记录是否已领取
# 通天令
Def_PDict_TTL_StartTime = "TTL_StartTime" # 本轮通天令开始时间戳
@@ -4382,7 +4376,7 @@
Def_GiveMoney_Warehouse, # 仓库
Def_GiveMoney_SellPackItem, # 出售背包物品
Def_GiveMoney_CollectNPC, # 采集NPC
Def_GiveMoney_BossFirstKill, # Boss首杀
Def_GiveMoney_20,
Def_GiveMoney_21,
Def_GiveMoney_Trade, # 交易
Def_GiveMoney_23,
@@ -4417,7 +4411,6 @@
Def_GiveMoney_Warehouse:"Warehouse",
Def_GiveMoney_SellPackItem:"SellPackItem",
Def_GiveMoney_CollectNPC:"CollectNPC",
Def_GiveMoney_BossFirstKill:"BossFirstKill",
Def_GiveMoney_Trade:"Trade",
Def_GiveMoney_FreeGoods:"FreeGoods",
Def_GiveMoney_BindJadeWheel:"BindJadeWheel",
@@ -4798,7 +4791,7 @@
Def_RewardType_BeautyLVAward, # 红颜等级奖励 6
Def_RewardType_DayRealmPoint, # 每日任务修行点奖励7
Def_RewardType_FirstCharge, # 首充礼包奖励8
Def_RewardType_MWSoulAward, # 法宝之魂奖励9 -废弃
Def_RewardType_OSACelebrationPointAward, # 开服庆典积分阶段奖励 9
Def_RewardType_FreeGoods, # 极品白拿10
Def_RewardType_CostRebate, # 消费返利11
Def_RewardType_BossReborn, # BOSS复活12
@@ -4873,27 +4866,6 @@
Def_RewardType_ADAward, # 广告奖励 81
Def_RewardType_TreeFreeTime, # 仙树免费减时 82
)= range(83)
#boss复活相关活动定义
BossRebornActIDList = (
Def_BRAct_VIPBOSS, #进入VIPboss副本 1
Def_BRAct_GodArea, #进入古神禁地副本 2
Def_BRAct_MoneyPray, #铜钱祈愿 3
Def_BRAct_ExpPray, #经验祈愿 4
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
Def_BRAct_TowerSweep, #符印塔扫荡 12
Def_BRAct_RuneTreasure,  #符印寻宝 13
Def_BRAct_FairyDomain,  #缥缈仙域 14
Def_BRAct_FamilyBoss,  #仙盟BOSS 15
Def_BRAct_ActivityPlace,  #活跃放置 16
Def_BRAct_JSTreasure,  #绝世寻宝 17
) = range(1, 17+1)
#全民来嗨活动定义(仙界盛典)
PeoplePartyActIDList = (
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -8961,62 +8961,6 @@
#------------------------------------------------------
# A9 01 获取Boss首杀奖励 #tagCGGetBossFirstKillAward
class  tagCGGetBossFirstKillAward(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("NPCID", c_int),
                  ("AwardType", c_ubyte),    # 0-首杀红包奖励;1-个人首杀奖励
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA9
        self.SubCmd = 0x01
        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.Cmd = 0xA9
        self.SubCmd = 0x01
        self.NPCID = 0
        self.AwardType = 0
        return
    def GetLength(self):
        return sizeof(tagCGGetBossFirstKillAward)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A9 01 获取Boss首杀奖励 //tagCGGetBossFirstKillAward:
                                Cmd:%s,
                                SubCmd:%s,
                                NPCID:%d,
                                AwardType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.NPCID,
                                self.AwardType
                                )
        return DumpString
m_NAtagCGGetBossFirstKillAward=tagCGGetBossFirstKillAward()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetBossFirstKillAward.Cmd,m_NAtagCGGetBossFirstKillAward.SubCmd))] = m_NAtagCGGetBossFirstKillAward
#------------------------------------------------------
# A9 07 点赞仙宫 #tagCGLikeXiangong
class  tagCGLikeXiangong(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -28961,454 +28961,21 @@
#------------------------------------------------------
# AB 01 Boss首杀玩家奖励信息 #tagMCBossFirstKillStateInfo
# AB 05 开服庆典信息 #tagSCOSACelebrationInfo
class  tagMCBossFirstKillState(Structure):
    _pack_ = 1
    _fields_ = [
                  ("NPCID", c_int),
                  ("FKState", c_int),    # 玩家该boss首杀相关状态,按位存:个位-玩家是否击杀过,十位-是否已领取首杀全服奖励,百位-是否已领取个人首杀奖励
                  ]
    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.NPCID = 0
        self.FKState = 0
        return
    def GetLength(self):
        return sizeof(tagMCBossFirstKillState)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AB 01 Boss首杀玩家奖励信息 //tagMCBossFirstKillStateInfo:
                                NPCID:%d,
                                FKState:%d
                                '''\
                                %(
                                self.NPCID,
                                self.FKState
                                )
        return DumpString
class  tagMCBossFirstKillStateInfo(Structure):
    Head = tagHead()
    BossCount = 0    #(BYTE BossCount)
    FirstKillStateList = list()    #(vector<tagMCBossFirstKillState> FirstKillStateList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAB
        self.Head.SubCmd = 0x01
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.BossCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.BossCount):
            temFirstKillStateList = tagMCBossFirstKillState()
            _pos = temFirstKillStateList.ReadData(_lpData, _pos)
            self.FirstKillStateList.append(temFirstKillStateList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAB
        self.Head.SubCmd = 0x01
        self.BossCount = 0
        self.FirstKillStateList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.BossCount):
            length += self.FirstKillStateList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.BossCount)
        for i in range(self.BossCount):
            data = CommFunc.WriteString(data, self.FirstKillStateList[i].GetLength(), self.FirstKillStateList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                BossCount:%d,
                                FirstKillStateList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.BossCount,
                                "..."
                                )
        return DumpString
m_NAtagMCBossFirstKillStateInfo=tagMCBossFirstKillStateInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossFirstKillStateInfo.Head.Cmd,m_NAtagMCBossFirstKillStateInfo.Head.SubCmd))] = m_NAtagMCBossFirstKillStateInfo
#------------------------------------------------------
# AB 03 Boss复活玩家活动信息 #tagMCBossRebornPlayerInfo
class  tagMCBossRebornData(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ActID", c_ubyte),    #活动ID
                  ("CurTimes", c_ushort),    #已完成次数
                  ("GotTimes", c_ushort),    #已领取次数
                  ]
    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.ActID = 0
        self.CurTimes = 0
        self.GotTimes = 0
        return
    def GetLength(self):
        return sizeof(tagMCBossRebornData)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AB 03 Boss复活玩家活动信息 //tagMCBossRebornPlayerInfo:
                                ActID:%d,
                                CurTimes:%d,
                                GotTimes:%d
                                '''\
                                %(
                                self.ActID,
                                self.CurTimes,
                                self.GotTimes
                                )
        return DumpString
class  tagMCBossRebornPlayerInfo(Structure):
    Head = tagHead()
    Count = 0    #(BYTE Count)//活动个数
    DataList = list()    #(vector<tagMCBossRebornData> DataList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAB
        self.Head.SubCmd = 0x03
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Count):
            temDataList = tagMCBossRebornData()
            _pos = temDataList.ReadData(_lpData, _pos)
            self.DataList.append(temDataList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAB
        self.Head.SubCmd = 0x03
        self.Count = 0
        self.DataList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.Count):
            length += self.DataList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.DataList[i].GetLength(), self.DataList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                DataList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagMCBossRebornPlayerInfo=tagMCBossRebornPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornPlayerInfo.Head.Cmd,m_NAtagMCBossRebornPlayerInfo.Head.SubCmd))] = m_NAtagMCBossRebornPlayerInfo
#------------------------------------------------------
# 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
    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
    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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        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.ResetType = 0
        self.LimitLV = 0
        self.TaskCnt = 0
        self.TaskInfo = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 10
        length += 10
        length += 1
        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.WriteBYTE(data, self.ResetType)
        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,
                                ResetType:%d,
                                LimitLV:%d,
                                TaskCnt:%d,
                                TaskInfo:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.StartDate,
                                self.EndtDate,
                                self.ResetType,
                                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 19 炼制奖励信息 #tagMCRefineGiftInfo
class  tagMCRefineGiftInfo(Structure):
class  tagSCOSACelebrationInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ExpRefineStartTime", c_int),    # 经验炼制活动开始时间
                  ("MoneyRefineStartTime", c_int),    # 金币炼制活动开始时间
                  ("ExpRefineCnt", c_ubyte),    # 经验已炼制次数
                  ("MoneyRefineCnt", c_ubyte),    # 金币已炼制次数
                  ("PointTotal", c_int),    # 累计庆典积分
                  ("PointAward", c_int),    # 积分阶段奖励记录,按阶段积分排序后索引二进制存储是否已领取
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAB
        self.SubCmd = 0x19
        self.SubCmd = 0x05
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -29418,105 +28985,35 @@
    def Clear(self):
        self.Cmd = 0xAB
        self.SubCmd = 0x19
        self.ExpRefineStartTime = 0
        self.MoneyRefineStartTime = 0
        self.ExpRefineCnt = 0
        self.MoneyRefineCnt = 0
        self.SubCmd = 0x05
        self.PointTotal = 0
        self.PointAward = 0
        return
    def GetLength(self):
        return sizeof(tagMCRefineGiftInfo)
        return sizeof(tagSCOSACelebrationInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AB 19 炼制奖励信息 //tagMCRefineGiftInfo:
        DumpString = '''// AB 05 开服庆典信息 //tagSCOSACelebrationInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ExpRefineStartTime:%d,
                                MoneyRefineStartTime:%d,
                                ExpRefineCnt:%d,
                                MoneyRefineCnt:%d
                                PointTotal:%d,
                                PointAward:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ExpRefineStartTime,
                                self.MoneyRefineStartTime,
                                self.ExpRefineCnt,
                                self.MoneyRefineCnt
                                self.PointTotal,
                                self.PointAward
                                )
        return DumpString
m_NAtagMCRefineGiftInfo=tagMCRefineGiftInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRefineGiftInfo.Cmd,m_NAtagMCRefineGiftInfo.SubCmd))] = m_NAtagMCRefineGiftInfo
#------------------------------------------------------
# AC 08 boss复活点数通知 #tagGCBossRebornPoint
class  tagGCBossRebornPoint(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Point", c_int),    # 复活点数
                  ("TotalPoint", c_int),    # 复活总点数
                  ("RebornCnt", c_ushort),    # 今日已复活次数
                  ("TotalRebornCnt", c_ushort),    # 每日可复活总次数,0为不限制
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAC
        self.SubCmd = 0x08
        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.Cmd = 0xAC
        self.SubCmd = 0x08
        self.Point = 0
        self.TotalPoint = 0
        self.RebornCnt = 0
        self.TotalRebornCnt = 0
        return
    def GetLength(self):
        return sizeof(tagGCBossRebornPoint)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
                                Cmd:%s,
                                SubCmd:%s,
                                Point:%d,
                                TotalPoint:%d,
                                RebornCnt:%d,
                                TotalRebornCnt:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Point,
                                self.TotalPoint,
                                self.RebornCnt,
                                self.TotalRebornCnt
                                )
        return DumpString
m_NAtagGCBossRebornPoint=tagGCBossRebornPoint()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint
m_NAtagSCOSACelebrationInfo=tagSCOSACelebrationInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCOSACelebrationInfo.Cmd,m_NAtagSCOSACelebrationInfo.SubCmd))] = m_NAtagSCOSACelebrationInfo
#------------------------------------------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py
@@ -15,8 +15,11 @@
#"""Version = 2025-11-25 19:30"""
#-------------------------------------------------------------------------------
import ChConfig
import GameWorld
import ShareDefine
import PlayerControl
import OpenServerActivity
import GameWorldEvent
import PlayerSignDay
import GameFuncComm
@@ -30,12 +33,24 @@
    if not cmdList:
        GameWorld.DebugAnswer(curPlayer, "设置开服天: ServerDay 第几天")
        GameWorld.DebugAnswer(curPlayer, "重置开服天: ServerDay 1")
        GameWorld.DebugAnswer(curPlayer, "重置庆典奖: ServerDay osa")
        GameWorld.DebugAnswer(curPlayer, "设置庆典分: ServerDay osa 累计积分")
        GameWorld.DebugAnswer(curPlayer, "重置开服天时会重置开服冲榜、庆典奖励")
        __printServerDay(curPlayer)
        return
    
    value = cmdList[0]
    
    if value <= 1:
    if value == "osa":
        point = cmdList[1] if len(cmdList) > 1 else 0
        if point <= 0:
            __clearOSACelebration(curPlayer)
        else:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationPoint, point)
            OpenServerActivity.SyncOSACelebrationInfo(curPlayer)
            GameWorld.DebugAnswer(curPlayer, "开服庆典累计积分: %s" % point)
        return
    elif value <= 1:
        __clearOpenServerDay(curPlayer)
    elif value > 1:
        __setOpenServerDay(curPlayer, value)
@@ -61,6 +76,7 @@
    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_IsMixServer, 0)
    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_MixServerDay, 0)
    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_OSAAwardState, 0)
    __clearOSACelebration(curPlayer)
    
    curTime = int(time.time())
    GameWorldEvent.SetInitOpenServerTime(curTime)
@@ -68,6 +84,13 @@
    PlayerSignDay.ResetDaySign(curPlayer)
    return
def __clearOSACelebration(curPlayer):
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationPoint, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationAward, 0)
    OpenServerActivity.SyncOSACelebrationInfo(curPlayer)
    GameWorld.DebugAnswer(curPlayer, "重置开服庆典")
    return
def __setOpenServerDay(curPlayer, serverDay):
    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerDay, serverDay - 1)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Success.py
@@ -40,15 +40,17 @@
        succType = msgList[1] if len(msgList) > 1 else 0
        addValue = msgList[2] if len(msgList) > 2 else 1
        conds = msgList[3:]
        GameWorld.DebugAnswer(curPlayer, "增加成就进度: T:%s,V:%s,C:%s" % (succType, addValue, conds))
        PlayerSuccess.DoAddSuccessProgress(curPlayer, succType, addValue, conds)
        PlayerSuccess.DoAddSuccessProgress(curPlayer, succType, addValue, conds, delayCalc=False)
        curValue = PlayerSuccess.GetSuccValue(curPlayer, succType, conds)
        GameWorld.DebugAnswer(curPlayer, "增加成就进度: T:%s,A:%s,V:%s,C:%s," % (succType, addValue, curValue, conds))
    # 更新进度
    elif cmdType == "u":
        succType = msgList[1] if len(msgList) > 1 else 0
        newCnt = msgList[2] if len(msgList) > 2 else 1
        conds = msgList[3:]
        GameWorld.DebugAnswer(curPlayer, "更新成就进度: T:%s,V:%s,C:%s" % (succType, addValue, conds))
        PlayerSuccess.UptateSuccessProgress(curPlayer, succType, newCnt, conds)
        curValue = PlayerSuccess.GetSuccValue(curPlayer, succType, conds)
        GameWorld.DebugAnswer(curPlayer, "更新成就进度: T:%s,V:%s,C:%s" % (succType, curValue, conds))
    return
def __DoResetSuccess(curPlayer, msgList, resetValue=True):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py
@@ -21,6 +21,7 @@
import ShareDefine
import PlayerControl
import IpyGameDataPY
import PlayerSuccess
import PlayerActivity
import PlayerBillboard
import PlayerViewCache
@@ -71,6 +72,7 @@
        return
    
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_ArenaBattle)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAArenaBattle, 1)
    
    return True, funcLineID
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
@@ -20,6 +20,7 @@
import TurnAttack
import ShareDefine
import IpyGameDataPY
import PlayerSuccess
import PlayerControl
import PlayerActivity
import ChPyNetSendPack
@@ -433,6 +434,7 @@
    ChEquip.RefreshRoleEquipAttr(curPlayer)
    
    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_EquipColor)
    PlayerSuccess.UpdateEquipSuccess(curPlayer)
    return
def __doDecomposeMainEquip(curPlayer, itemIndexList):
@@ -486,6 +488,7 @@
    PlayerLLMJ.AddExpDecompose(curPlayer, mjExTotal)
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_EquipDecompose, decomposeCnt)
    PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_EquipDecompose, decomposeCnt)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAEquipDecompose, decomposeCnt)
    return
def __doPickupMainItem(curPlayer, itemIndexList):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Tianzi.py
@@ -20,6 +20,7 @@
import GameWorld
import ItemControler
import PlayerControl
import PlayerSuccess
import PlayerBillboard
import ChPyNetSendPack
import NetPackCommon
@@ -82,7 +83,6 @@
        GameWorld.DebugLog("非今日天子考验! mapID=%s,funcLineID=%s != %s,bossID=%s" % (mapID, funcLineID, lineID, bossID))
        return
    
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_FBTianzi)
    return True, funcLineID
def GetFBNPCInitAttr(turnFight, npcObj):
@@ -196,6 +196,7 @@
    FBCommon.AddEnterFBCount(curPlayer, mapID)
    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Tianzi", False, {}], isNotifyAward=False)
    SyncTianziInfo(curPlayer, lineID, bossID)
    __onFBTianzi(curPlayer)
    return
def __getTianziAwardList(todayHurt, bossID, sweepCnt=1):
@@ -252,8 +253,14 @@
    overDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(itemList), FBCommon.Over_isSweep:1, 
                "totalHurt":todayHurtTotal, "todayHurtTotal":todayHurtTotal}
    FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
    __onFBTianzi(curPlayer)
    return True
def __onFBTianzi(curPlayer):
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_FBTianzi)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAFBTianzi, 1)
    return
def SyncTianziInfo(curPlayer, lineID=None, bossID=None):
    if lineID == None:
        lineID, bossID = GetTianziTodayInfo(curPlayer)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py
@@ -19,6 +19,8 @@
import ItemControler
import PlayerBeauty
import FBCommon
import PlayerSuccess
import ShareDefine
import PlayerTask
import ChConfig
@@ -55,6 +57,7 @@
    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
    
    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_FBZhanchui)
    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAFBZhanchui, funcLineID)
    return
    
def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, dataEx):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1082,12 +1082,6 @@
                        ("BYTE", "SkillResist", 0),
                        ),
                "BOSSFirstKill":(
                        ("DWORD", "NPCID", 1),
                        ("WORD", "PerPlayerMoneyAward", 0),
                        ("list", "PersonFirstKillAward", 0),
                        ),
                "NPCShow":(
                        ("DWORD", "NPCID", 1),
                        ("DWORD", "MapID", 1),
@@ -1456,23 +1450,6 @@
                        ("BYTE", "ChooseItemCount", 0),
                        ("dict", "LibItemInfo", 0),
                        ("list", "NotifyItemNumList", 0),
                        ),
                "ActBossReborn":(
                        ("DWORD", "CfgID", 1),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("BYTE", "ResetType", 0),
                        ("WORD", "LVLimit", 0),
                        ("BYTE", "TemplateID", 0),
                        ),
                "BossReborn":(
                        ("BYTE", "TemplateID", 1),
                        ("BYTE", "ID", 1),
                        ("DWORD", "TotalTimes", 0),
                        ("WORD", "SingleTimes", 0),
                        ("dict", "Reward", 0),
                        ),
                "ActRealmPoint":(
@@ -3752,17 +3729,6 @@
    def GetCanAssist(self): return self.attrTuple[8] # 是否可协助 BYTE
    def GetSkillResist(self): return self.attrTuple[9] # 是否技能抵抗 BYTE
# Boss首杀
class IPY_BOSSFirstKill():
    def __init__(self):
        self.attrTuple = None
        return
    def GetNPCID(self): return self.attrTuple[0] # ID DWORD
    def GetPerPlayerMoneyAward(self): return self.attrTuple[1] #  首杀全服玩家奖励灵石额度/人 WORD
    def GetPersonFirstKillAward(self): return self.attrTuple[2] #  个人首次击杀奖励 [[物品ID,个数,是否拍品], ...] list
# NPC秀表
class IPY_NPCShow():
    
@@ -4312,33 +4278,6 @@
    def GetChooseItemCount(self): return self.attrTuple[3] # 选择个数 BYTE
    def GetLibItemInfo(self): return self.attrTuple[4] # 物品编号对应物品信息 {物品编号:[物品ID,个数,是否拍品,可选次数], ...}  0不限次数 dict
    def GetNotifyItemNumList(self): return self.attrTuple[5] # 需要广播的编号列表 list
# BOSS复活活动时间表
class IPY_ActBossReborn():
    def __init__(self):
        self.attrTuple = None
        return
    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 GetResetType(self): return self.attrTuple[3] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetLVLimit(self): return self.attrTuple[4] # 限制等级 WORD
    def GetTemplateID(self): return self.attrTuple[5] # 模板编号 BYTE
# BOSS复活表
class IPY_BossReborn():
    def __init__(self):
        self.attrTuple = None
        return
    def GetTemplateID(self): return self.attrTuple[0] # 模板ID BYTE
    def GetID(self): return self.attrTuple[1] # 活动条目ID BYTE
    def GetTotalTimes(self): return self.attrTuple[2] # 可完成的总次数,0表示不限次数 DWORD
    def GetSingleTimes(self): return self.attrTuple[3] # 单次领奖需要的次数 WORD
    def GetReward(self): return self.attrTuple[4] # 奖励物品ID1 dict
# 多倍修行点活动时间表
class IPY_ActRealmPoint():
@@ -5675,7 +5614,6 @@
        self.__LoadFileData("DailyTask", onlyCheck)
        self.__LoadFileData("DailyLivenessReward", onlyCheck)
        self.__LoadFileData("BOSSInfo", onlyCheck)
        self.__LoadFileData("BOSSFirstKill", onlyCheck)
        self.__LoadFileData("NPCShow", onlyCheck)
        self.__LoadFileData("MapRefreshNPC", onlyCheck)
        self.__LoadFileData("RuneCompound", onlyCheck)
@@ -5712,8 +5650,6 @@
        self.__LoadFileData("CrossActFamilyGCZSQ", onlyCheck)
        self.__LoadFileData("ActGodGift", onlyCheck)
        self.__LoadFileData("ActGodGiftAward", onlyCheck)
        self.__LoadFileData("ActBossReborn", onlyCheck)
        self.__LoadFileData("BossReborn", onlyCheck)
        self.__LoadFileData("ActRealmPoint", onlyCheck)
        self.__LoadFileData("TrialExchange", onlyCheck)
        self.__LoadFileData("AllPeopleParty", onlyCheck)
@@ -6699,13 +6635,6 @@
        self.CheckLoadData("BOSSInfo")
        return self.ipyBOSSInfoCache[index]
    def GetBOSSFirstKillCount(self):
        self.CheckLoadData("BOSSFirstKill")
        return self.ipyBOSSFirstKillLen
    def GetBOSSFirstKillByIndex(self, index):
        self.CheckLoadData("BOSSFirstKill")
        return self.ipyBOSSFirstKillCache[index]
    def GetNPCShowCount(self):
        self.CheckLoadData("NPCShow")
        return self.ipyNPCShowLen
@@ -6957,20 +6886,6 @@
    def GetActGodGiftAwardByIndex(self, index):
        self.CheckLoadData("ActGodGiftAward")
        return self.ipyActGodGiftAwardCache[index]
    def GetActBossRebornCount(self):
        self.CheckLoadData("ActBossReborn")
        return self.ipyActBossRebornLen
    def GetActBossRebornByIndex(self, index):
        self.CheckLoadData("ActBossReborn")
        return self.ipyActBossRebornCache[index]
    def GetBossRebornCount(self):
        self.CheckLoadData("BossReborn")
        return self.ipyBossRebornLen
    def GetBossRebornByIndex(self, index):
        self.CheckLoadData("BossReborn")
        return self.ipyBossRebornCache[index]
    def GetActRealmPointCount(self):
        self.CheckLoadData("ActRealmPoint")
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -41,9 +41,7 @@
import NetPackCommon
import FBCommon
import PlayerPrestigeSys
import GY_Query_BossFirstKill
import FormulaControl
import PlayerBossReborn
import PlayerCrossYaomoBoss
import PlayerActCollectWords
import PlayerTongTianLing
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -53,7 +53,6 @@
import PlayerCrossChampionship
import GameFuncComm
import PlayerFamilyTaofa
import PlayerBossReborn
import PlayerWeekParty
import PlayerFeastWeekParty
import PlayerFeastLogin
@@ -80,7 +79,6 @@
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
import PlayerSpringSale
import GY_Query_BossFirstKill
import PlayerCrossYaomoBoss
import PlayerLuckyCloudBuy
import PlayerLuckyTreasure
@@ -89,6 +87,7 @@
import PlayerFuncSysPrivilege
import PlayerActTurntable
import PlayerTongTianLing
import OpenServerActivity
import CrossRealmPlayer
import ChNetSendPack
import PlayerArena
@@ -617,8 +616,6 @@
    #PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
    # 极品白拿
    PlayerFreeGoods.OnLogin(curPlayer)
    # BOSS复活活动
    PlayerBossReborn.OnLogin(curPlayer)
    # 周狂欢活动
    PlayerWeekParty.OnLogin(curPlayer)
    # 购买次数礼包活动
@@ -664,8 +661,6 @@
    PlayerFB.OnLogin(curPlayer)
    #技能专精信息
    #SkillShell.NotifyElementSkillInfo(curPlayer)
    #Boss首杀
    GY_Query_BossFirstKill.OnPlayerLogin(curPlayer)
    #通天令
    PlayerTongTianLing.OnPlayerLogin(curPlayer)
    #创角奖励
@@ -735,6 +730,7 @@
        PlayerLLMJ.OnPlayerLogin(curPlayer)
        PlayerBeauty.OnPlayerLogin(curPlayer)
        PlayerTravel.OnPlayerLogin(curPlayer)
        OpenServerActivity.OnPlayerLogin(curPlayer)
        
        # 上线查询一次充值订单
        # curPlayer.SendDBQueryRecharge() 不查了,由在线轮询触发即可
@@ -3194,6 +3190,9 @@
    # 领取分包下载奖励
    elif rewardType == ChConfig.Def_RewardType_DownLoad:
        GetDownloadAward(curPlayer, dataEx)
    # 开服庆典积分阶段奖励
    elif rewardType == ChConfig.Def_RewardType_OSACelebrationPointAward:
        OpenServerActivity.GetOSACelebrationPointAward(curPlayer, dataEx)
        
        
    # 每日免费直购礼包
@@ -3220,9 +3219,6 @@
    # 领取单笔累充领取
    elif rewardType == ChConfig.Def_RewardType_SingleRecharge:
        PlayerActSingleRecharge.OnGetSingleRechargeAward(curPlayer, dataEx, dataExStr)
    # 领取boss复活活动奖励
    elif rewardType == ChConfig.Def_RewardType_BossReborn:
        PlayerBossReborn.GetBossRebornActionAward(curPlayer, dataEx)
    # 领取许愿池奖励
    elif rewardType == ChConfig.Def_RewardType_WishingWell:
        PlayerWishingWell.DoGetWishingAward(curPlayer)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerActivity.py
@@ -19,10 +19,15 @@
import ShareDefine
import GameFuncComm
import IpyGameDataPY
import PlayerBillboard
import PlayerTreasure
import PlayerBillboard
import ChPyNetSendPack
import PlayerControl
import NetPackCommon
import ItemControler
import GameWorld
import ChConfig
import ObjPool
# 开服冲榜类型对应功能ID
OSAFuncIDDict = {
@@ -97,3 +102,67 @@
            PlayerBillboard.DoGiveBillboardAwardByMail(osaType, "OSAHeroCall", billboardAwardDict, "OSAHeroCall")
            
    return
## ------------------------------------------- 开服庆典 ---------------------------------------------
def OnPlayerLogin(curPlayer):
    SyncOSACelebrationInfo(curPlayer)
    return
def GetOSACelebrationState(curPlayer):
    ## 玩家是否在开服庆典活动中
    # @return: 0-未开启;1-活动中;2-结束显示期;3-结束关闭期
    funcID = ShareDefine.GameFuncID_OSA_Celebration
    if not GameFuncComm.GetFuncCanUse(curPlayer, funcID):
        #GameWorld.DebugLog("开服庆典功能未开启! funcID=%s" % (funcID))
        return 0
    endDay = IpyGameDataPY.GetFuncCfg("OSACelebration", 1)
    serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
    if serverDay <= endDay:
        #GameWorld.DebugLog("开服庆典活动中! serverDay=%s,endDay=%s" % (serverDay, endDay))
        return 1
    if serverDay == (endDay + 1):
        #GameWorld.DebugLog("开服庆典结算中! serverDay=%s,endDay=%s" % (serverDay, endDay))
        return 2
    #GameWorld.DebugLog("开服庆典已结束! serverDay=%s,endDay=%s" % (serverDay, endDay))
    return 3
def AddOSACelebrationPoint(curPlayer, addPoint):
    ## 庆典累计积分
    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
    updPoint = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationPoint, curPoint + addPoint)
    GameWorld.DebugLog("增加开服庆典积分: addPoint=%s,curPoint=%s,updPoint=%s" % (addPoint, curPoint, updPoint))
    SyncOSACelebrationInfo(curPlayer)
    return
def GetOSACelebrationPointAward(curPlayer, awardPoint):
    ## 领取开服庆典累计积分阶段奖励
    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
    if curPoint < awardPoint:
        GameWorld.DebugLog("累计开服庆典积分不足: curPoint=%s < %s" % (curPoint, awardPoint))
        return
    awardDict = IpyGameDataPY.GetFuncEvalCfg("OSACelebration", 2, {}) # {"累计积分":[[物品ID,个数], ...], ...}
    pointKeyList = [int(p) for p in awardDict.keys()]
    pointKeyList.sort()
    if awardPoint not in pointKeyList:
        GameWorld.DebugLog("不存在该开服庆典积分阶段奖励: awardPoint=%s not in %s" % (awardPoint, pointKeyList))
        return
    index = pointKeyList.index(awardPoint)
    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationAward)
    if awardState&pow(2, index):
        GameWorld.DebugLog("该开服庆典积分阶段奖励已领取: awardPoint=%s,index=%s,awardState=%s" % (awardPoint, index, awardState))
        return
    updState = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationAward, awardState|pow(2, index))
    itemList = awardDict[str(awardPoint)]
    GameWorld.DebugLog("领取开服庆典积分阶段奖励: awardPoint=%s,index=%s,awardState=%s,updState=%s,itemList=%s" % (awardPoint, index, awardState, updState, itemList))
    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["OSACelebration", False, {}])
    SyncOSACelebrationInfo(curPlayer)
    return
def SyncOSACelebrationInfo(curPlayer):
    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCOSACelebrationInfo)
    clientPack.PointTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
    clientPack.PointAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationAward)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3018,9 +3018,12 @@
    
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_GetMoney, value, [priceType])
    PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_GetMoney, value, [priceType])
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAGetMoney, value, [priceType])
    
    if priceType == ShareDefine.TYPE_Price_FamilyCoin:
        PlayerFamily.AddFamilyContrib(curPlayer, value) # 公会币同步增加公会贡献
    elif priceType == ShareDefine.TYPE_Price_OSAPoint:
        OpenServerActivity.AddOSACelebrationPoint(curPlayer, value)
        
    if priceType not in [IPY_GameWorld.TYPE_Price_Gold_Money, IPY_GameWorld.TYPE_Price_Gold_Paper, ShareDefine.TYPE_Price_PayCoin] \
        and giveType == ChConfig.Def_GiveMoney_Unknown:
@@ -4331,6 +4334,7 @@
        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_MainLevel, lvID)
        PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevel)
        PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_MainLevel, lvID)
        PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAMainLevel, lvID)
        if OpenServerActivity.GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_MainLevel) == 1:
            PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_MainLevel, lvID)
    return value
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -56,7 +56,6 @@
import PlayerActTurntable
import PlayerActBuyOne
import PlayerSpringSale
import PlayerBossReborn
import PlayerWeekParty
import PlayerFeastWeekParty
import PlayerFeastLogin
@@ -898,9 +897,6 @@
                
            elif actionName == ShareDefine.OperationActionName_SpringSale:
                PlayerSpringSale.RefreshSpringSaleActionInfo(actNum)
            elif actionName == ShareDefine.OperationActionName_BossReborn:
                PlayerBossReborn.RefreshOperationAction_BossReborn()
                
            elif actionName == ShareDefine.OperationActionName_FlashGiftbag:
                PlayerFlashGiftbag.RefreshFlashGiftbagActionInfo(actNum)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py
@@ -20,6 +20,7 @@
import NetPackCommon
import IpyGameDataPY
import ItemControler
import PlayerSuccess
import ChPyNetSendPack
import PlayerActivity
import PlayerControl
@@ -318,6 +319,7 @@
                       % (updWorkerCnt, realNeedSeconds, GameWorld.ChangeTimeNumToStr(endTime), campInfo))
    
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_GoldRush, 1)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAGoldRush, 1)
    return
def GetWorkerTotal(curPlayer):
@@ -415,6 +417,8 @@
    SyncGoldRushInfo(curPlayer)
    
    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_GoldRushWorkers)
    workersTotal = GetWorkerTotal(curPlayer)
    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAGoldRushWorkers, workersTotal)
    return
#// B0 38 淘金仓库领奖 #tagCSGoldRushWarehouseAward
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -20,6 +20,7 @@
import IpyGameDataPY
import IPY_GameWorld
import ItemControler
import PlayerSuccess
import ChPyNetSendPack
import PlayerActivity
import NetPackCommon
@@ -355,6 +356,7 @@
    
    PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroLVUP, 1)
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroLVUP)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroLVUP, 1)
    return
def GetHeroLVMax(heroItem):
@@ -475,6 +477,7 @@
        __DoHeroStarTalentUp(item, addStar)
        PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroStarUP, addStar)
        PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroStarUP, addStar)
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroStarUP, addStar)
        
    if isSync:
        heroItem.Sync_Item()
@@ -1105,7 +1108,9 @@
    
    RefreshLordAttr(curPlayer)
    
    bookCnt = GetHeroBookActCnt(curPlayer)
    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_HeroBook)
    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroBook, bookCnt)
    return
def __doHeroBookStarLVUP(curPlayer, heroID):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -20,6 +20,7 @@
import ShareDefine
import NetPackCommon
import PlayerControl
import PlayerSuccess
import ChPyNetSendPack
import IPY_GameWorld
import IpyGameDataPY
@@ -122,6 +123,7 @@
        RefreshHorseAttr(curPlayer)
        
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HorseLVUP, costItemCount)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHorseLVUP, costItemCount)
    return
#// B2 02 坐骑进阶 #tagCSHorseClassUP
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
@@ -29,6 +29,7 @@
import PlayerTongTianLing
import PlayerTask
import PlayerOnline
import PlayerSuccess
#------------------------------------------------------------------------------
@@ -264,6 +265,7 @@
    SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList)
    PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_RealmUp, 1)
    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_RealmLV)
    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSARealmLV, nextRealmLv)
    #更新排行榜
    PlayerBillboard.UpdateRealmBillboard(curPlayer)
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
@@ -20,7 +20,9 @@
import ShareDefine
import NetPackCommon
import PlayerControl
import OpenServerActivity
import ChPyNetSendPack
import IPY_GameWorld
import ItemControler
import IpyGameDataPY
import PyGameData
@@ -47,72 +49,119 @@
    SyncSuccessAwardRecord(curPlayer)
    return
def ResetSuccessByType(curPlayer, succType, ignoreFinish=True):
def ResetSuccessByTypes(curPlayer, succTypeList, ignoreFinish=True, isNotify=True):
    ## 重置成就
    for succType in succTypeList:
        ResetSuccessByType(curPlayer, succType, ignoreFinish, isNotify)
    return
def ResetSuccessByType(curPlayer, succType, ignoreFinish=True, isNotify=True):
    #重置某类型成就进度,一般用于先重置次数再重新计数,或者活动类
    ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", succType)
    if not ipyDataList:
        return
    succIDList = []
    syncTypeCondList = []
    for ipyData in ipyDataList:
        succID = ipyData.GetSuccID()
        if ignoreFinish and GetSuccHasGot(curPlayer, succID):
            continue
        conds = ipyData.GetCondition()
        SetSuccValue(curPlayer, succType, conds, 0)
        SetSuccHasGot(curPlayer, succID, 0)
        succIDList.append(succID)
        if [succType, conds] not in syncTypeCondList:
            syncTypeCondList.append([succType, conds])
    if isNotify:
        succIDList and SyncSuccessAwardRecord(curPlayer, succIDList, True)
        syncTypeCondList and SyncSuccessInfo(curPlayer, syncTypeCondList, True)
    return
#def UpdateSuccessProgressByConditions(curPlayer, successType, conditionCountDict):
#    ## 根据多种条件更新进度,如装备多品质的
#    ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
#    if not ipyDataList:
#        return
#    updIDList = []
#    updsuccDataList = []
#    updConditionDict = {}
#
#    for condition, newCount in conditionCountDict.items():
#        addCondList = [] # 不同的成就ID条件可能相同,只是最大进度不同,故传入的条件计数针对相同成就条件只能累加一次
#        for ipyData in ipyDataList:
#            succID = ipyData.GetSuccID()
#            conds = ipyData.GetCondition()
#            needCnt = ipyData.GetNeedCnt()
#
#            tupleCond = tuple(conds) # 作为字典key用
#
#            if tupleCond not in updConditionDict:
#                updConditionDict[tupleCond] = [conds, 0, 0] # [条件, 更新值, 最大进度值]
#            updInfo = updConditionDict[tupleCond]
#            if updInfo[2] < needCnt:
#                updInfo[2] = needCnt
#
#            if not __CheckCanAddSuccess(curPlayer, ipyData, list(condition)):
#                continue
#
#            if succID not in updIDList:
#                updIDList.append(succID)
#                updsuccDataList.append(ipyData)
#
#            if tupleCond not in addCondList:
#                addCondList.append(tupleCond)
#                updConditionDict[tupleCond][1] = updConditionDict[tupleCond][1] + newCount # 更新进度值
#
#    # 没有找到更新目标不处理
#    #GameWorld.DebugLog("    updConditionDict=%s" % updConditionDict)
#    #GameWorld.DebugLog("    updIDList=%s" % updIDList)
#    if not updIDList:
#        return
#
#    # 先更新成就记录值后再判断完成与否
#    for cond, updCnt, maxCnt in updConditionDict.values():
#        if not updCnt:
#            continue
#        updCnt = min(maxCnt, updCnt)
#        if GetSuccValue(curPlayer, successType, cond) == updCnt:
#            continue
#        SetSuccValue(curPlayer, successType, cond, updCnt)
#    SyncSuccessInfo(curPlayer, syncTypeCondList)
#    return
def UpdateEquipSuccess(curPlayer):
    # 装备相关成就
    colorCountDict = {}
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
    for equipPlace in ChConfig.Def_MainEquipPlaces:
        equipIndex = equipPlace - 1
        if equipIndex < 0 or equipIndex >= equipPack.GetCount():
            continue
        curEquip = equipPack.GetAt(equipIndex)
        if not curEquip or curEquip.IsEmpty():
            continue
        itemColor = curEquip.GetItemColor()
        condKey = (itemColor, )
        colorCountDict[condKey] = colorCountDict.get(condKey, 0) + 1
    UpdateSuccessProgressByConditions(curPlayer, ShareDefine.SuccType_OSAEquipColor, colorCountDict)
    return
def UpdateSuccessProgressByConditions(curPlayer, successType, conditionCountDict):
    ## 根据多种条件更新进度,如装备多品质的
    # @param conditionCountDict: 条件对应件数,条件需用元组为key {(c, ...):cnt, ..}
    if successType in ShareDefine.OSASuccTypeList:
        if OpenServerActivity.GetOSACelebrationState(curPlayer) != 1:
            return
    ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
    if not ipyDataList:
        return
    updIDList = []
    updsuccDataList = []
    updConditionDict = {}
    for condition, newCount in conditionCountDict.items():
        addCondList = [] # 不同的成就ID条件可能相同,只是最大进度不同,故传入的条件计数针对相同成就条件只能累加一次
        for ipyData in ipyDataList:
            succID = ipyData.GetSuccID()
            conds = ipyData.GetCondition()
            needCnt = ipyData.GetNeedCnt()
            tupleCond = tuple(conds) # 作为字典key用
            if tupleCond not in updConditionDict:
                updConditionDict[tupleCond] = [conds, 0, 0] # [条件, 更新值, 最大进度值]
            updInfo = updConditionDict[tupleCond]
            if updInfo[2] < needCnt:
                updInfo[2] = needCnt
            if not __CheckCanAddSuccess(curPlayer, ipyData, list(condition)):
                continue
            if succID not in updIDList:
                updIDList.append(succID)
                updsuccDataList.append(ipyData)
            if tupleCond not in addCondList:
                addCondList.append(tupleCond)
                updConditionDict[tupleCond][1] = updConditionDict[tupleCond][1] + newCount # 更新进度值
    # 没有找到更新目标不处理
    #GameWorld.DebugLog("    conditionCountDict=%s" % conditionCountDict)
    #GameWorld.DebugLog("    updConditionDict=%s" % updConditionDict)
    #GameWorld.DebugLog("    updIDList=%s" % updIDList)
    if not updIDList:
        return
    # 先更新成就记录值后再判断完成与否
    syncTypeCondList = []
    for conds, updCnt, maxCnt in updConditionDict.values():
        if not updCnt:
            continue
        updCnt = min(maxCnt, updCnt)
        if GetSuccValue(curPlayer, successType, conds) == updCnt:
            continue
        SetSuccValue(curPlayer, successType, conds, updCnt)
        if [successType, conds] not in syncTypeCondList:
            syncTypeCondList.append([successType, conds])
    #GameWorld.DebugLog("    syncTypeCondList=%s" % syncTypeCondList)
    syncTypeCondList and SyncSuccessInfo(curPlayer, syncTypeCondList, True)
    return
def UptateSuccessProgress(curPlayer, successType, newCnt, condition=[]):
    if successType in ShareDefine.OSASuccTypeList:
        if OpenServerActivity.GetOSACelebrationState(curPlayer) != 1:
            return
    ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
    if not ipyDataList:
        return
@@ -226,7 +275,9 @@
        return
    if successType not in ShareDefine.SuccessTypeList:
        return
    if successType in ShareDefine.OSASuccTypeList:
        if OpenServerActivity.GetOSACelebrationState(curPlayer) != 1:
            return
    ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
    if not ipyDataList:
        GameWorld.DebugLog("找不到成就数据successType=%s" % successType)
@@ -274,7 +325,7 @@
    needCnt = ipyData.GetNeedCnt()
    curValue = GetSuccValue(curPlayer, succType, conds)
    if curValue < needCnt:
        GameWorld.DebugLog("该成就未完成! succID=%s,curValue=%s < %s" % (succID, curValue, needCnt))
        GameWorld.DebugLog("该成就未完成! succID=%s,succType=%s,conds=%s,curValue=%s < %s" % (succID, succType, conds, curValue, needCnt))
        return
    
    SetSuccHasGot(curPlayer, succID)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -26,6 +26,7 @@
import PlayerActLunhuidian
import PlayerActYunshi
import PlayerActivity
import PlayerSuccess
import OpenServerActivity
import PlayerBillboard
import ShareDefine
@@ -445,9 +446,11 @@
        
    if treasureType in TreasureType_HeroCallList:
        PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroCall, treasureCount)
        heroCallCnt = GetHeroCallCnt(curPlayer)
        if OpenServerActivity.GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_HeroCall) == 1:
            PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_HeroCall, GetHeroCallCnt(curPlayer))
            PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_HeroCall, heroCallCnt)
        PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroCall, heroCallCnt)
    PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_Treasure, treasureType, treasureCount)
    
    # 给物品
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py
@@ -23,6 +23,8 @@
import PlayerGoldInvest
import PlayerControl
import IPY_GameWorld
import PlayerSuccess
import ShareDefine
import PlayerTask
import ChConfig
@@ -289,6 +291,7 @@
    SyncTreeInfo(curPlayer)
    
    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_TreeLV)
    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSATreeLV, updTreeLV)
    return True
def SyncTreeInfo(curPlayer):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_BossFirstKill.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -254,7 +254,6 @@
OperationActionName_ExpRate = "ActExpRate" # 多倍经验活动
OperationActionName_CostRebate = "ActCostRebate" # 消费返利活动
OperationActionName_SpringSale = "ActSpringSale" # 限时特惠活动
OperationActionName_BossReborn = "ActBossReborn" # BOSS复活活动
OperationActionName_FlashGiftbag = "ActFlashGiftbag" # 限时礼包活动
OperationActionName_DailyGiftbag = "ActDailyGiftbag" # 每日礼包活动
OperationActionName_FairyCeremony = "ActFairyCeremony" # 仙界盛典活动
@@ -293,7 +292,7 @@
                                ]
#所有的运营活动列表,含节日活动
OperationActionNameList = [OperationActionName_ExpRate, OperationActionName_CostRebate, 
                           OperationActionName_BossReborn,OperationActionName_SpringSale,
                           OperationActionName_SpringSale,
                           OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
                           OperationActionName_RealmPoint, OperationActionName_FlashSale,
                           OperationActionName_WishingWell, OperationActionName_TotalRecharge,
@@ -312,7 +311,7 @@
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell, 
                                   OperationActionName_NewFairyCeremony, OperationActionName_FlashSale,
                                   OperationActionName_BossReborn, OperationActionName_TotalRecharge,
                                   OperationActionName_TotalRecharge,
                                   OperationActionName_CostRebate, OperationActionName_FlashGiftbag,
                                   OperationActionName_SpringSale, OperationActionName_LuckyTreasure,
                                   OperationActionName_DailyGiftbag, OperationActionName_GrowupBuy,
@@ -696,7 +695,8 @@
CDBPlayerRefresh_GoldRushEnergy, # 淘金令 285
CDBPlayerRefresh_ArenaTicket, # 挑战券 286
CDBPlayerRefresh_TehuiPoint, # 特惠印绶 287
) = range(146, 288)
CDBPlayerRefresh_OSAPoint, # 开服庆典积分 288
) = range(146, 289)
TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
TYPE_Price_FamilyExp = 6 # 战盟经验
@@ -739,12 +739,14 @@
TYPE_Price_GoldRushEnergy = 52    # 淘金令体力
TYPE_Price_ArenaTicket = 53    # 演武场挑战券
TYPE_Price_TehuiPoint = 54    # 特惠印绶
TYPE_Price_OSAPoint = 55    # 开服庆典积分
TYPE_Price_PayCoinDay = 98    # 代币时效,每日过天重置
TYPE_Price_PayCoin = 99    # 代币
#key可用于遍历所有货币,value仅GM相关会用到
MoneyNameDict = {
                 1:"金币", 15:"公会贡献币", 41:"战锤", 42:"将星玉髓", 43:"将魂", 51:"招募积分", 52:"淘金令", 53:"挑战券", 54:"特惠印绶",
                 1:"金币", 15:"公会贡献币", 41:"战锤", 42:"将星玉髓", 43:"将魂", 51:"招募积分", 52:"淘金令", 53:"挑战券", 54:"特惠印绶",
                 55:"可用开服庆典积分",
                 98:"代币时效", 99:"代币"
                 }
#MoneyNameDict = {
@@ -769,6 +771,7 @@
                           TYPE_Price_GoldRushEnergy:CDBPlayerRefresh_GoldRushEnergy,
                           TYPE_Price_ArenaTicket:CDBPlayerRefresh_ArenaTicket,
                           TYPE_Price_TehuiPoint:CDBPlayerRefresh_TehuiPoint,
                           TYPE_Price_OSAPoint:CDBPlayerRefresh_OSAPoint,
                           TYPE_Price_PayCoinDay:CDBPlayerRefresh_PayCoinDay,
                           #TYPE_Price_Rune:CDBPlayerRefresh_Rune,
                           #TYPE_Price_RuneSplinters:CDBPlayerRefresh_RuneSplinters,
@@ -809,6 +812,7 @@
GameFuncID_Travel = 44          # 游历
GameFuncID_OSA_MainLevel = 45   # 开服关卡榜
GameFuncID_OSA_HeroCall = 46    # 开服招募榜
GameFuncID_OSA_Celebration = 47 # 开服庆典
# 以下为暂时无用的
GameFuncID_Pet = -1             # 宠物,灵宠 6
@@ -915,7 +919,7 @@
                                Def_UniversalGameRecType_28,
                                Def_UniversalGameRecType_BossInfo,  # boss信息29
                                Def_UniversalGameRecType_CrossBossInfo,  # 跨服boss信息 30
                                Def_UniversalGameRecType_BossFirstKill, # boss首杀 31
                                Def_UniversalGameRecType_31,
                                Def_UniversalGameRecType_CrossCollect,  # 跨服采集记录信息 32             
                                Def_UniversalGameRecType_CrossChampionshipGroup, # 跨服排位争霸赛分组信息 33
                                Def_UniversalGameRecType_CrossChampionshipGuess, # 跨服排位争霸赛竞猜记录信息 34
@@ -1393,7 +1397,28 @@
# 成就类型定义
SuccessTypeList = (
SuccType_MainLevel, # 通过主线关卡xxx 1
) = range(1, 1 + 1)
SuccType_OSAMainLevel, # 开服庆典 - 通过主线关卡xxx 2
SuccType_OSACutTree, # 消耗X个战锤  3
SuccType_OSARealmLV, # 官职达到X级 4
SuccType_OSATreeLV, # 仙树达到X级 5
SuccType_OSAEquipColor, # 穿戴x件x品质及以上装备 6
SuccType_OSAHorseLVUP, # 坐骑升级x次 7
SuccType_OSAHeroLVUP, # 武将升级X次 8
SuccType_OSAHeroStarUP, # 武将升星x次 9
SuccType_OSAHeroCall, # 武将招募x次 10
SuccType_OSAHeroBook, # 武将图鉴激活x个  11
SuccType_OSAArenaBattle, # 演武场战斗x次 12
SuccType_OSAFBZhanchui, # 白骨盈野击败xx 13
SuccType_OSAFBTianzi, # 挑战天子的考验x次 14
SuccType_OSAGoldRush, # 淘金采集x次 15
SuccType_OSAGoldRushWorkers, # 拥有x名监工 16
SuccType_OSAKillNPC, # 击败X只怪物 17
SuccType_OSAEquipDecompose, # 分解装备x次 18
SuccType_OSAGetMoney, # 累计获得xx货币 19
) = range(1, 1 + 19)
# 开服庆典成就类型
OSASuccTypeList = range(SuccType_OSAMainLevel, SuccType_OSAGetMoney + 1)
# 不向下适配检查的成就类型(指相对较高成就条件不会增加较低成就条件的进度)
UnDownCheckSuccessTypeList = []