hxp
2025-05-28 09fef77b16601ee5b0f53f34ccb23804b8448c8c
102 【主界面】官职晋升-服务端
12个文件已修改
3个文件已删除
1087 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetRealmExp.py 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmLVUP.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py 581 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddRealmExpRate.py 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py 377 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -175,11 +175,6 @@
    DWORD        LVMax;    //等级上限
    list        AddAttrType;    //境界加成属性类型    
    list        AddAttrNum;    //境界加成属性值
    DWORD        BuffID;    //给全服在线玩家增加buff
    DWORD        ExpRate;    //修为池经验速率
    DWORD        ExpLimit;    //修为池经验上限
    dict        LearnSkillIDInfo;    //学习技能ID信息 {"职业":[技能ID, ...], ...}
    BYTE        AddFreePoint;    //增加自由属性点
};
//境界进阶任务表
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -744,19 +744,11 @@
Writer = alee
Releaser = alee
RegType = 0
RegisterPackCount = 3
RegisterPackCount = 1
PacketCMD_1 = 0xA5
PacketSubCMD_1 = 0x24
PacketCallFunc_1 = OpenRealmFB
PacketCMD_2 = 0xA5
PacketSubCMD_2 = 0x21
PacketCallFunc_2 = OnTakeOutRealmExp
PacketCMD_3 = 0xA5
PacketSubCMD_3 = 0x23
PacketCallFunc_3 = DoRealmLVUp
PacketSubCMD_1 = 0x23
PacketCallFunc_1 = DoRealmLVUp
;炼体
[PlayerLianTi]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4409,16 +4409,8 @@
Def_PDict_FeastRedPacketCanGrabCnt = "FeastRedPacketCanGrabCnt"  # 节日红包可抢次数
#境界
Def_PDict_RealmVersionState = "RealmVersionState" #境界版本调整记录状态值
Def_PDict_RealmTaskAwardState = "RealmTaskAwardState" #境界渡劫条件领奖状态,按二进制位存储是否已领取
Def_PDict_RealmTaskValue = "RealmTaskValue_%s" #境界渡劫任务需要记录值,参数(任务ID)
Def_PDict_RealmXXZLAward = "RealmXXZLAward" #境界修仙之路领奖状态;按二进制位存储每个任务ID是否已领取
Def_PDict_RealmFBAttrAdd = "RealmFBAttrAdd_%s" #渡劫副本属性加成 参数属性ID
Def_PDict_RealmExp = "RealmExp" #境界修为池总经验
Def_PDict_RealmExpPoint = "RealmExpPoint" #境界修为池总经验点
Def_PDict_RealmExpBeginTime = "RealmExpBeginTime" #境界修为池经验开始计时时间
Def_PDict_RealmExpBuffRemainTime = "RealmExpBuffRemainTime" #境界修为池经验buff剩余时间
Def_PDict_RealmExpBuffAddRate = "RealmExpBuffAddRate" #境界修为池经验增加百分比(万分率)
#法宝
Def_PDict_MagicWeaponIsWear = "MagicWeaponIsWear_%s" #法宝佩戴状态 参数法宝ID
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -5234,6 +5234,6 @@
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    countType = clientData.Type 
    RunQuestEvent(curPlayer, "on_client_by_id", clientData.CountID, Def_RunQuestType_Normal)
    if countType == 1:
        PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1)
    #if countType == 1:
    #    PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
@@ -7113,7 +7113,7 @@
# @return None <Realmxxzlaward taskid="修仙之路任务ID"/>
def ConditionType_Realmxxzlaward(curPlayer, curMission, curActionNode):
    taskID = GameWorld.ToIntDef(curActionNode.GetAttribute("taskid"), 0)
    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmXXZLAward)
    awardState = curPlayer.NomalDictGetProperty("RealmXXZLAward")
    if awardState&pow(2, taskID):
        return True
    return False
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetRealmExp.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmLVUP.py
@@ -30,7 +30,7 @@
def OnExec(curPlayer, cmdList):
    if not cmdList:
        GameWorld.DebugAnswer(curPlayer, "------------ %s" % GameWorld.GetCurrentDataTimeStr())
        GameWorld.DebugAnswer(curPlayer, "重置境界阶级: RealmLVUP 0 [重置改版标记]")
        GameWorld.DebugAnswer(curPlayer, "重置境界阶级: RealmLVUP 0")
        GameWorld.DebugAnswer(curPlayer, "执行境界升阶: RealmLVUP 1 [次数]")
        GameWorld.DebugAnswer(curPlayer, "设置境界任务: RealmLVUP t 任务ID 进度值")
        GameWorld.DebugAnswer(curPlayer, "注:可设置进度的任务类型:%s" % PlayerPrestigeSys.NeedTaskValueTypeList)
