From 6e0d1eac6e57f831c8b8118d189067d391923693 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 18 十一月 2025 19:16:49 +0800
Subject: [PATCH] 349 【配套功能】功能预告-服务端

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py       |   27 +------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py     |    6 +-
 PySysDB/PySysDBPY.h                                                                        |    9 ----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py |   23 ++++-------
 4 files changed, 15 insertions(+), 50 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 66c3e52..e8b46fe 100644
--- a/PySysDB/PySysDBPY.h
+++ b/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;	//属性类型
 };
 
 //表情包表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index cac39a9..da5b323 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/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")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index f5bf705..b58facc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
index 482b25c..cb52de0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
+++ b/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
     

--
Gitblit v1.8.0