From 550cdd31f78c640d7baf9766b7492e0fb2c55970 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 20 二月 2025 19:38:54 +0800
Subject: [PATCH] 10403 【越南】【BT】【GM】【英文】【GM版本】境界相关修改(增加境界任务类型7:完成xx主线任务)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py              |   21 ++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py |   52 ++++++++++++++++++--------
 PySysDB/PySysDBPY.h                                                                               |    7 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py   |   11 +++++
 4 files changed, 74 insertions(+), 17 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 8f5ce85..7325215 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1263,6 +1263,13 @@
 	list		MailItemPrize;		//活动更新时发送邮件奖励物品
 };
 
+//任务列表
+
+struct tagTaskList
+{
+	DWORD		_TaskID;	//任务ID
+};
+
 //日常任务表
 
 struct tagDailyQuest
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py
index da87f73..a5b812d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py
@@ -35,6 +35,7 @@
 import ChPyNetSendPack
 import NetPackCommon
 import EventShell
+import IpyGameDataPY
 #---------------------------------------------------------------------
 #所有任务的索引
 FindQuestFunc = None
@@ -366,23 +367,39 @@
         DataRecordPack.DR_DeleteMission(curPlayer, curMissionID)
     return
 
+def GetMainTaskIDList():
+    ## 获取主线任务ID顺序列表
+    MainTaskIDList = IpyGameDataPY.GetConfigEx("MainTaskIDList")
+    if not MainTaskIDList:
+        MainTaskIDList = []
+        ipyDataMgr = IpyGameDataPY.IPY_Data()
+        for index in range(ipyDataMgr.GetTaskListCount()):
+            ipyData = ipyDataMgr.GetTaskListByIndex(index)
+            MainTaskIDList.append(ipyData.GetTaskID())
+        IpyGameDataPY.SetConfigEx("MainTaskIDList", MainTaskIDList)
+        GameWorld.DebugLog("加载主线任务ID顺序列表: %s" % MainTaskIDList)
+    return MainTaskIDList
+
 def GetHadFinishMainMission(curPlayer, missionID):
     ''' 检查是否已经完成该主线任务 '''
     
     curMission = curPlayer.FindMission(missionID)
     if curMission != None:
-        #GameWorld.DebugLog("当前任务未完成...missionID=%s" % missionID)
+        GameWorld.DebugLog("当前任务中未完成...missionID=%s" % missionID)
         return curMission.GetState() == ChConfig.Def_Mission_State_Over
     
-    curMissionData = FindQuestFunc(missionID)
-    if not curMissionData:
+    mainTaskIDList = GetMainTaskIDList()
+    if not mainTaskIDList:
+        GameWorld.DebugLog("没有主线任务列表! missionID=%s" % missionID)
         return False
     
-    # 非主线不判断
-    if curMissionData.Type not in Def_MainTask_Type_List:
-        #GameWorld.DebugLog("非主线不判断...missionID=%s" % missionID)
+    if missionID not in mainTaskIDList:
+        GameWorld.DebugLog("非主线任务ID! missionID=%s" % missionID)
         return False
+    taskIDIndex = mainTaskIDList.index(missionID)
     
+    nowTaskID = 0
+    nowTaskIDIndex = -1
     # 不存在该任务,则判断同类型的任务ID
     for i in range(curPlayer.GetMissionCount()):
         mission = curPlayer.GetMissionByIndex(i)
@@ -391,17 +408,20 @@
         if not missionData:
             continue
         
-        taskType = missionData.Type
-        if taskType not in Def_MainTask_Type_List:
+        if taskID not in mainTaskIDList:
             continue