@@ -42,7 +42,6 @@
    
    value = cmdList[0]
    if value == 0:
        reVersionState = cmdList[1] if len(cmdList) > 1 else 0
        curPlayer.SetOfficialRank(1)
        curPlayer.SetFreePoint(0)
        GameWorld.DebugAnswer(curPlayer, "重置境界!")
@@ -59,9 +58,6 @@
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), 0)
            PlayerGubao.Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, force=True)
        GameWorld.DebugAnswer(curPlayer, "重置境界OK")
        if reVersionState:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmVersionState, 0)
            GameWorld.DebugAnswer(curPlayer, "重置改版标记,重登会执行重置境界逻辑!")
        return
    if value == 1:
        doCount = cmdList[1] if len(cmdList) > 1 else 1
@@ -80,7 +76,7 @@
        taskID = cmdList[1] if len(cmdList) > 1 else 0
        taskValue = cmdList[2] if len(cmdList) > 2 else 0
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskValue % taskID, taskValue)
        PlayerPrestigeSys.SyncRealmFBState(curPlayer, taskIDList=[taskID])
        PlayerPrestigeSys.SyncRealmInfo(curPlayer, taskIDList=[taskID])
        GameWorld.DebugAnswer(curPlayer, "设置任务ID:%s,进度值:%s" % (taskID, taskValue))
        
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -166,11 +166,6 @@
                        ("DWORD", "LVMax", 0),
                        ("list", "AddAttrType", 0),
                        ("list", "AddAttrNum", 0),
                        ("DWORD", "BuffID", 0),
                        ("DWORD", "ExpRate", 0),
                        ("DWORD", "ExpLimit", 0),
                        ("dict", "LearnSkillIDInfo", 0),
                        ("BYTE", "AddFreePoint", 0),
                        ),
                "RealmLVUPTask":(
@@ -2871,11 +2866,6 @@
    def GetLVMax(self): return self.attrTuple[2] # 等级上限 DWORD
    def GetAddAttrType(self): return self.attrTuple[3] # 境界加成属性类型 list
    def GetAddAttrNum(self): return self.attrTuple[4] # 境界加成属性值 list
    def GetBuffID(self): return self.attrTuple[5] # 给全服在线玩家增加buff DWORD
    def GetExpRate(self): return self.attrTuple[6] # 修为池经验速率 DWORD
    def GetExpLimit(self): return self.attrTuple[7] # 修为池经验上限 DWORD
    def GetLearnSkillIDInfo(self): return self.attrTuple[8] # 学习技能ID信息 {"职业":[技能ID, ...], ...} dict
    def GetAddFreePoint(self): return self.attrTuple[9] # 增加自由属性点 BYTE
# 境界进阶任务表
class IPY_RealmLVUPTask():
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddRealmExpRate.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -5017,7 +5017,7 @@
                PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillNPC)
                PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_KillNPC)
            PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_KillSpecificNPC, 1, [npcID])
        PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1)
        #PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1)
        
        if ChConfig.IsGameBoss(curNPC):
            OnPlayerKillBoss(curPlayer, npcID, mapID, False)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -5719,9 +5719,6 @@
    #自定义奖励
    elif rewardType == ChConfig.Def_RewardType_CustomAward:
        PlayerCustomAward.OnGetCustomAward(curPlayer, dataEx)
    #境界修仙之路奖励
    elif rewardType == ChConfig.Def_RewardType_RealmXXZL:
        PlayerPrestigeSys.GetXXZLAward(curPlayer, dataEx)
    #境界渡劫任务条件奖励
    elif rewardType == ChConfig.Def_RewardType_RealmLVUpTask:
        PlayerPrestigeSys.GetRealmLVUpTaskAward(curPlayer, dataEx)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py
