From ee017bc9f5435bf6de2e28aab2cb5d3edc430d95 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 25 十月 2023 01:33:14 +0800
Subject: [PATCH] 9964 【BT0.1】【主干】境界塔
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 52 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmTower.py | 43 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_RealmTower.py | 310 ++++++++++++++++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 26 ++
PySysDB/PySysDBPY.h | 10 +
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 52 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 6
7 files changed, 499 insertions(+), 0 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index b7c5b6b..e45a005 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -90,6 +90,16 @@
BYTE AddFreePoint; //增加自由属性点
};
+//境界塔表
+
+struct tagRealmTower
+{
+ DWORD _FloorID; //层
+ WORD NeedRealmLV; //所需境界
+ DWORD BossID; //BossID
+ list RewardItemList; //奖励物品列表
+};
+
//境界炼体属性表
struct tagLianTi
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index d792422..2aaabb1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -44522,6 +44522,58 @@
#------------------------------------------------------
+# B2 17 境界塔信息 #tagMCRealmTowerInfo
+
+class tagMCRealmTowerInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("Floor", c_int), # 已通关层
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB2
+ self.SubCmd = 0x17
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB2
+ self.SubCmd = 0x17
+ self.Floor = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCRealmTowerInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B2 17 境界塔信息 //tagMCRealmTowerInfo:
+ Cmd:%s,
+ SubCmd:%s,
+ Floor:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.Floor
+ )
+ return DumpString
+
+
+m_NAtagMCRealmTowerInfo=tagMCRealmTowerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRealmTowerInfo.Cmd,m_NAtagMCRealmTowerInfo.SubCmd))] = m_NAtagMCRealmTowerInfo
+
+
+#------------------------------------------------------
# B2 13 天星塔通关层数 #tagMCSkyTowerInfo
class tagMCSkyTowerServerReward(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 4a53f5a..41341d2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1820,6 +1820,8 @@
Def_FBMapID_ZhuXianBoss = 31380
#天星塔/丹塔
Def_FBMapID_SkyTower = 31370
+#境界塔
+Def_FBMapID_RealmTower = 31310
#仙魔之争
Def_FBMapID_XMZZ = 31010
#神兽副本
@@ -1979,6 +1981,7 @@
'GatherSoul':[Def_FBMapID_GatherSoul],#聚魂副本
'ZhuXianBoss':[Def_FBMapID_ZhuXianBoss],#诛仙BOSS
'SkyTower':[Def_FBMapID_SkyTower],#天星塔
+ 'RealmTower':[Def_FBMapID_RealmTower],#境界塔
'AllFamilyBoss':[Def_FBMapID_AllFamilyBoss],#多仙盟BOSS
'HorsePetBoss':[Def_FBMapID_HorsePetBoss],#骑宠BOSS
'FairyTreasure':[Def_FBMapID_FairyTreasure],#缥缈宝藏
@@ -3772,6 +3775,9 @@
Def_Player_Dict_SkyTowerFloor = "SkyTowerFloor" # 天星塔已通关层数
Def_Player_Dict_SkyTowerServerRecord = "SkyTowerServerRecord_%s" # 天星塔全服挑战层领奖记录,参数(层)
+#境界塔
+Def_Player_Dict_RealmTowerFloor = "RealmTowerFloor" # 已通关层数
+
#古神禁地
Def_Player_Dict_GodArea_Anger = "GodArea_Anger" # 古神禁地怒气值
Def_Player_Dict_GodArea_LastAddAngerTime = "GodArea_LastAddAngerTime" # 古神禁地上一次增加怒气值的时间
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index d792422..2aaabb1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -44522,6 +44522,58 @@
#------------------------------------------------------
+# B2 17 境界塔信息 #tagMCRealmTowerInfo
+
+class tagMCRealmTowerInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("Floor", c_int), # 已通关层
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB2
+ self.SubCmd = 0x17
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB2
+ self.SubCmd = 0x17
+ self.Floor = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCRealmTowerInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B2 17 境界塔信息 //tagMCRealmTowerInfo:
+ Cmd:%s,
+ SubCmd:%s,
+ Floor:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.Floor
+ )
+ return DumpString
+
+
+m_NAtagMCRealmTowerInfo=tagMCRealmTowerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRealmTowerInfo.Cmd,m_NAtagMCRealmTowerInfo.SubCmd))] = m_NAtagMCRealmTowerInfo
+
+
+#------------------------------------------------------
# B2 13 天星塔通关层数 #tagMCSkyTowerInfo
class tagMCSkyTowerServerReward(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmTower.py
new file mode 100644
index 0000000..24eb694
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmTower.py
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.RealmTower
+#
+# @todo:境界塔
+# @author hxp
+# @date 2023-10-25
+# @version 1.0
+#
+# 详细描述: 境界塔
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2023-10-25 01:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import PlayerControl
+import GameLogic_RealmTower
+import ChConfig
+
+## 逻辑实现
+## GM命令执行入口
+# @param curPlayer
+# @param cmdList 参数列表
+# @return None
+def OnExec(curPlayer, cmdList):
+ if not cmdList:
+ GameWorld.DebugAnswer(curPlayer, "设置境界塔层: RealmTower 层")
+ return
+
+ floorID = cmdList[0]
+ if not GameLogic_RealmTower.GetTowerIpyData(floorID):
+ GameWorld.DebugAnswer(curPlayer, "不存在该层")
+ return
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealmTowerFloor, floorID)
+
+ GameLogic_RealmTower.SyncRealmTowerInfo(curPlayer)
+ GameWorld.DebugAnswer(curPlayer, "境界塔层设置 floorID=%s" % floorID)
+ return
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_RealmTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_RealmTower.py
new file mode 100644
index 0000000..25a083f
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_RealmTower.py
@@ -0,0 +1,310 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GameWorldLogic.FBProcess.GameLogic_RealmTower
+#
+# @todo:境界塔
+# @author hxp
+# @date 2023-10-25
+# @version 1.0
+#
+# 详细描述: 境界塔
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2023-10-25 01:30"""
+#-------------------------------------------------------------------------------
+
+import FBCommon
+import GameWorld
+import IPY_GameWorld
+import PlayerControl
+import NetPackCommon
+import NPCCustomRefresh
+import GameWorldProcess
+import ChPyNetSendPack
+import ItemControler
+import IpyGameDataPY
+import ChConfig
+import ChPlayer
+import GameObj
+
+FBDict_Floor = 'FBDict_Floor' # 副本关卡
+
+# 副本通用配置
+(
+Def_PrepareTime, # 每关准备时间,秒
+Def_FightTime, # 每关战斗时间,秒
+Def_ExitTime, # 退出时间, 秒
+) = range(3)
+
+# 副本状态
+(
+FB_State_Open, # 副本开启
+FB_State_FightPrepare, # 战斗准备时间
+FB_State_Fighting, # 战斗
+FB_State_FreeTime, # 活动结束准备(胜利/失败)
+FB_State_Close, # 关闭副本
+) = range(5)
+
+def __GetFBTimelCfg(): return FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_RealmTower)
+
+def GetTowerIpyData(floor): return IpyGameDataPY.GetIpyGameData("RealmTower", floor)
+
+def OnFBPlayerOnLogin(curPlayer):
+ SyncRealmTowerInfo(curPlayer)
+ return
+
+def SyncRealmTowerInfo(curPlayer):
+ clientPack = ChPyNetSendPack.tagMCRealmTowerInfo()
+ clientPack.Clear()
+ clientPack.Floor = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealmTowerFloor)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
+def OnEnterFBEvent(curPlayer, mapID, lineId, tick):
+ nextFloorID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealmTowerFloor) + 1
+ return __CheckCanChallenge(curPlayer, nextFloorID)
+
+## 检查可否进行挑战
+def __CheckCanChallenge(curPlayer, floorID):
+ playerID = curPlayer.GetPlayerID()
+ ipyData = GetTowerIpyData(floorID)
+ if not ipyData:
+ GameWorld.ErrLog("境界塔层不存在: floorID=%s" % floorID, playerID)
+ return False
+
+ curFloorID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealmTowerFloor)
+ if floorID <= curFloorID:
+ GameWorld.DebugLog("该境界塔层已过关: floorID=%s" % floorID, playerID)
+ return False
+
+ if floorID > curFloorID + 1:
+ GameWorld.DebugLog("上一层未过关: floorID=%s > curFloorID=%s+1" % (floorID, curFloorID), playerID)
+ return False
+
+ if curPlayer.GetOfficialRank() < ipyData.GetNeedRealmLV():
+ GameWorld.DebugLog("该境界塔层所需境界不足: floorID=%s,NeedRealmLV=%s" % (floorID, ipyData.GetNeedRealmLV()), playerID)
+ return False
+
+ return True
+
+def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick):
+ return ipyEnterPosInfo
+
+def OnChangeMapAsk(ask, tick):
+ return IPY_GameWorld.cmeAccept
+
+def DoEnterFB(curPlayer, tick):
+ gameFB = GameWorld.GetGameFB()
+ fbStep = gameFB.GetFBStep()
+
+ if fbStep == FB_State_FightPrepare:
+ notify_tick = __GetFBTimelCfg()[Def_PrepareTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
+ curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, max(notify_tick, 0), True)
+
+ elif fbStep == FB_State_Fighting:
+ notify_tick = __GetFBTimelCfg()[Def_FightTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
+ curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, max(notify_tick, 0), True)
+
+ elif fbStep > FB_State_Fighting:
+ PlayerControl.PlayerLeaveFB(curPlayer)
+ return
+
+ # 不做处理,有副本行为客户端发包选择挑战关卡
+ return
+
+def OnCloseFB(tick):
+ return
+
+def DoExitFB(curPlayer, tick):
+ # 玩家退出默认关闭副本
+ GameWorldProcess.CloseFB(tick)
+ return
+
+def OnProcess(tick):
+ gameFB = GameWorld.GetGameFB()
+ fbStep = gameFB.GetFBStep()
+
+ if fbStep == FB_State_FightPrepare:
+ __DoLogic_FightPrepare(tick)
+ elif fbStep == FB_State_Fighting:
+ __DoLogic_Fighting(tick)
+ elif fbStep == FB_State_FreeTime:
+ __DoLogic_FreeTime(tick)
+ elif fbStep == FB_State_Close:
+ pass
+
+ return
+
+## 获取BossID
+def __GetRealmTowerBossID():
+ gameFB = GameWorld.GetGameFB()
+ floorID = gameFB.GetGameFBDictByKey(FBDict_Floor)
+ ipyData = GetTowerIpyData(floorID)
+ if not ipyData:
+ GameWorld.ErrLog("__GetRealmTowerBossID() can not find %s in RealmTowerNPC.txt" % floorID)
+ return 0
+ return ipyData.GetBossID()
+
+##战斗准备时间
+# @param tick 时钟
+# @return 无意义
+def __DoLogic_FightPrepare(tick):
+ gameFB = GameWorld.GetGameFB()
+
+ trialCfg = __GetFBTimelCfg()
+ if tick - gameFB.GetFBStepTick() < trialCfg[Def_PrepareTime] * 1000:
+ return
+
+ bossID = __GetRealmTowerBossID()
+ if not bossID:
+ FBCommon.DoLogic_FBKickAllPlayer()
+ return
+
+ FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttTowerTake, trialCfg[Def_FightTime] * 1000)
+
+ NPCCustomRefresh.SetNPCRefresh(FBCommon.GetFBLineRefreshNPC(ChConfig.Def_FBMapID_RealmTower, 0), [bossID])
+
+ #转入战斗
+ FBCommon.SetFBStep(FB_State_Fighting, tick)
+ return
+
+## 开始副本关卡
+def StartfloorID(curPlayer, floorID, tick):
+ if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
+ GameWorld.DebugLog("复活玩家...", curPlayer.GetPlayerID())
+ ChPlayer.PlayerRebornByType(curPlayer, ChConfig.rebornType_City, tick)
+ GameObj.SetHPFull(curPlayer)
+ FBCommon.ClearFBNPC()
+
+ gameFB = GameWorld.GetGameFB()
+ gameFB.SetGameFBDict(FBDict_Floor, floorID)
+
+ prepareTick = __GetFBTimelCfg()[Def_PrepareTime] * 1000
+
+ FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttWaitStart, prepareTick)
+ FBCommon.SetFBStep(FB_State_FightPrepare, tick)
+ helpDict = {FBCommon.Help_wheel:floorID}
+ FBCommon.Notify_FBHelp(curPlayer, helpDict)
+ GameWorld.DebugLog("StartfloorID, floorID=%s, helpDict=%s" % (floorID, str(helpDict)), curPlayer.GetPlayerID())
+ return
+
+def __DoLogic_Fighting(tick):
+ gameFB = GameWorld.GetGameFB()
+
+ #判断时间结束
+ if tick - gameFB.GetFBStepTick() < __GetFBTimelCfg()[Def_FightTime] * 1000:
+ return
+
+ floorID = gameFB.GetGameFBDictByKey(FBDict_Floor)
+ playerManager = GameWorld.GetMapCopyPlayerManager()
+ for index in xrange(playerManager.GetPlayerCount()):
+ curPlayer = playerManager.GetPlayerByIndex(index)
+ if not curPlayer:
+ continue
+ __SendRealmTowerOverInfo(curPlayer, floorID, False)
+
+ #游戏结束
+ __SetFBToFreeTime(tick)
+ return
+
+def __SetFBToFreeTime(tick):
+ FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttLeaveMap, __GetFBTimelCfg()[Def_ExitTime] * 1000)
+ FBCommon.SetFBStep(FB_State_FreeTime, tick)
+ return
+
+def __DoLogic_FreeTime(tick):
+ if tick - GameWorld.GetGameFB().GetFBStepTick() < __GetFBTimelCfg()[Def_ExitTime] * 1000:
+ return
+
+ return
+
+def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
+ gameFB = GameWorld.GetGameFB()
+ if gameFB.GetFBStep() != FB_State_Fighting:
+ return
+
+ bossID = __GetRealmTowerBossID()
+ if bossID != curNPC.GetNPCID():
+ return
+
+ floorID = gameFB.GetGameFBDictByKey(FBDict_Floor)
+
+ # 过关全服广播
+ ipyData = GetTowerIpyData(floorID)
+ if not ipyData:
+ return
+
+ #更新关卡
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealmTowerFloor, floorID)
+ GameWorld.DebugLog('更新境界塔已通关数 %s' % floorID)
+
+ # 给过关奖励
+ giveItemList = ipyData.GetRewardItemList()
+ ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList, None, ["RealmTower", False, {}])
+ prizeDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(giveItemList)}
+
+ # 过关时间
+ costTime = tick - GameWorld.GetGameFB().GetFBStepTick()
+ prizeDict[FBCommon.Over_costTime] = costTime
+ __SendRealmTowerOverInfo(curPlayer, floorID, True, prizeDict)
+
+ SyncRealmTowerInfo(curPlayer)
+
+ __SetFBToFreeTime(tick)
+ return
+
+## 发送挑战结果信息
+def __SendRealmTowerOverInfo(curPlayer, floorID, isPass, overDict={}):
+ overDict[FBCommon.Over_dataMapID] = ChConfig.Def_FBMapID_RealmTower
+ overDict[FBCommon.Over_wheel] = floorID
+ overDict[FBCommon.Over_isPass] = int(isPass)
+ GameWorld.DebugLog("__SendRealmTowerOverInfo overDict=%s" % (str(overDict)), curPlayer.GetPlayerID())
+ FBCommon.Notify_FB_Over(curPlayer, overDict)
+ return
+
+## 检查是否可攻击, 主判定不可攻击的情况,其他逻辑由外层决定
+# @param attacker 攻击方
+# @param defender 防守方
+# @return bool
+def CheckCanAttackTagObjInFB(attacker, defender):
+ gameFB = GameWorld.GetGameFB()
+ if gameFB.GetFBStep() != FB_State_Fighting:
+ return False
+ return True
+
+##玩家死亡
+def DoPlayerDead(curPlayer):
+ gameFB = GameWorld.GetGameFB()
+ floorID = gameFB.GetGameFBDictByKey(FBDict_Floor)
+ __SendRealmTowerOverInfo(curPlayer, floorID, False)
+ tick = GameWorld.GetGameWorld().GetTick()
+ #游戏结束
+ __SetFBToFreeTime(tick)
+ return
+
+## 是否副本复活
+def OnPlayerReborn():
+ return True
+
+## 副本行为
+def DoFBAction(curPlayer, actionType, actionInfo, tick):
+ # 默认为选择关卡,由客户端决定,进场及副本选关通用此行为
+ if actionInfo <= 0:
+ return
+
+ gameFB = GameWorld.GetGameFB()
+ fbStep = gameFB.GetFBStep()
+
+ if fbStep in [FB_State_FightPrepare, FB_State_Fighting]:
+ GameWorld.DebugLog("准备或战斗中, 无法变更关卡!")
+ return
+
+ floorID = actionInfo
+ if not __CheckCanChallenge(curPlayer, floorID):
+ FBCommon.DoLogic_FBKickAllPlayer()
+ return
+
+ StartfloorID(curPlayer, floorID, tick)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index e4ff915..b721f29 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -103,6 +103,13 @@
("BYTE", "AddFreePoint", 0),
),
+ "RealmTower":(
+ ("DWORD", "FloorID", 1),
+ ("WORD", "NeedRealmLV", 0),
+ ("DWORD", "BossID", 0),
+ ("list", "RewardItemList", 0),
+ ),
+
"LianTi":(
("BYTE", "LianTiLV", 1),
("list", "FixedAttrType", 0),
@@ -2326,6 +2333,21 @@
def GetExpLimit(self): return self.ExpLimit # 修为池经验上限
def GetLearnSkillIDInfo(self): return self.LearnSkillIDInfo # 学习技能ID信息 {"职业":[技能ID, ...], ...}
def GetAddFreePoint(self): return self.AddFreePoint # 增加自由属性点
+
+# 境界塔表
+class IPY_RealmTower():
+
+ def __init__(self):
+ self.FloorID = 0
+ self.NeedRealmLV = 0
+ self.BossID = 0
+ self.RewardItemList = []
+ return
+
+ def GetFloorID(self): return self.FloorID # 层
+ def GetNeedRealmLV(self): return self.NeedRealmLV # 所需境界
+ def GetBossID(self): return self.BossID # BossID
+ def GetRewardItemList(self): return self.RewardItemList # 奖励物品列表
# 境界炼体属性表
class IPY_LianTi():
@@ -6726,6 +6748,8 @@
self.ipyRealmXXZLLen = len(self.ipyRealmXXZLCache)
self.ipyRealmCache = self.__LoadFileData("Realm", IPY_Realm)
self.ipyRealmLen = len(self.ipyRealmCache)
+ self.ipyRealmTowerCache = self.__LoadFileData("RealmTower", IPY_RealmTower)
+ self.ipyRealmTowerLen = len(self.ipyRealmTowerCache)
self.ipyLianTiCache = self.__LoadFileData("LianTi", IPY_LianTi)
self.ipyLianTiLen = len(self.ipyLianTiCache)
self.ipyGodWeaponCache = self.__LoadFileData("GodWeapon", IPY_GodWeapon)
@@ -7336,6 +7360,8 @@
def GetRealmXXZLByIndex(self, index): return self.ipyRealmXXZLCache[index]
def GetRealmCount(self): return self.ipyRealmLen
def GetRealmByIndex(self, index): return self.ipyRealmCache[index]
+ def GetRealmTowerCount(self): return self.ipyRealmTowerLen
+ def GetRealmTowerByIndex(self, index): return self.ipyRealmTowerCache[index]
def GetLianTiCount(self): return self.ipyLianTiLen
def GetLianTiByIndex(self, index): return self.ipyLianTiCache[index]
def GetGodWeaponCount(self): return self.ipyGodWeaponLen
--
Gitblit v1.8.0