hxp
2025-11-18 6e0d1eac6e57f831c8b8118d189067d391923693
349 【配套功能】功能预告-服务端
4个文件已修改
65 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -556,6 +556,7 @@
    DWORD        LimitMissionID;    //需要完成的任务ID
    WORD        LimitOpenDay;    //开服第几天开启
    char        MailKey;    //邮件
    list        AwardList;    //奖励列表[[物品ID,个数], ...]
};
@@ -1901,14 +1902,6 @@
    DWORD        Weight;    //权重
    DWORD        Mark;    //排序用标识
    BYTE        Rare;    //珍稀值
};
//功能预告表
struct tagFunctionForecast
{
    DWORD        _FuncID;    //功能ID
    dict        Award;    //属性类型
};
//表情包表
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -499,6 +499,7 @@
                        ("DWORD", "LimitMissionID", 0),
                        ("WORD", "LimitOpenDay", 0),
                        ("char", "MailKey", 0),
                        ("list", "AwardList", 0),
                        ),
                "ItemCompound":(
@@ -1521,11 +1522,6 @@
                        ("DWORD", "Weight", 0),
                        ("DWORD", "Mark", 0),
                        ("BYTE", "Rare", 0),
                        ),
                "FunctionForecast":(
                        ("DWORD", "FuncID", 1),
                        ("dict", "Award", 0),
                        ),
                "EmojiPack":(
@@ -2883,7 +2879,8 @@
    def GetLimiRealmLV(self): return self.attrTuple[2] # 需要境界等级 WORD
    def GetLimitMissionID(self): return self.attrTuple[3] # 需要完成的任务ID DWORD
    def GetLimitOpenDay(self): return self.attrTuple[4] # 开服第几天开启 WORD
    def GetMailKey(self): return self.attrTuple[5] # 邮件 char
    def GetMailKey(self): return self.attrTuple[5] # 邮件 char
    def GetAwardList(self): return self.attrTuple[6] # 奖励列表[[物品ID,个数], ...] list
# 合成表
class IPY_ItemCompound():
@@ -4432,16 +4429,6 @@
    def GetMark(self): return self.attrTuple[7] # 排序用标识 DWORD
    def GetRare(self): return self.attrTuple[8] # 珍稀值 BYTE
# 功能预告表
class IPY_FunctionForecast():
    def __init__(self):
        self.attrTuple = None
        return
    def GetFuncID(self): return self.attrTuple[0] # 功能ID DWORD
    def GetAward(self): return self.attrTuple[1] # 属性类型 dict
# 表情包表
class IPY_EmojiPack():
    
@@ -5759,7 +5746,6 @@
        self.__LoadFileData("ActFlashSale", onlyCheck)
        self.__LoadFileData("ActWishingWell", onlyCheck)
        self.__LoadFileData("WishingWell", onlyCheck)
        self.__LoadFileData("FunctionForecast", onlyCheck)
        self.__LoadFileData("EmojiPack", onlyCheck)
        self.__LoadFileData("ActRechargePrize", onlyCheck)
        self.__LoadFileData("RechargePrizeTemplate", onlyCheck)
@@ -7062,13 +7048,6 @@
    def GetWishingWellByIndex(self, index):
        self.CheckLoadData("WishingWell")
        return self.ipyWishingWellCache[index]
    def GetFunctionForecastCount(self):
        self.CheckLoadData("FunctionForecast")
        return self.ipyFunctionForecastLen
    def GetFunctionForecastByIndex(self, index):
        self.CheckLoadData("FunctionForecast")
        return self.ipyFunctionForecastCache[index]
    def GetEmojiPackCount(self):
        self.CheckLoadData("EmojiPack")
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -3232,6 +3232,9 @@
    # 阵容推荐奖励
    elif rewardType == ChConfig.Def_RewardType_LineupRecommend:
        PlayerHero.GetLineupRecommendAward(curPlayer, dataEx, dataExStr)
    # 功能开启奖励
    elif rewardType == ChConfig.Def_RewardType_OpenFunc:
        GameFuncComm.GetFuncOpenAward(curPlayer, dataEx)
        
        
    # 每日免费直购礼包
@@ -3264,9 +3267,6 @@
    # 领取许愿池奖励
    elif rewardType == ChConfig.Def_RewardType_WishingWell:
        PlayerWishingWell.DoGetWishingAward(curPlayer)
    # 功能开启奖励
    elif rewardType == ChConfig.Def_RewardType_OpenFunc:
        GameFuncComm.GetFuncOpenAward(curPlayer, dataEx)
    # 领取周狂欢活动奖励
    elif rewardType == ChConfig.Def_RewardType_WeekPartyAct:
        PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -128,29 +128,22 @@
def GetFuncOpenAward(curPlayer, funcID):
    ## 领取功能开启奖励
    ipyData = IpyGameDataPY.GetIpyGameData('FunctionForecast', funcID)
    ipyData = IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
    if not ipyData:
        return
    getState = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncAwardState, funcID)
    if getState:
        GameWorld.DebugLog("功能开启奖励已领取! funcID=%s" % funcID)
        return
    awardDict = ipyData.GetAward()
    job = curPlayer.GetJob()
    itemList = awardDict.get(str(job))
    openState = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, funcID)
    if not openState:
        GameWorld.DebugLog("功能未开启无法领取! funcID=%s" % funcID)
        return
    itemList = ipyData.GetAwardList()
    if not itemList:
        return
    # 检查背包
    needSpace = len(itemList)
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
    if needSpace > packSpace:
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
        return
    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncAwardState, funcID, 1)
    # 给物品
    for itemID, itemCount in itemList:
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
    ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "FuncOpenAward")
    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["FuncOpenAward", False, {}])
    Sync_FuncOpenState(curPlayer, [funcID])
    return