10403 【越南】【BT】【GM】【英文】【GM版本】境界相关修改(增加境界任务类型7:完成xx主线任务)
4个文件已修改
91 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -1263,6 +1263,13 @@
    list        MailItemPrize;        //活动更新时发送邮件奖励物品
};
//任务列表
struct tagTaskList
{
    DWORD        _TaskID;    //任务ID
};
//日常任务表
struct tagDailyQuest
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
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
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)