@@ -105,7 +105,7 @@
    # 1.3 境界 - 被动技能
    for index in range(ipyDataMgr.GetRealmCount()):
        ipyData = ipyDataMgr.GetRealmByIndex(index)
        LearnSkillIDInfo = ipyData.GetLearnSkillIDInfo()
        LearnSkillIDInfo = {}
        if str(curJob) not in LearnSkillIDInfo:
            continue
        curJobLearnSkillIDList = LearnSkillIDInfo[str(curJob)]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3308,7 +3308,8 @@
    PlayerActTurntable.OnPlayerUseGold(curPlayer, type_Price, price)
    #轮回殿
    PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_PayMoney, type_Price, price)
    if type_Price == ShareDefine.TYPE_Price_Xiantao:
        PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_UseXiantao, price)
    unitPrice = price if quantity == 1 else int(math.ceil(price * 1.0 / quantity)) # 单价
    #reason_name = "Unknown" if not costType else costType
    reason_name = costType
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
@@ -15,45 +15,32 @@
#"""Version = 2017-10-10 14:30"""
#-------------------------------------------------------------------------------
import ItemCommon
import ItemControler
import FBCommon
import QuestCommon
import GameFuncComm
import PlayerControl
import ChPyNetSendPack
import NetPackCommon
import IPY_GameWorld
import IpyGameDataPY
import ShareDefine
import GameWorld
import ChConfig
import PlayerSuccess
import ChEquip
import PlayerBillboard
import PlayerTongTianLing
import PassiveBuffEffMng
import PlayerGubao
import EventShell
import DataRecordPack
import SkillCommon
import time
#------------------------------------------------------------------------------
# 渡劫任务类型
RealmTaskTypeList = (
RealmTaskType_LV, # 等级 1
RealmTaskType_PassMap, # 过关关卡 2
RealmTaskType_KillNPC, # 击杀NPC 3
RealmTaskType_LVUPItem, # 进阶丹 4
RealmTaskType_Equip, # 基础装备明细 5
RealmTaskType_Dujie, # 渡劫boss 6
RealmTaskType_FinishMainTask, # 完成xx主线任务 7
) = range(1, 1 + 7)
RealmTaskType_UseXiantao, # 消耗战锤 3
) = range(1, 1 + 3)
# 需要记录任务值的任务类型列表
NeedTaskValueTypeList = [RealmTaskType_KillNPC, RealmTaskType_Dujie]
NeedTaskValueTypeList = [RealmTaskType_UseXiantao]
def DoOfficialOpen(curPlayer):
    #功能开启
@@ -64,169 +51,14 @@
def OnLogin(curPlayer):
    DoRealmVersionStateLogic(curPlayer)
    SyncRealmFBState(curPlayer, isAll=True)
    UpdateRealmExp(curPlayer, False)
    NotifyRealmExpInfo(curPlayer)
    SyncRealmInfo(curPlayer, isAll=True)
    if not curPlayer.GetOfficialRank():
        curPlayer.SetOfficialRank(1)
    return