-        
-        # 由于主线任务ID是按任务顺序递增的,故只要存在大于该任务ID的主线任务则代表该主线任务已完成
-        if taskID > missionID:
-            #GameWorld.DebugLog("存在主线任务 %s > missionID=%s" % (taskID, missionID))
-            return True
-        
-    #GameWorld.DebugLog("该主线任务未完成...missionID=%s" % missionID)
-    return False
+        nowTaskID = taskID
+        nowTaskIDIndex = mainTaskIDList.index(taskID)
+        break
+    
+    if not nowTaskID:
+        GameWorld.DebugLog("当前身上没有主线任务! missionID=%s" % missionID)
+        return False
+    
+    isFinish = nowTaskIDIndex > taskIDIndex
+    GameWorld.DebugLog("判断主线任务是否已完成! missionID=%s(%s),isFinish=%s,nowTaskID=%s(%s)" 
+                       % (missionID, taskIDIndex, isFinish, nowTaskID, nowTaskIDIndex), curPlayer.GetPlayerID())
+    return isFinish
 
 ##任务是否被删除
 # @param None
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index a9c5f0c..fca1cbf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1025,6 +1025,10 @@
                         ("list", "MailItemPrize", 0),
                         ),
 
+                "TaskList":(
+                        ("DWORD", "TaskID", 1),
+                        ),
+
                 "DailyQuest":(
                         ("DWORD", "ID", 1),
                         ("BYTE", "RelatedType", 0),
@@ -4006,6 +4010,15 @@
     def GetMailKey(self): return self.attrTuple[9] # 活动更新时发送邮件key char
     def GetMailItemPrize(self): return self.attrTuple[10] # 活动更新时发送邮件奖励物品 list
 
+# 任务列表
+class IPY_TaskList():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetTaskID(self): return self.attrTuple[0] # 任务ID DWORD
+
 # 日常任务表
 class IPY_DailyQuest():
     
@@ -6571,6 +6584,7 @@
         self.__LoadFileData("VipPrivilege", onlyCheck)
         self.__LoadFileData("Store", onlyCheck)
         self.__LoadFileData("ActSpringSale", onlyCheck)
+        self.__LoadFileData("TaskList", onlyCheck)
         self.__LoadFileData("DailyQuest", onlyCheck)
         self.__LoadFileData("DailyLivenessReward", onlyCheck)
         self.__LoadFileData("ActivityPlaceReward", onlyCheck)
@@ -7571,6 +7585,13 @@
         self.CheckLoadData("ActSpringSale")
         return self.ipyActSpringSaleCache[index]
 
+    def GetTaskListCount(self):
+        self.CheckLoadData("TaskList")
+        return self.ipyTaskListLen
+    def GetTaskListByIndex(self, index):
+        self.CheckLoadData("TaskList")
+        return self.ipyTaskListCache[index]
+
     def GetDailyQuestCount(self):
         self.CheckLoadData("DailyQuest")
         return self.ipyDailyQuestLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
index 409b267..1e9ab83 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
@@ -18,6 +18,7 @@
 import ItemCommon
 import ItemControler
 import FBCommon
+import QuestCommon
 import GameFuncComm
 import PlayerControl
 import ChPyNetSendPack
@@ -48,7 +49,8 @@
 RealmTaskType_LVUPItem, # 进阶丹 4
 RealmTaskType_Equip, # 基础装备明细 5
 RealmTaskType_Dujie, # 渡劫boss 6
-) = range(1, 1 + 6)
+RealmTaskType_FinishMainTask, # 完成xx主线任务 7
+) = range(1, 1 + 7)
 
 # 需要记录任务值的任务类型列表
 NeedTaskValueTypeList = [RealmTaskType_KillNPC, RealmTaskType_Dujie]
@@ -396,6 +398,13 @@
             GameWorld.DebugLog('境界任务领奖,渡劫未过关! realmLV=%s,taskID=%s,taskType=%s' % (realmLV, taskID, taskType), playerID)
             return
         
+    # 完成xx主线任务
+    elif taskType == RealmTaskType_FinishMainTask:
+        missionID = needValueA
+        if not QuestCommon.GetHadFinishMainMission(curPlayer, missionID):
+            GameWorld.DebugLog('境界任务领奖,主线任务未完成! realmLV=%s,taskID=%s,taskType=%s,missionID=%s' % (realmLV, taskID, taskType, missionID), playerID)
+            return
+        
     # 根据记录任务进度值    
     elif taskType in NeedTaskValueTypeList:
         curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID)

--
Gitblit v1.8.0