10334 【越南】【英语】【BT】【砍树】境界修改-服务端
| | |
| | | {
|
| | | WORD _Lv; //境界等级
|
| | | BYTE LvLarge; //大境界
|
| | | DWORD NeedLV; //需要等级
|
| | | DWORD NeedItemID; //需要道具ID
|
| | | WORD NeedItemCnt; //消耗的道具数量
|
| | | list NeedEquip; //需要8部位装备条件阶级|品质|是否套装
|
| | | DWORD LVMax; //等级上限
|
| | | list AddAttrType; //境界加成属性类型
|
| | | list AddAttrNum; //境界加成属性值
|
| | | DWORD BossID; //渡劫bossid
|
| | | DWORD BuffID; //给全服在线玩家增加buff
|
| | | DWORD ExpRate; //修为池经验速率
|
| | | DWORD ExpLimit; //修为池经验上限
|
| | |
| | | BYTE AddFreePoint; //增加自由属性点
|
| | | };
|
| | |
|
| | | //境界进阶任务表
|
| | |
|
| | | struct tagRealmLVUPTask
|
| | | {
|
| | | WORD _Lv; //境界等级
|
| | | BYTE TaskID; //任务ID
|
| | | BYTE TaskType; //任务类型
|
| | | list NeedValueList; //所需值列表
|
| | | list AwardItemList; //奖励物品列表
|
| | | };
|
| | |
|
| | | //境界塔表
|
| | |
|
| | | struct tagRealmTower
|
| | |
| | | #------------------------------------------------------
|
| | | # A3 11 通知玩家境界信息 #tagMCSyncRealmInfo
|
| | |
|
| | | class tagMCSyncRealmInfo(Structure):
|
| | | class tagMCSyncRealmTask(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("IsPass", c_ubyte), #是否通关副本
|
| | | ("XXZLAwardState", c_int), #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取
|
| | | ("TaskID", c_ubyte), |
| | | ("TaskValue", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x11
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | |
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x11
|
| | | self.IsPass = 0
|
| | | self.XXZLAwardState = 0
|
| | | self.TaskID = 0
|
| | | self.TaskValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCSyncRealmInfo)
|
| | | return sizeof(tagMCSyncRealmTask)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 11 通知玩家境界信息 //tagMCSyncRealmInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | IsPass:%d,
|
| | | XXZLAwardState:%d
|
| | | TaskID:%d,
|
| | | TaskValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.IsPass,
|
| | | self.XXZLAwardState
|
| | | self.TaskID,
|
| | | self.TaskValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCSyncRealmInfo(Structure):
|
| | | Head = tagHead()
|
| | | TaskAwardState = 0 #(DWORD TaskAwardState)//进阶任务领奖状态;按任务ID二进制位存储是否已领取
|
| | | TaskValueCount = 0 #(BYTE TaskValueCount)
|
| | | TaskValueList = list() #(vector<tagMCSyncRealmTask> TaskValueList)//进阶任务值列表,仅有需要记录的任务才会通知
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x11
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.TaskAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TaskValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.TaskValueCount):
|
| | | temTaskValueList = tagMCSyncRealmTask()
|
| | | _pos = temTaskValueList.ReadData(_lpData, _pos)
|
| | | self.TaskValueList.append(temTaskValueList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x11
|
| | | self.TaskAwardState = 0
|
| | | self.TaskValueCount = 0
|
| | | self.TaskValueList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.TaskValueCount):
|
| | | length += self.TaskValueList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.TaskAwardState)
|
| | | data = CommFunc.WriteBYTE(data, self.TaskValueCount)
|
| | | for i in range(self.TaskValueCount):
|
| | | data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | TaskAwardState:%d,
|
| | | TaskValueCount:%d,
|
| | | TaskValueList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.TaskAwardState,
|
| | | self.TaskValueCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Cmd,m_NAtagMCSyncRealmInfo.SubCmd))] = m_NAtagMCSyncRealmInfo
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Head.Cmd,m_NAtagMCSyncRealmInfo.Head.SubCmd))] = m_NAtagMCSyncRealmInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | 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_RealmFBIsOpen = "RealmFBIsOpen" #渡劫副本是否开启 0未开启 1已开启 2可升级境界
|
| | | Def_PDict_RealmFBAttrAdd = "RealmFBAttrAdd_%s" #渡劫副本属性加成 参数属性ID
|
| | | Def_PDict_RealmExp = "RealmExp" #境界修为池总经验
|
| | | Def_PDict_RealmExpPoint = "RealmExpPoint" #境界修为池总经验点
|
| | |
| | | #------------------------------------------------------
|
| | | # A3 11 通知玩家境界信息 #tagMCSyncRealmInfo
|
| | |
|
| | | class tagMCSyncRealmInfo(Structure):
|
| | | class tagMCSyncRealmTask(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("IsPass", c_ubyte), #是否通关副本
|
| | | ("XXZLAwardState", c_int), #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取
|
| | | ("TaskID", c_ubyte), |
| | | ("TaskValue", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x11
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | |
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x11
|
| | | self.IsPass = 0
|
| | | self.XXZLAwardState = 0
|
| | | self.TaskID = 0
|
| | | self.TaskValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCSyncRealmInfo)
|
| | | return sizeof(tagMCSyncRealmTask)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 11 通知玩家境界信息 //tagMCSyncRealmInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | IsPass:%d,
|
| | | XXZLAwardState:%d
|
| | | TaskID:%d,
|
| | | TaskValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.IsPass,
|
| | | self.XXZLAwardState
|
| | | self.TaskID,
|
| | | self.TaskValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCSyncRealmInfo(Structure):
|
| | | Head = tagHead()
|
| | | TaskAwardState = 0 #(DWORD TaskAwardState)//进阶任务领奖状态;按任务ID二进制位存储是否已领取
|
| | | TaskValueCount = 0 #(BYTE TaskValueCount)
|
| | | TaskValueList = list() #(vector<tagMCSyncRealmTask> TaskValueList)//进阶任务值列表,仅有需要记录的任务才会通知
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x11
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.TaskAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TaskValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.TaskValueCount):
|
| | | temTaskValueList = tagMCSyncRealmTask()
|
| | | _pos = temTaskValueList.ReadData(_lpData, _pos)
|
| | | self.TaskValueList.append(temTaskValueList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x11
|
| | | self.TaskAwardState = 0
|
| | | self.TaskValueCount = 0
|
| | | self.TaskValueList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.TaskValueCount):
|
| | | length += self.TaskValueList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.TaskAwardState)
|
| | | data = CommFunc.WriteBYTE(data, self.TaskValueCount)
|
| | | for i in range(self.TaskValueCount):
|
| | | data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | TaskAwardState:%d,
|
| | | TaskValueCount:%d,
|
| | | TaskValueList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.TaskAwardState,
|
| | | self.TaskValueCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Cmd,m_NAtagMCSyncRealmInfo.SubCmd))] = m_NAtagMCSyncRealmInfo
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Head.Cmd,m_NAtagMCSyncRealmInfo.Head.SubCmd))] = m_NAtagMCSyncRealmInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | import GameWorld
|
| | | import PlayerPrestigeSys
|
| | | import IpyGameDataPY
|
| | | import PlayerControl
|
| | | import PlayerGubao
|
| | | import ChConfig
|
| | |
|
| | |
|
| | | ## 逻辑实现
|
| | |
| | | # @param cmdList 参数列表
|
| | | # @return None
|
| | | def OnExec(curPlayer, cmdList):
|
| | | isOK = PlayerPrestigeSys.DoRealmLVUpLogic(curPlayer)
|
| | | curRealmLV = curPlayer.GetOfficialRank()
|
| | | if isOK:
|
| | | GameWorld.DebugAnswer(curPlayer, "提升境界成功!GetOfficialRank=%s" % curRealmLV)
|
| | | else:
|
| | | GameWorld.DebugAnswer(curPlayer, "提升境界失败!GetOfficialRank=%s" % curRealmLV)
|
| | | if not cmdList:
|
| | | GameWorld.DebugAnswer(curPlayer, "------------ %s" % GameWorld.GetCurrentDataTimeStr())
|
| | | GameWorld.DebugAnswer(curPlayer, "重置境界阶级: RealmLVUP 0 [重置改版标记]")
|
| | | GameWorld.DebugAnswer(curPlayer, "执行境界升阶: RealmLVUP 1 [次数]")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置境界任务: RealmLVUP t 任务ID 进度值")
|
| | | GameWorld.DebugAnswer(curPlayer, "注:可设置进度的任务类型:%s" % PlayerPrestigeSys.NeedTaskValueTypeList)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置境界塔层: RealmTower")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置天星塔层: SetSkyTower")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置境界等级: SetOfficalRank 境界等级")
|
| | | GameWorld.DebugAnswer(curPlayer, "注:直接设置境界等级不会触发境界其他额外效果")
|
| | | return
|
| | | |
| | | value = cmdList[0]
|
| | | if value == 0:
|
| | | reVersionState = cmdList[1] if len(cmdList) > 1 else 0
|
| | | curPlayer.SetOfficialRank(0)
|
| | | curPlayer.SetFreePoint(0)
|
| | | GameWorld.DebugAnswer(curPlayer, "重置境界!")
|
| | | GameWorld.DebugAnswer(curPlayer, "重置灵根点!")
|
| | | 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
|
| | | GameWorld.DebugAnswer(curPlayer, "重置古宝(%s)效果(%s)增加灵根点:%s" % (gubaoID, effType, addFreePointAlready))
|
| | | 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
|
| | | okCnt = 0
|
| | | for _ in range(doCount):
|
| | | if PlayerPrestigeSys.DoRealmLVUpLogic(curPlayer):
|
| | | okCnt += 1
|
| | | else:
|
| | | break
|
| | | curRealmLV = curPlayer.GetOfficialRank()
|
| | | if okCnt:
|
| | | GameWorld.DebugAnswer(curPlayer, "提升境界成功!GetOfficialRank=%s" % curRealmLV)
|
| | | else:
|
| | | GameWorld.DebugAnswer(curPlayer, "提升境界失败!GetOfficialRank=%s" % curRealmLV)
|
| | | elif value == "t":
|
| | | 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])
|
| | | GameWorld.DebugAnswer(curPlayer, "设置任务ID:%s,进度值:%s" % (taskID, taskValue))
|
| | | |
| | | return
|
| | |
| | |
|
| | | import OpenServerCampaign
|
| | | import GameWorld
|
| | | import Lang
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import ChPlayer
|
| | | import ChConfig
|
| | |
|
| | | ## GM命令执行入口
|
| | | # @param curPlayer 当前玩家
|
| | | # @param playerList 参数列表 [pointCount]
|
| | | # @return None
|
| | | # @remarks 函数详细说明.
|
| | | def OnExec(curPlayer,playerList):
|
| | | if len(playerList) != 1:
|
| | | #参数不正确
|
| | | GameWorld.DebugAnswer(curPlayer, Lang.GBText("参数不正确"))
|
| | | def OnExec(curPlayer, paramList):
|
| | | if not paramList:
|
| | | GameWorld.DebugAnswer(curPlayer, "设置灵根点: SetFreePoint 自由点 [五行加点数]")
|
| | | return
|
| | | #获取 指定帐号<玩家ID>的未分配点数<未分配点数>
|
| | | curPlayer.SetFreePoint(playerList[0])
|
| | | value = paramList[0]
|
| | | curPlayer.SetFreePoint(value)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置自由点: %s" % value)
|
| | | # 更新开服活动灵根数据
|
| | | OpenServerCampaign.UpdOpenServerCampaignLingGenData(curPlayer)
|
| | | |
| | | if len(paramList) > 1:
|
| | | setPoint = paramList[1]
|
| | | vIndex = 0
|
| | | setAddPointList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in range(ipyDataMgr.GetRolePointCount()):
|
| | | vIndex += 1
|
| | | attrID = ipyDataMgr.GetRolePointByIndex(index).GetAttrID()
|
| | | setPoint = paramList[vIndex] if len(paramList) > vIndex else setPoint
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AddPointValue % attrID, setPoint)
|
| | | setAddPointList.append(setPoint)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置五行点: %s" % setAddPointList)
|
| | | ChPlayer.NotifyPlayerBasePoint(curPlayer)
|
| | | playerControl = PlayerControl.PlayerControl(curPlayer)
|
| | | playerControl.RefreshPlayerAttrState()
|
| | | return
|
| | |
| | | return
|
| | | return dayStr in PyGameData.FBOpenTimeRecord[dataMapID]
|
| | |
|
| | | def IsFBPass(curPlayer, mapID, lineID):
|
| | | ## 副本线路是否已过关
|
| | | passLineID = 0
|
| | | if mapID == ChConfig.Def_FBMapID_RealmTower:
|
| | | passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealmTowerFloor)
|
| | | elif mapID == ChConfig.Def_FBMapID_SkyTower:
|
| | | passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor)
|
| | | elif mapID == ChConfig.Def_FBMapID_TrialTower:
|
| | | passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
|
| | | else:
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataNotLog('FBGeneralTrain', mapID, lineID)
|
| | | if ipyData:
|
| | | passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
|
| | | else:
|
| | | grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])
|
| | | if grade:
|
| | | return True
|
| | | |
| | | if passLineID >= lineID:
|
| | | return True
|
| | | |
| | | return False
|
| | |
|
| | | def CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, reqEnterCnt=1, isNotify=True, isTeamAsk=False):
|
| | | # 可否进入副本通用检查, 扫荡通用
|
| | |
| | | lineID = 1 if FBCommon.GetFBPropertyMark() else 0
|
| | | return FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_DuJie, lineID)
|
| | |
|
| | | def GetDuJieBossID():
|
| | | realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV)
|
| | | realmIpyData = PlayerPrestigeSys.GetRealmIpyData(realmLV)
|
| | | if not realmIpyData:
|
| | | GameWorld.ErrLog("没有该境界等级数据! Lv=%s" % realmLV)
|
| | | def GetDuJieBossID(curPlayer=None):
|
| | | if curPlayer:
|
| | | realmLV = curPlayer.GetOfficialRank()
|
| | | else:
|
| | | realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV)
|
| | | taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV)
|
| | | if not taskIpyDataList:
|
| | | return
|
| | | return realmIpyData.GetBossID()
|
| | | for taskIpyData in taskIpyDataList:
|
| | | if taskIpyData.GetTaskType() != PlayerPrestigeSys.RealmTaskType_Dujie:
|
| | | continue
|
| | | taskID = taskIpyData.GetTaskID()
|
| | | if curPlayer:
|
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID):
|
| | | GameWorld.DebugLog("玩家渡劫boss已完成击杀! realmLV=%s,taskID=%s" % (realmLV, taskID), curPlayer.GetPlayerID())
|
| | | return
|
| | | valueList = taskIpyData.GetNeedValueList()
|
| | | return valueList[0] if valueList else 0
|
| | | return
|
| | |
|
| | | #---FB接口----------
|
| | | ##副本初始化
|
| | |
| | | GameWorld.DebugLog("爵位境界功能未开启, 无法开启渡劫!curLV=%s" % curPlayer.GetLV())
|
| | | return False
|
| | | if lineID == 0 or curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader or (lineID == 1 and curPlayer.GetTeamID() == 0):
|
| | | curRealmLV = curPlayer.GetOfficialRank()
|
| | | realmIpyData = PlayerPrestigeSys.GetRealmIpyData(curRealmLV)
|
| | | if not realmIpyData:
|
| | | GameWorld.ErrLog("没有该境界等级数据! Lv=%s" % curRealmLV)
|
| | | bossID = GetDuJieBossID(curPlayer)
|
| | | if not bossID:
|
| | | GameWorld.ErrLog("没有可挑战的渡劫boss或已完成: realmLV=%s" % curPlayer.GetOfficialRank(), curPlayer.GetPlayerID())
|
| | | return False
|
| | | needLV = realmIpyData.GetNeedLV()
|
| | | if not needLV:
|
| | | GameWorld.DebugLog("境界已是最大等级,不能升级! Lv=%s" % curRealmLV, curPlayer.GetPlayerID())
|
| | | return False
|
| | | if curPlayer.GetLV() < needLV:
|
| | | GameWorld.DebugLog("等级不足,无法开启渡劫!needRealmPoint=%s" % (needLV), curPlayer.GetPlayerID())
|
| | | return False
|
| | | if not realmIpyData.GetBossID():
|
| | | return False
|
| | |
|
| | | |
| | | return True
|
| | |
|
| | |
|
| | |
| | | if isPass and leaderPlayer:
|
| | | if curPlayer.GetPlayerID() == leaderPlayerID:
|
| | | #渡劫通过处理
|
| | | PlayerPrestigeSys.DologicDujieFBPass(curPlayer, realmLV, curStar)
|
| | | PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_Dujie, 1)
|
| | | #清除CD
|
| | | FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % ChConfig.Def_FBMapID_DuJie, 0)
|
| | | FBCommon.SyncFBEnterTick(curPlayer)
|
| | |
| | | "Realm":(
|
| | | ("WORD", "Lv", 1),
|
| | | ("BYTE", "LvLarge", 0),
|
| | | ("DWORD", "NeedLV", 0),
|
| | | ("DWORD", "NeedItemID", 0),
|
| | | ("WORD", "NeedItemCnt", 0),
|
| | | ("list", "NeedEquip", 0),
|
| | | ("DWORD", "LVMax", 0),
|
| | | ("list", "AddAttrType", 0),
|
| | | ("list", "AddAttrNum", 0),
|
| | | ("DWORD", "BossID", 0),
|
| | | ("DWORD", "BuffID", 0),
|
| | | ("DWORD", "ExpRate", 0),
|
| | | ("DWORD", "ExpLimit", 0),
|
| | | ("dict", "LearnSkillIDInfo", 0),
|
| | | ("BYTE", "AddFreePoint", 0),
|
| | | ),
|
| | |
|
| | | "RealmLVUPTask":(
|
| | | ("WORD", "Lv", 1),
|
| | | ("BYTE", "TaskID", 0),
|
| | | ("BYTE", "TaskType", 0),
|
| | | ("list", "NeedValueList", 0),
|
| | | ("list", "AwardItemList", 0),
|
| | | ),
|
| | |
|
| | | "RealmTower":(
|
| | |
| | | |
| | | def GetLv(self): return self.attrTuple[0] # 境界等级 WORD
|
| | | def GetLvLarge(self): return self.attrTuple[1] # 大境界 BYTE
|
| | | def GetNeedLV(self): return self.attrTuple[2] # 需要等级 DWORD
|
| | | def GetNeedItemID(self): return self.attrTuple[3] # 需要道具ID DWORD
|
| | | def GetNeedItemCnt(self): return self.attrTuple[4] # 消耗的道具数量 WORD
|
| | | def GetNeedEquip(self): return self.attrTuple[5] # 需要8部位装备条件阶级|品质|是否套装 list
|
| | | def GetAddAttrType(self): return self.attrTuple[6] # 境界加成属性类型 list
|
| | | def GetAddAttrNum(self): return self.attrTuple[7] # 境界加成属性值 list
|
| | | def GetBossID(self): return self.attrTuple[8] # 渡劫bossid DWORD
|
| | | def GetBuffID(self): return self.attrTuple[9] # 给全服在线玩家增加buff DWORD
|
| | | def GetExpRate(self): return self.attrTuple[10] # 修为池经验速率 DWORD
|
| | | def GetExpLimit(self): return self.attrTuple[11] # 修为池经验上限 DWORD
|
| | | def GetLearnSkillIDInfo(self): return self.attrTuple[12] # 学习技能ID信息 {"职业":[技能ID, ...], ...} dict
|
| | | def GetAddFreePoint(self): return self.attrTuple[13] # 增加自由属性点 BYTE |
| | | 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(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetLv(self): return self.attrTuple[0] # 境界等级 WORD
|
| | | def GetTaskID(self): return self.attrTuple[1] # 任务ID BYTE
|
| | | def GetTaskType(self): return self.attrTuple[2] # 任务类型 BYTE
|
| | | def GetNeedValueList(self): return self.attrTuple[3] # 所需值列表 list
|
| | | def GetAwardItemList(self): return self.attrTuple[4] # 奖励物品列表 list |
| | | |
| | | # 境界塔表 |
| | | class IPY_RealmTower(): |
| | |
| | | self.__LoadFileData("LingQiTrain", onlyCheck)
|
| | | self.__LoadFileData("RealmXXZL", onlyCheck)
|
| | | self.__LoadFileData("Realm", onlyCheck)
|
| | | self.__LoadFileData("RealmLVUPTask", onlyCheck)
|
| | | self.__LoadFileData("RealmTower", onlyCheck)
|
| | | self.__LoadFileData("LianTi", onlyCheck)
|
| | | self.__LoadFileData("GodWeapon", onlyCheck)
|
| | |
| | | self.CheckLoadData("Realm") |
| | | return self.ipyRealmCache[index]
|
| | | |
| | | def GetRealmLVUPTaskCount(self): |
| | | self.CheckLoadData("RealmLVUPTask") |
| | | return self.ipyRealmLVUPTaskLen
|
| | | def GetRealmLVUPTaskByIndex(self, index): |
| | | self.CheckLoadData("RealmLVUPTask") |
| | | return self.ipyRealmLVUPTaskCache[index]
|
| | | |
| | | def GetRealmTowerCount(self): |
| | | self.CheckLoadData("RealmTower") |
| | | return self.ipyRealmTowerLen
|
| | |
| | | curLV = curPlayer.GetLV()
|
| | | isOnlyLVUp = lvLimit==0 or curLV < lvLimit #是否直接提升固定等级
|
| | |
|
| | | maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV") # 当前已开放的最大等级不一定大于下一次转生等级
|
| | | maxLV = PlayerControl.GetPlayerMaxLV(curPlayer)
|
| | | if isOnlyLVUp and curLV >= maxLV:
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_607994")
|
| | | GameWorld.Log('升级果实无法使用,已达到当前最大等级 curLV=%s,maxLV=%s'
|
| | |
| | | import PlayerActivity
|
| | | import PlayerSuccess
|
| | | import BossHurtMng
|
| | | import PlayerPrestigeSys
|
| | | import GY_Query_BossFirstKill
|
| | | import GameLogic_FamilyInvade
|
| | | import GameLogic_GatherSoul
|
| | |
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_KillNPC)
|
| | | PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillNPC)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_KillNPC)
|
| | | PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_KillSpecificNPC, 1, [npcID])
|
| | |
|
| | | if ChConfig.IsGameBoss(curNPC):
|
| | |
| | | #境界修仙之路奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_RealmXXZL:
|
| | | PlayerPrestigeSys.GetXXZLAward(curPlayer, dataEx)
|
| | | #境界渡劫任务条件奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_RealmLVUpTask:
|
| | | PlayerPrestigeSys.GetRealmLVUpTaskAward(curPlayer, dataEx)
|
| | | #仙盟boss伤害奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_FamilyBossHurt:
|
| | | GameLogic_FamilyBoss.GetFamilyBossHurtAward(curPlayer, dataEx, dataExStr)
|
| | |
| | | #curTotalExp = GetPlayerTotalExp(curPlayer)
|
| | | curTotalExp = curPlayer.GetExpPoint() * ChConfig.Def_PerPointValue + curPlayer.GetTotalExp()
|
| | |
|
| | | maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1)
|
| | | maxLV = GetPlayerMaxLV(curPlayer)
|
| | | maxLVExpStore = IpyGameDataPY.GetFuncCfg("MaxLVExpStore", 1)
|
| | |
|
| | | curLV = curPlayer.GetLV()
|
| | |
| | | # GameWorld.DebugLog("经验已满!需先转生!curLV=%s,reinLV=%s" % (curLV, nextReinLV), curPlayer.GetPlayerID())
|
| | | # return 0
|
| | |
|
| | | # 检查最大等级
|
| | | if curLV >= maxLV and curTotalExp >= maxLVExpStore:
|
| | | # 检查最大等级,maxLVExpStore -1时不限累计经验上限
|
| | | if curLV >= maxLV and curTotalExp >= maxLVExpStore and maxLVExpStore != -1:
|
| | | self.__NotifyExpFull(curPlayer, "GeRen_admin_825676")
|
| | | #GameWorld.DebugLog("经验已满!已满级!curLV=%s" % (curLV), curPlayer.GetPlayerID())
|
| | | GameWorld.DebugLog("经验已满!已满级!curLV=%s,maxLV=%s,curTotalExp=%s >= maxLVExpStore=%s" % (curLV, maxLV, curTotalExp, maxLVExpStore), curPlayer.GetPlayerID())
|
| | | return 0, expViewType
|
| | |
|
| | | # 杀怪
|
| | |
| | |
|
| | | # 不可再升级时,增加后的经验不可超过最大可存储经验
|
| | | #if curLV >= nextReinLV or curLV >= maxLV:
|
| | | if curLV >= maxLV:
|
| | | if curLV >= maxLV and maxLVExpStore > 0:
|
| | | addExp = min(addExp, max(0, maxLVExpStore - curTotalExp))
|
| | |
|
| | | if addExp <= 0:
|
| | |
| | | needSyncTalentPoint = False
|
| | | playerNeedDoLVUp = False
|
| | | curLV = curPlayer.GetLV()
|
| | | maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1)
|
| | | maxLV = GetPlayerMaxLV(curPlayer)
|
| | |
|
| | | curPlayer.BeginRefreshState()
|
| | | #befXP = curPlayer.GetXP()
|
| | |
| | | return 0
|
| | | return lvIpyData.GetExpPoint() * ChConfig.Def_PerPointValue + lvIpyData.GetExp()
|
| | |
|
| | | def GetPlayerMaxLV(curPlayer):
|
| | | ## 获取玩家实际可升的最大等级
|
| | | maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1)
|
| | | curRealmLV = curPlayer.GetOfficialRank()
|
| | | realmIpyData = PlayerPrestigeSys.GetRealmIpyData(curRealmLV)
|
| | | if not realmIpyData:
|
| | | return 0
|
| | | playerMaxLV = min(maxLV, realmIpyData.GetLVMax())
|
| | | return playerMaxLV
|
| | |
|
| | | ## 获得玩家实际等级
|
| | | # @param curPlayer 玩家
|
| | | # @return 玩家实际等级
|
| | |
| | | ]
|
| | |
|
| | | # 古宝灵根点特殊效果列表
|
| | | GubaoEffType_RealmLVAddLinggen = 55 # 境界每级增加X点灵根
|
| | | GubaoEffFreePointTypeList = [54, 55, 56]
|
| | |
|
| | | # 需要记录EffValue的EffType列表
|
| | |
| | | addFreePointAlready = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
|
| | | unAddFreePoint = max(0, addFreePointTotal - addFreePointAlready)
|
| | | unAddFreePointTotal += unAddFreePoint
|
| | | GameWorld.DebugLog("古宝星级增加灵根点: gubaoID=%s,star=%s,addFreePointTotal=%s,addFreePointAlready=%s,unAddFreePoint=%s,total=%s" |
| | | % (gubaoID, star, addFreePointTotal, addFreePointAlready, unAddFreePoint, unAddFreePointTotal), playerID)
|
| | | GameWorld.DebugLog("古宝星级增加灵根点: gubaoID=%s,star=%s,effType=%s,addFreePointTotal=%s,addFreePointAlready=%s,unAddFreePoint=%s,total=%s" |
| | | % (gubaoID, star, effType, addFreePointTotal, addFreePointAlready, unAddFreePoint, unAddFreePointTotal), playerID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), addFreePointTotal)
|
| | | if unAddFreePoint:
|
| | | Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
|
| | |
| | | freePoint = curPlayer.GetFreePoint()
|
| | | updFreePoint = freePoint + unAddFreePointTotal
|
| | | curPlayer.SetFreePoint(updFreePoint)
|
| | | GameWorld.DebugLog("古宝加点: freePoint=%s,freePoint=%s,freePoint=%s" % (freePoint, unAddFreePointTotal, updFreePoint), playerID)
|
| | | return
|
| | |
|
| | | def __calcStarEffAddFreePoint(curPlayer, gubaoID, effPointDict):
|
| | |
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ItemCommon
|
| | | import ItemControler
|
| | | import FBCommon
|
| | | import GameFuncComm
|
| | | import PlayerControl
|
| | | import ChPyNetSendPack
|
| | |
| | | import time
|
| | | #------------------------------------------------------------------------------
|
| | |
|
| | | # 渡劫任务类型
|
| | | RealmTaskTypeList = (
|
| | | RealmTaskType_LV, # 等级 1
|
| | | RealmTaskType_PassMap, # 过关关卡 2
|
| | | RealmTaskType_KillNPC, # 击杀NPC 3
|
| | | RealmTaskType_LVUPItem, # 进阶丹 4
|
| | | RealmTaskType_Equip, # 基础装备明细 5
|
| | | RealmTaskType_Dujie, # 渡劫boss 6
|
| | | ) = range(1, 1 + 6)
|
| | |
|
| | | # 需要记录任务值的任务类型列表
|
| | | NeedTaskValueTypeList = [RealmTaskType_KillNPC, RealmTaskType_Dujie]
|
| | |
|
| | | def DoOfficialOpen(curPlayer):
|
| | | #功能开启
|
| | |
| | |
|
| | |
|
| | | def OnLogin(curPlayer):
|
| | | SyncRealmFBState(curPlayer)
|
| | | DoRealmVersionStateLogic(curPlayer)
|
| | | SyncRealmFBState(curPlayer, isAll=True)
|
| | | UpdateRealmExp(curPlayer, False)
|
| | | NotifyRealmExpInfo(curPlayer)
|
| | | 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 not realmLV:
|
| | | # 新号不处理
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | GameWorld.Log("======================== 执行境界版本变更重置逻辑 =======================", playerID)
|
| | | |
| | | # 重置境界
|
| | | curPlayer.SetOfficialRank(0)
|
| | | |
| | | # 返还境界丹
|
| | | returnItemID = IpyGameDataPY.GetFuncCfg("RealmLvUP", 1)
|
| | | returnCount = 0
|
| | | itemCntList = IpyGameDataPY.GetFuncEvalCfg("RealmVersion", 1)
|
| | | for rLV, needCnt in enumerate(itemCntList):
|
| | | if rLV > realmLV:
|
| | | break
|
| | | returnCount += needCnt
|
| | | GameWorld.Log("境界等级: realmLV=%s,returnItemID=%s,returnCount=%s" % (realmLV, 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)
|
| | |
|
| | |
| | | return
|
| | |
|
| | | def GetXXZLAward(curPlayer, taskID):
|
| | | ## 领取修仙之路奖励
|
| | | awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmXXZLAward)
|
| | | if awardState&pow(2, taskID):
|
| | | GameWorld.DebugLog("已领取过境界修仙之路该奖励, taskID=%s" % taskID, curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("RealmXXZL", taskID)
|
| | | if not ipyData:
|
| | | return
|
| | | taskType = ipyData.GetTaskType()
|
| | | needValue = ipyData.GetNeedValue()
|
| | | curValue= 0
|
| | | |
| | | #1. 得到 XXX法宝, 所需值为法宝ID
|
| | | if taskType == 1:
|
| | | magicWeaponID = needValue
|
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % magicWeaponID) >= 1:
|
| | | curValue = needValue
|
| | | |
| | | #2. 通关天星塔X层
|
| | | elif taskType == 2:
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor)
|
| | | |
| | | #3. 击杀世界BOSSX只
|
| | | elif taskType == 3:
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntTotal % ShareDefine.Def_Boss_Func_World)
|
| | | |
| | | #4. 活跃修炼X次
|
| | | elif taskType == 4:
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityCountTotal)
|
| | | |
| | | #5. 击杀个人BOSS:xxx,所需之为个人boss表对应线路id
|
| | | elif taskType == 5:
|
| | | mapID = ChConfig.Def_FBMapID_PersonalBoss
|
| | | lineID = needValue
|
| | | if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID]):
|
| | | curValue = needValue
|
| | | |
| | | #6. 通关宗门试炼x次
|
| | | elif taskType == 6:
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntTotal % ChConfig.Def_FBMapID_MunekadoTrial)
|
| | | |
| | | #7. 获得X点灵根点
|
| | | elif taskType == 7:
|
| | | curValue = PlayerControl.GetTotalLingGenPoint(curPlayer)
|
| | | |
| | | if curValue < needValue:
|
| | | GameWorld.DebugLog("境界修仙之路当前任务所需值不满足,无法领奖, taskID=%s,taskType=%s,curValue=%s < %s" |
| | | % (taskID, taskType, curValue, needValue), curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | awardItemList = ipyData.GetAwardItemList()
|
| | | if not ItemCommon.GiveAwardItem(curPlayer, awardItemList, "RealmXXZL"):
|
| | | return
|
| | | |
| | | updAwardState = awardState|pow(2, taskID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmXXZLAward, updAwardState)
|
| | | GameWorld.DebugLog("领取境界修仙之路奖励, awardID=%s,updAwardState=%s" % (taskID, updAwardState), curPlayer.GetPlayerID())
|
| | | SyncRealmFBState(curPlayer)
|
| | | EventShell.EventRespons_RealmXXZLAward(curPlayer, taskID)
|
| | | ## 领取修仙之路奖励,废弃
|
| | | return
|
| | |
|
| | | def SyncRealmFBState(curPlayer):
|
| | | def SyncRealmFBState(curPlayer, taskIDList=None, isAll=False):
|
| | | #通知客户端渡劫副本是否开启
|
| | | #if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official):
|
| | | # return
|
| | | sendPack = ChPyNetSendPack.tagMCSyncRealmInfo()
|
| | | sendPack.IsPass = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen)
|
| | | sendPack.XXZLAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmXXZLAward)
|
| | | sendPack.TaskAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState)
|
| | | sendPack.TaskValueList = []
|
| | | if isAll and taskIDList == None:
|
| | | taskIDList = []
|
| | | curRealmLV = curPlayer.GetOfficialRank()
|
| | | taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", curRealmLV)
|
| | | if taskIpyDataList:
|
| | | for taskIpyData in taskIpyDataList:
|
| | | if taskIpyData.GetTaskType() in NeedTaskValueTypeList:
|
| | | taskIDList.append(taskIpyData.GetTaskID())
|
| | | if taskIDList:
|
| | | for taskID in taskIDList:
|
| | | task = ChPyNetSendPack.tagMCSyncRealmTask()
|
| | | task.TaskID = taskID
|
| | | task.TaskValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID)
|
| | | sendPack.TaskValueList.append(task)
|
| | | sendPack.TaskValueCount = len(sendPack.TaskValueList)
|
| | | NetPackCommon.SendFakePack(curPlayer, sendPack)
|
| | | return
|
| | |
|
| | |
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
| | | return
|
| | |
|
| | | def AddRealmTaskValue(curPlayer, taskType, addValue):
|
| | | ## 增加境界任务值
|
| | | if taskType not in NeedTaskValueTypeList:
|
| | | return
|
| | | realmLV = curPlayer.GetOfficialRank()
|
| | | taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV)
|
| | | if not taskIpyDataList:
|
| | | return
|
| | | syncTaskIDList = []
|
| | | for taskIpyData in taskIpyDataList:
|
| | | if taskType != taskIpyData.GetTaskType():
|
| | | continue
|
| | | taskID = taskIpyData.GetTaskID()
|
| | | needValue = GetRealmTaskNeedValue(taskIpyData.GetNeedValueList(), 0)
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID)
|
| | | if curValue >= needValue:
|
| | | continue
|
| | | syncTaskIDList.append(taskID)
|
| | | updValue = min(curValue + addValue, needValue)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskValue % taskID, updValue)
|
| | | 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)
|
| | | return
|
| | |
|
| | | def GetRealmTaskNeedValue(needValueList, index): return needValueList[index] if len(needValueList) > index else 0
|
| | |
|
| | | def GetRealmLVUpTaskAward(curPlayer, taskID):
|
| | | ## 领取境界渡劫任务条件奖励
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | realmLV = curPlayer.GetOfficialRank()
|
| | | awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState)
|
| | | if awardState&pow(2, taskID):
|
| | | GameWorld.DebugLog("境界任务领奖,已领取过! realmLV=%s,taskID=%s" % (realmLV, taskID), playerID)
|
| | | return
|
| | | |
| | | taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV)
|
| | | if not taskIpyDataList:
|
| | | return
|
| | | |
| | | taskIpyData = None
|
| | | for tIpyData in taskIpyDataList:
|
| | | if taskID != tIpyData.GetTaskID():
|
| | | continue
|
| | | taskIpyData = tIpyData
|
| | | break
|
| | | if not taskIpyData:
|
| | | GameWorld.DebugLog("没有该境界任务! realmLV=%s,taskID=%s" % (realmLV, taskID), playerID)
|
| | | return
|
| | | taskType = taskIpyData.GetTaskType()
|
| | | needValueList = taskIpyData.GetNeedValueList()
|
| | | needValueA = GetRealmTaskNeedValue(needValueList, 0)
|
| | | awardItemList = taskIpyData.GetAwardItemList()
|
| | | |
| | | # 玩家等级
|
| | | if taskType == RealmTaskType_LV:
|
| | | playerLV = curPlayer.GetLV()
|
| | | if playerLV < needValueA:
|
| | | GameWorld.DebugLog('境界任务领奖,等级不足! realmLV=%s,taskID=%s,taskType=%s,playerLV=%s < %s' |
| | | % (realmLV, taskID, taskType, playerLV, needValueA), playerID)
|
| | | return
|
| | | |
| | | # 过关副本
|
| | | elif taskType == RealmTaskType_PassMap:
|
| | | mapID = needValueA
|
| | | lineID = GetRealmTaskNeedValue(needValueList, 1)
|
| | | if not FBCommon.IsFBPass(curPlayer, mapID, lineID):
|
| | | GameWorld.DebugLog('境界任务领奖,未过关! realmLV=%s,taskID=%s,taskType=%s,mapID=%s,lineID=%s' |
| | | % (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
|
| | | equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | | for place in ChConfig.EquipPlace_Base:
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
|
| | | if not ipyData:
|
| | | return
|
| | | gridIndex = ipyData.GetGridIndex()
|
| | | curEquip = equipPack.GetAt(gridIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curEquip):
|
| | | GameWorld.DebugLog('境界任务领奖,装备位无装备! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,place=%s' |
| | | % (realmLV, taskID, taskType, classLV, place), playerID)
|
| | | return
|
| | | 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)
|
| | | return
|
| | | if isSuite and not curEquip.GetSuiteID():
|
| | | GameWorld.DebugLog('境界任务领奖,装备位非套装! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,place=%s' |
| | | % (realmLV, taskID, taskType, classLV, place), playerID)
|
| | | return
|
| | | 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)
|
| | | 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
|
| | | |
| | | # 根据记录任务进度值 |
| | | elif taskType in NeedTaskValueTypeList:
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID)
|
| | | if curValue < needValueA:
|
| | | GameWorld.DebugLog('境界任务领奖,条件不足! realmLV=%s,taskID=%s,taskType=%s,curValue=%s < %s' |
| | | % (realmLV, taskID, taskType, curValue, needValueA), playerID)
|
| | | return
|
| | | |
| | | else:
|
| | | return
|
| | | |
| | | ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["RealmTask", False, {}])
|
| | | |
| | | 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)
|
| | | return
|
| | |
|
| | | def CheckRealmTaskFinishAll(curPlayer):
|
| | | ## 检查境界任务是否已全部完成
|
| | | realmLV = curPlayer.GetOfficialRank()
|
| | | taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV)
|
| | | if not taskIpyDataList:
|
| | | GameWorld.DebugLog("没有境界任务算未完成! realmLV=%s" % (realmLV), curPlayer.GetPlayerID())
|
| | | return
|
| | | awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState)
|
| | | for taskIpyData in taskIpyDataList:
|
| | | taskID = taskIpyData.GetTaskID()
|
| | | if not awardState&pow(2, taskID):
|
| | | GameWorld.DebugLog("境界任务未完成领奖! realmLV=%s,taskID=%s" % (realmLV, taskID), curPlayer.GetPlayerID())
|
| | | return
|
| | | return True
|
| | |
|
| | | #// A5 23 提升境界等级 # tagCMRealmLVUp
|
| | | #
|
| | |
| | | if not realmIpyData:
|
| | | GameWorld.ErrLog("没有该境界等级数据! Lv=%s" % curRealmLV)
|
| | | return
|
| | | if realmIpyData.GetBossID():
|
| | | canLvUp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen) == 1
|
| | | if not canLvUp:
|
| | | GameWorld.DebugLog(' 副本未过关,不能升级境界')
|
| | | return
|
| | | #等级判断
|
| | | if curPlayer.GetLV() < realmIpyData.GetNeedLV():
|
| | | return
|
| | | #装备判断
|
| | | needEquip = realmIpyData.GetNeedEquip()
|
| | | if needEquip and len(needEquip) == 4:
|
| | | classLV, star, isSuite, color = needEquip
|
| | | equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | | for place in ChConfig.EquipPlace_Base:
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
|
| | | if not ipyData:
|
| | | return
|
| | | gridIndex = ipyData.GetGridIndex()
|
| | | curEquip = equipPack.GetAt(gridIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curEquip):
|
| | | return
|
| | | curPartStar = ChEquip.GetEquipPartStar(curPlayer, gridIndex)
|
| | | if curPartStar < star:
|
| | | return
|
| | | if isSuite and not curEquip.GetSuiteID():
|
| | | return
|
| | | if curEquip.GetItemColor() < color:
|
| | | return
|
| | |
|
| | | needItemID = realmIpyData.GetNeedItemID()
|
| | | needItemCount = realmIpyData.GetNeedItemCnt()
|
| | | # 支持不消耗物品升级
|
| | | if needItemID > 0 and needItemCount > 0:
|
| | | curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | hasEnough, itemIndexList = ItemCommon.GetItem_FromPack_ByID(needItemID, curPack, needItemCount)
|
| | | if not hasEnough:
|
| | | GameWorld.DebugLog("渡劫开启, 材料不足! Lv=%s, needItemID=%s,needItemCount=%s" |
| | | % (curRealmLV, needItemID, needItemCount))
|
| | | return
|
| | | #扣除物品
|
| | | ItemCommon.ReduceItem(curPlayer, curPack, itemIndexList, needItemCount, True, "Realm")
|
| | | if not CheckRealmTaskFinishAll(curPlayer):
|
| | | return
|
| | |
|
| | | DoRealmLVUpLogic(curPlayer)
|
| | | return
|
| | |
|
| | | # 提升1级境界加点
|
| | | def __DoRealmLVUpAddPoint(curPlayer):
|
| | | if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint):
|
| | | # 未开启前不可加点,因为DoAddPointOpen会一次性补齐,避免意外情况多加了点数
|
| | | return
|
| | |
|
| | | curFreePoint = curPlayer.GetFreePoint()
|
| | | addPoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 3)
|
| | | if addPoint != 0:
|
| | | setFreePoint = curFreePoint + addPoint
|
| | | DataRecordPack.DR_Freepoint(curPlayer, "RealmLVUp", addPoint)
|
| | | curPlayer.SetFreePoint(setFreePoint)
|
| | |
|
| | | return
|
| | |
|
| | |
|
| | | def DoRealmLVUpLogic(curPlayer, needSys=True):
|
| | | curRealmLV = curPlayer.GetOfficialRank()
|
| | |
| | | return
|
| | |
|
| | | curPlayer.SetOfficialRank(nextRealmLv)
|
| | | # 提升1级境界加点
|
| | | __DoRealmLVUpAddPoint(curPlayer)
|
| | | PlayerGubao.DoGubaoAddFreePoint(curPlayer)
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskAwardState, 0)
|
| | | syncTaskIDList = []
|
| | | taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", nextRealmLv)
|
| | | if taskIpyDataList:
|
| | | for taskIpyData in taskIpyDataList:
|
| | | taskID = taskIpyData.GetTaskID()
|
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskValue % taskID, 0)
|
| | | syncTaskIDList.append(taskID)
|
| | | |
| | | PlayerControl.PlayerControl(curPlayer).PlayerLvUp()
|
| | | |
| | | if needSys:
|
| | | addBuffID = nextRealmIpyData.GetBuffID()
|
| | | if addBuffID:
|
| | |
| | | if addFreePoint:
|
| | | updFreePoint = curPlayer.GetFreePoint() + addFreePoint
|
| | | curPlayer.SetFreePoint(updFreePoint)
|
| | | GameWorld.DebugLog(" addFreePoint=%s,updFreePoint=%s" % (addFreePoint, updFreePoint))
|
| | | GameWorld.DebugLog(" 境界阶级加灵根点: addFreePoint=%s,updFreePoint=%s" % (addFreePoint, updFreePoint))
|
| | |
|
| | | RefreshOfficialAttr(curPlayer)
|
| | | GameFuncComm.DoFuncOpenLogic(curPlayer)
|
| | | SyncRealmFBState(curPlayer)
|
| | | SyncRealmFBState(curPlayer, taskIDList=syncTaskIDList)
|
| | | #更新修为速率
|
| | | UpdateRealmExp(curPlayer, False, True)
|
| | | NotifyRealmExpInfo(curPlayer)
|
| | |
| | | #流向
|
| | | DataRecordPack.DR_RealmLVUp(curPlayer, nextRealmLv)
|
| | | return True
|
| | |
|
| | |
|
| | | def DologicDujieFBPass(curPlayer, realmLV, star):
|
| | | #渡劫通过后处理
|
| | | realmIpyData = GetRealmIpyData(realmLV)
|
| | | if not realmIpyData:
|
| | | return
|
| | | #DoRealmLVUpLogic(curPlayer)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 1)
|
| | | SyncRealmFBState(curPlayer)
|
| | | |
| | | return
|
| | |
|
| | |
|
| | | #// A5 21 境界修为池提取 #tagCMTakeOutRealmExp
|
| | | #
|