def DoRealmVersionStateLogic(curPlayer):
    ## 执行版本变更逻辑,仅触发一次,之后可删除
    state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmVersionState)
    if state:
        GameWorld.DebugLog("境界版本变更逻辑已重置过!", curPlayer.GetPlayerID())
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmVersionState, 1)
    realmLV = curPlayer.GetOfficialRank()
    if realmLV <= 1:
        # 新号不处理
        return
    playerID = curPlayer.GetPlayerID()
    GameWorld.Log("======================== 执行境界版本变更重置逻辑 =======================", playerID)
    # 重置境界
    curPlayer.SetOfficialRank(1)
    # 返还境界丹
    returnItemID = IpyGameDataPY.GetFuncCfg("RealmLvUP", 1)
    returnCount = 0
    lvToRealmLV = -1 # 重置后当前玩家等级对应可提升到的境界等级
    playerLV = curPlayer.GetLV()
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in range(ipyDataMgr.GetRealmCount()):
        realmIpyData = ipyDataMgr.GetRealmByIndex(index)
        lvToRealmLV = realmIpyData.GetLv()
        if playerLV < realmIpyData.GetLVMax():
            break
    # 返还到可升级到的境界等级前一级
    for index in range(ipyDataMgr.GetRealmLVUPTaskCount()):
        taskIpyData = ipyDataMgr.GetRealmLVUPTaskByIndex(index)
        if taskIpyData.GetLv() >= lvToRealmLV:
            break
        taskType = taskIpyData.GetTaskType()
        if taskType != RealmTaskType_LVUPItem:
            continue
        needValueList = taskIpyData.GetNeedValueList()
        needValueA = GetRealmTaskNeedValue(needValueList, 0)
        returnCount += needValueA
    GameWorld.Log("境界等级: realmLV=%s,playerLV=%s,lvToRealmLV=%s,returnItemID=%s,returnCount=%s"
                  % (realmLV, playerLV, lvToRealmLV, returnItemID, returnCount), playerID)
    # 重置灵根点,扣除赠送灵根点
    linggenPointDel = 0
    linggenPointLVAdd = 0
    linggenCntList = IpyGameDataPY.GetFuncEvalCfg("RealmVersion", 2)
    for rLV, lgPoint in enumerate(linggenCntList):
        if rLV > realmLV:
            break
        linggenPointDel += lgPoint
        linggenPointLVAdd += lgPoint
    # 古宝效果赠送灵根点
    linggenPointGubaoAdd = 0
    resetGubaoEffValueKeyList = []
    effType = PlayerGubao.GubaoEffType_RealmLVAddLinggen
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in range(ipyDataMgr.GetGubaoCount()):
        ipyData = ipyDataMgr.GetGubaoByIndex(index)
        gubaoID = ipyData.GetGubaoID()
        addFreePointAlready = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
        if not addFreePointAlready:
            continue
        resetGubaoEffValueKeyList.append(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
        linggenPointDel += addFreePointAlready
        linggenPointGubaoAdd += addFreePointAlready
    freePointBef = curPlayer.GetFreePoint()
    linggenPointTotalBef = freePointBef
    addPointDict = {}
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in range(ipyDataMgr.GetRolePointCount()):
        linggenID = ipyDataMgr.GetRolePointByIndex(index).GetAttrID()
        linggenPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % linggenID)
        addPointDict[linggenID] = linggenPoint
        linggenPointTotalBef += linggenPoint
    GameWorld.Log("重置前灵根点: freePointBef=%s,linggenPointTotalBef=%s,addPointDict=%s" % (freePointBef, linggenPointTotalBef, addPointDict), playerID)
    if linggenPointDel:
        import Item_ResetAttrPoint
        Item_ResetAttrPoint.DoResetAttrPoint(curPlayer, 0, 0)
        updFreePoint = max(0, curPlayer.GetFreePoint() - linggenPointDel)
        curPlayer.SetFreePoint(updFreePoint)
        for resetKey in resetGubaoEffValueKeyList:
            PlayerControl.NomalDictSetProperty(curPlayer, resetKey, 0)
        GameWorld.Log("重置境界灵根点: linggenPointDel=%s,updFreePoint=%s,linggenPointLVAdd=%s,linggenPointGubaoAdd=%s" %
                      (linggenPointDel, updFreePoint, linggenPointLVAdd, linggenPointGubaoAdd), playerID)
    # 删除境界技能
    delSkillIDList = []
    skillIDList = IpyGameDataPY.GetFuncEvalCfg("RealmVersion", 3)
    skillManager = curPlayer.GetSkillManager()
    playerControl = PlayerControl.PlayerControl(curPlayer)
    for skillID in skillIDList:
        if not skillManager.FindSkillBySkillID(skillID):
            continue
        skillManager.DeleteSkillBySkillID(skillID)
        delSkillIDList.append(skillID)
        playerControl.RefreshSkillFightPowerByDel(skillID)
    playerControl.RefreshPlayerAttrState()
    PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEffSet(curPlayer)
    GameWorld.Log("重置境界删除技能ID列表: %s" % delSkillIDList, playerID)
    # 境界难度地图重置
    PlayerControl.SetRealmDifficulty(curPlayer, 0)
    GameWorld.Log("重置境界难度等级选择!", playerID)
    itemListEx = IpyGameDataPY.GetFuncEvalCfg("RealmVersion", 4)
    mailItemList = [[returnItemID, returnCount, 0]] + itemListEx
    paramList = [linggenPointDel, returnItemID, returnItemID, returnCount]
    PlayerControl.SendMailByKey("RealmVersion", [playerID], mailItemList, paramList)
    GameWorld.Log("重置境界邮件: mailItemList=%s" % mailItemList, playerID)
    # 记录流向
    freePointAft = curPlayer.GetFreePoint()
    linggenPointTotalAft = freePointAft
    addPointDictAft = {}
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in range(ipyDataMgr.GetRolePointCount()):
        linggenID = ipyDataMgr.GetRolePointByIndex(index).GetAttrID()
        linggenPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % linggenID)
        addPointDictAft[linggenID] = linggenPoint
        linggenPointTotalAft += linggenPoint
    GameWorld.Log("重置后灵根点: freePointAft=%s,linggenPointTotalAft=%s,addPointDictAft=%s" % (freePointAft, linggenPointTotalAft, addPointDictAft), playerID)
    dataDict = {"realmLV":realmLV, "returnItemID":returnItemID, "returnCount":returnCount,
                "linggenPointDel":linggenPointDel, "linggenPointLVAdd":linggenPointLVAdd, "linggenPointGubaoAdd":linggenPointGubaoAdd,
                "linggenPointTotalBef":linggenPointTotalBef, "linggenPointTotalAft":linggenPointTotalAft,
                "freePointBef":freePointBef, "freePointAft":freePointAft, "addPointDict":addPointDict,
                "delSkillIDList":delSkillIDList, "mailItemList":mailItemList}
    DataRecordPack.SendEventPack("RealmVersionReset", dataDict, curPlayer)
    GameWorld.Log("======================= 境界版本变更重置完毕 =======================", playerID)
    return
def GetRealmIpyData(realmLV): return IpyGameDataPY.GetIpyGameData("Realm", realmLV)
#// A5 24 开启渡劫 #tagCMOpenRealmFB
#
#struct    tagCMOpenRealmFB
#{
#    tagHead        Head;
#};
def OpenRealmFB(index, clientData, tick):
    return
def GetXXZLAward(curPlayer, taskID):
    ## 领取修仙之路奖励,废弃
    return
def SyncRealmFBState(curPlayer, taskIDList=None, isAll=False):
    #通知客户端渡劫副本是否开启
    #if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official):
    #    return
def SyncRealmInfo(curPlayer, taskIDList=None, isAll=False):
    sendPack = ChPyNetSendPack.tagMCSyncRealmInfo()
    sendPack.TaskAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState)
    sendPack.TaskValueList = []
@@ -248,11 +80,6 @@
    NetPackCommon.SendFakePack(curPlayer, sendPack)
    return
## 计算爵位属性
#  @param curPlayer 玩家
#  @param allAttrList 属性列表
#  @return None
def CalcOfficialRankAttr(curPlayer):
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official):
        return
@@ -272,11 +99,6 @@
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Prestige, allAttrList)
    return
## 重刷所有属性
#  @param curPlayer
#  @param isForceRefresh:强制刷新排行榜
#  @return 指定数据
def RefreshOfficialAttr(curPlayer):
    CalcOfficialRankAttr(curPlayer)
    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
@@ -307,7 +129,7 @@
        GameWorld.DebugLog("更新境界任务值: realmLV=%s,taskType=%s,taskID=%s,updValue=%s,curValue=%s,addValue=%s" 
                           % (realmLV, taskType, taskID, updValue, curValue, addValue), curPlayer.GetPlayerID())
    if syncTaskIDList:
        SyncRealmFBState(curPlayer, taskIDList=syncTaskIDList)
        SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList)
    return
def GetRealmTaskNeedValue(needValueList, index): return needValueList[index] if len(needValueList) > index else 0
@@ -356,72 +178,6 @@
                               % (realmLV, taskID, taskType, mapID, lineID), playerID)
            return
        
    # 进阶丹
    elif taskType == RealmTaskType_LVUPItem:
        itemID = IpyGameDataPY.GetFuncCfg("RealmLvUP", 1)
        needItemCount = needValueA
        itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
        lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList({itemID:needItemCount}, itemPack)
        if lackItemDict:
            GameWorld.DebugLog('境界任务领奖,物品不足! realmLV=%s,taskID=%s,taskType=%s,lackItemDict=%s'
                               % (realmLV, taskID, taskType, lackItemDict), playerID)
            return
        ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Realm")
    # 装备
    elif taskType == RealmTaskType_Equip:
        if len(needValueList) < 4:
            GameWorld.DebugLog('境界任务领奖,装备条件配置错误,长度必须为4! realmLV=%s,taskID=%s,taskType=%s,needValueList=%s'
                               % (realmLV, taskID, taskType, needValueList), playerID)
            return
        classLV, star, isSuite, color = needValueList[:4]
        needCount = needValueList[4] if len(needValueList) > 4 else len(ChConfig.EquipPlace_Base)
        GameWorld.DebugLog('境界任务领奖,装备条件! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,star=%s,isSuite=%s,color=%s,needCount=%s'
                           % (realmLV, taskID, taskType, classLV, star, isSuite, color, needCount), playerID)
        curCount = 0
        equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
        for place in ChConfig.EquipPlace_Base:
            ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
            if not ipyData:
                continue
            gridIndex = ipyData.GetGridIndex()
            curEquip = equipPack.GetAt(gridIndex)
            if not ItemCommon.CheckItemCanUse(curEquip):
                continue
            curPartStar = ChEquip.GetEquipPartStar(curPlayer, gridIndex)
            if curPartStar < star:
                GameWorld.DebugLog('    装备位星级不足! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,place=%s,curPartStar=%s < %s'
                                   % (realmLV, taskID, taskType, classLV, place, curPartStar, star), playerID)
                continue
            if isSuite and not curEquip.GetSuiteID():
                GameWorld.DebugLog('    装备位非套装! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,place=%s'
                                   % (realmLV, taskID, taskType, classLV, place), playerID)
                continue
            if curEquip.GetItemColor() < color:
                GameWorld.DebugLog('    装备位品质不足! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,place=%s,ItemColor=%s < %s'
                                   % (realmLV, taskID, taskType, classLV, place, curEquip.GetItemColor(), color), playerID)
                continue
            curCount += 1
        if curCount < needCount:
            GameWorld.DebugLog('    境界任务所需装备数不足! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,star=%s,isSuite=%s,color=%s,curCount=%s < %s'
                           % (realmLV, taskID, taskType, classLV, star, isSuite, color, curCount, needCount), playerID)
            return
    # 渡劫
    elif taskType == RealmTaskType_Dujie:
        curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID)
        if not curValue:
            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)
@@ -438,7 +194,7 @@
    updAwardState = awardState|pow(2, taskID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskAwardState, updAwardState)
    GameWorld.DebugLog("境界渡劫领奖OK! realmLV=%s,taskID=%s,updAwardState=%s" % (realmLV, taskID, updAwardState), playerID)
    SyncRealmFBState(curPlayer)
    SyncRealmInfo(curPlayer)
    return
def CheckRealmTaskFinishAll(curPlayer):
@@ -463,7 +219,6 @@
#    tagHead        Head;
#};
def DoRealmLVUp(index, clientData, tick):
    #升级境界
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    curRealmLV = curPlayer.GetOfficialRank()
    realmIpyData = GetRealmIpyData(curRealmLV)
@@ -501,29 +256,11 @@
    PlayerControl.PlayerControl(curPlayer).PlayerLvUp()
    
    if needSys:
        addBuffID = nextRealmIpyData.GetBuffID()
        if addBuffID:
            PlayerControl.WorldNotify(0, 'BigRealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv, IpyGameDataPY.GetFuncCfg('RadioExpRealm')])
            msgStr = str(addBuffID)
            GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'RealmUpAddBuff', msgStr, len(msgStr))
        else:
            PlayerControl.WorldNotify(0, 'RealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv])
    if SkillCommon.GivePlayerSkillByJobSkill(curPlayer, nextRealmIpyData.GetLearnSkillIDInfo()):
        PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEffSet(curPlayer)
    addFreePoint = nextRealmIpyData.GetAddFreePoint()
    if addFreePoint:
        updFreePoint = curPlayer.GetFreePoint() + addFreePoint
        curPlayer.SetFreePoint(updFreePoint)
        GameWorld.DebugLog("    境界阶级加灵根点: addFreePoint=%s,updFreePoint=%s" % (addFreePoint, updFreePoint))
        
    RefreshOfficialAttr(curPlayer)
    GameFuncComm.DoFuncOpenLogic(curPlayer)
    SyncRealmFBState(curPlayer, taskIDList=syncTaskIDList)
    #更新修为速率
    UpdateRealmExp(curPlayer, False, True)
    NotifyRealmExpInfo(curPlayer)
    SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList)
    #境界提升成就
    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RealmlvUp, nextRealmLv)
    PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_RealmUp, 1)
@@ -531,102 +268,4 @@
    PlayerBillboard.UpdateRealmBillboard(curPlayer)
    # 记录开服活动
    #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_RealmLV, nextRealmLv)
    EventShell.EventRespons_RealmUp(curPlayer, nextRealmLv)
    #流向
    DataRecordPack.DR_RealmLVUp(curPlayer, nextRealmLv)
    return True
#// A5 21 境界修为池提取 #tagCMTakeOutRealmExp
#
#struct    tagCMTakeOutRealmExp
#{
#    tagHead        Head;
#};
def OnTakeOutRealmExp(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    playerID = curPlayer.GetID()
    curTotalRealmExp = UpdateRealmExp(curPlayer, False)
    if curTotalRealmExp <= 0:
        GameWorld.DebugLog('境界修为池提取 没有经验可提取', playerID)
        return
    playerControl = PlayerControl.PlayerControl(curPlayer)
    playerControl.AddExp(curTotalRealmExp)
    PlayerControl.NotifyCode(curPlayer, 'TakeOutRealmExp', [curTotalRealmExp])
    #
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, int(time.time()))
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExp, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpPoint, 0)
    NotifyRealmExpInfo(curPlayer)
    return
def UpdateRealmExp(curPlayer, isNotify=True, isRealmLVUP=False):
    ##更新境界修为池
    curRealmLV = curPlayer.GetOfficialRank()
    ipyData = GetRealmIpyData(curRealmLV)
    if not ipyData:
        return 0
    if not ipyData.GetExpRate():
        return 0
    curTime = int(time.time())
    beginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBeginTime)
    if not beginTime:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, curTime)
        return 0
    if isRealmLVUP:
        ipyData = GetRealmIpyData(curRealmLV-1)
    curRealmExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExp)
    curRealmExpPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpPoint)
    curTotalExp = curRealmExpPoint * ChConfig.Def_PerPointValue + curRealmExp
    if curTotalExp >= ipyData.GetExpLimit():
        return curTotalExp
    passSeconds = curTime - beginTime
    if passSeconds <= 0:
        return curTotalExp
    perRealmExpTime = IpyGameDataPY.GetFuncCfg('RealmExpTime')
    curExpRate = ipyData.GetExpRate()
    #buff增加的额外经验
    buffRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime)
    buffAddRate = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffAddRate)
    buffTime = min(buffRemainTime, passSeconds)
    addExp = buffTime /perRealmExpTime*(curExpRate*(ShareDefine.Def_MaxRateValue + buffAddRate)/ShareDefine.Def_MaxRateValue) + (passSeconds-buffTime)/perRealmExpTime*curExpRate
    #addExp = passSeconds / perRealmExpTime * curExpRate
    if addExp <= 0:
        return curTotalExp
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, curTime)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffRemainTime, buffRemainTime - buffTime)
    updTotalExp = min(curTotalExp + addExp, ipyData.GetExpLimit())
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExp, updTotalExp % ChConfig.Def_PerPointValue)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpPoint, updTotalExp / ChConfig.Def_PerPointValue)
    #֪ͨ
    if isNotify:
        NotifyRealmExpInfo(curPlayer)
    return updTotalExp
def AddRealmExpBuffTime(curPlayer, addTime, addRate):
    ##增加会灵丹BUFF时间
    UpdateRealmExp(curPlayer, False)
    remainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffRemainTime, remainTime + addTime)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffAddRate, addRate)
    NotifyRealmExpInfo(curPlayer)
    return
def NotifyRealmExpInfo(curPlayer):
    ##通知修为池信息
    sendPack = ChPyNetSendPack.tagMCRealmExpInfo()
    sendPack.BeginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBeginTime)
    sendPack.BuffTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime)
    sendPack.BuffAddRate = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffAddRate)
    sendPack.CurExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExp)
    sendPack.CurExpPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpPoint)
    NetPackCommon.SendFakePack(curPlayer, sendPack)
    return