新增BOSS查询功能

This commit is contained in:
admin 2026-06-18 01:11:06 +08:00
parent 93a79319c1
commit bb41234337
16 changed files with 11604 additions and 11099 deletions

View file

@ -1,71 +1,105 @@
local config = {
["邪恶之都"] = {
[1] = {
mapname = "邪恶之都",
name = "迷失洞主",
level = "S级",
Appr = 651,
},
["恶魔深渊"] = {
[2] = {
mapname = "恶魔深渊",
name = "铁血双锤",
level = "S级",
Appr = 20046,
},
["沃玛大厅"] = {
[3] = {
mapname = "沃玛大厅",
name = "远古·沃玛魔祖",
level = "S级",
Appr = 3021,
},
["归墟神殿"] = {
[4] = {
mapname = "归墟神殿",
name = "天雷魔君",
level = "S级",
Appr = 20043,
},
["祖玛大厅"] = {
[5] = {
mapname = "祖玛大厅",
name = "洪荒·祖玛教皇",
level = "S级",
Appr = 1226,
},
["玛法禁地"] = {
[6] = {
mapname = "玛法禁地",
name = "远古教皇",
level = "S级",
Appr = 20072,
},
["封魔殿"] = {
[7] = {
mapname = "封魔殿",
name = "虹魔老祖",
level = "S级",
Appr = 3033,
},
["般若神殿"] = {
[8] = {
mapname = "般若神殿",
name = "不灭君主",
level = "S级",
Appr = 20073,
},
["赤月祭坛"] = {
[9] = {
mapname = "赤月祭坛",
name = "双头老爹",
level = "S级",
Appr = 20089,
},
["洞天秘境"] = {
[10] = {
mapname = "洞天秘境",
name = "狂暴·风沙之主",
level = "S级",
Appr = 20050,
},
["奴隶之家"] = {
[11] = {
mapname = "奴隶之家",
name = "奴隶统帅",
level = "S级",
Appr = 20029,
},
["阴曹地府"] = {
[12] = {
mapname = "阴曹地府",
name = "孟婆",
level = "S级",
Appr = 20002,
},
["仙岛秘境"] = {
[13] = {
mapname = "仙岛秘境",
name = "七彩神龙",
level = "S级",
Appr = 2020,
},
["狼烟梦境"] = {
[14] = {
mapname = "狼烟梦境",
name = "雷帝",
level = "S级",
Appr = 20139,
},
["狐月秘境"] = {
[15] = {
mapname = "狐月秘境",
name = "狐月天珠",
level = "S级",
Appr = 327,
},
["狐月神殿"] = {
[16] = {
mapname = "狐月神殿",
name = "齐天至尊",
level = "S级",
Appr = 20136,
},
["先天秘境"] = {
[17] = {
mapname = "先天秘境",
name = "迷宫之主",
level = "S级",
Appr = 20012,
},
}
return config

View file

@ -1,4 +1,13 @@
---* 全局定时器
RebotOBJ.timeExCfg = {
-- BOSS查询缓存刷新每60秒
[99] = {
time = 60000,
func = function()
BOSSqueryOBJ:reloadBossCache()
end,
},
}
-- RebotOBJ.timeExCfg = {
-- -- [1] = {
-- -- time = 18000,

View file

@ -0,0 +1,103 @@
-- BOSS查询模块
-- 负责定时缓存BOSS存活状态 + 响应客户端查询请求
BOSSqueryOBJ = Up_BaseClass:new()
BOSSqueryOBJ._name = "BOSSqueryOBJ"
-- BOSS存活状态缓存
BOSSqueryOBJ.bossCache = {}
-- 配置文件
BOSSqueryOBJ.cfg = Func.require("cfg_BOSS查询")
---* 刷新BOSS缓存由全局定时器每60秒调用
function BOSSqueryOBJ:reloadBossCache()
local cache = {}
for _, info in ipairs(self.cfg) do
-- mapbossinfo 返回格式: {[1] = "怪物名#血量%#复活倒计时秒#X#Y#未知"}
-- 例: "奴隶统帅#0#10687#100#99#无" → HP=0(死亡), 10687秒后复活
-- 例: "洪荒·祖玛教皇#100#0#20#22#无" → HP=100(存活)
local monStatus = mapbossinfo(info.mapname, info.name, 0, 0)
local alive = false
local respawnTime = 0
LOGDump(monStatus,info.name)
if monStatus and type(monStatus) == "table" then
for _, v in pairs(monStatus) do
if type(v) == "string" and v ~= "" then
local parts = Func.splitString(v, "#")
-- parts[1]=怪物名, parts[2]=血量百分比, parts[3]=复活倒计时秒
local hpPercent = tonumber(parts[2]) or 0
if hpPercent > 0 then
alive = true
end
respawnTime = tonumber(parts[3]) or 0
break
end
end
end
table.insert(cache, {
map = info.mapname,
name = info.name,
level = info.level or "S级",
alive = alive,
reviveStamp = (not alive and respawnTime > 0) and (os.time() + respawnTime) or 0,
appr = info.Appr or 0,
})
end
-- -- 存活BOSS置顶
-- table.sort(cache, function(a, b)
-- if a.alive ~= b.alive then
-- return a.alive -- true在前
-- end
-- return false
-- end)
self.bossCache = cache
end
---* 获取存活BOSS数量
function BOSSqueryOBJ:getAliveCount()
local count = 0
for _, v in ipairs(self.bossCache) do
if v.alive then
count = count + 1
end
end
return count
end
BOSSqueryOBJ:reloadBossCache()
---* 客户端请求入口(由 Message.dispatch 自动调用)
---@param actor any 玩家对象
function BOSSqueryOBJ:main(actor)
-- 首次调用时缓存可能为空,立即刷新一次
if not self.bossCache or #self.bossCache == 0 then
self:reloadBossCache()
end
-- 客户端用 SL:Get_SERVER_TIME() 与 reviveStamp 自行计算剩余倒计时
Message:SubLink(actor, self._name .. "_main", {cfg = self.bossCache})
end
-- 允许客户端调用的方法白名单(安全校验)
BOSSqueryOBJ.allowFunc = {"main"}
return BOSSqueryOBJ

View file

@ -0,0 +1,66 @@
local ui = {}
local _V = function(...) return SL:GetMetaValue(...) end
local FUNCQUEUE = {}
local TAGOBJ = {}
function ui.init(parent, __data__, __update__)
if __update__ then return ui.update(__data__) end
-- Create Layer
local Layer = GUI:Node_Create(parent, "Layer", 0, 0)
GUI:setTag(Layer, -1)
-- Create bg_close
local bg_close = GUI:Layout_Create(Layer, "bg_close", 0, 0, 0, 0, false)
GUI:Layout_setBackGroundColorType(bg_close, 1)
GUI:Layout_setBackGroundColor(bg_close, "#000000")
GUI:Layout_setBackGroundColorOpacity(bg_close, 0)
GUI:setAnchorPoint(bg_close, 0.00, 0.00)
GUI:setTouchEnabled(bg_close, true)
GUI:setTag(bg_close, -1)
-- Create nd_root
local nd_root = GUI:Node_Create(Layer, "nd_root", 0, 0)
GUI:setTag(nd_root, 670)
TAGOBJ["670"] = nd_root
-- Create img_bg
local img_bg = GUI:Image_Create(nd_root, "img_bg", 0, 0, "res/custom/43/bg.png")
GUI:setChineseName(img_bg, "背景图片")
GUI:setAnchorPoint(img_bg, 0.50, 0.50)
GUI:setTouchEnabled(img_bg, true)
GUI:setTag(img_bg, -1)
-- Create btn_close
local btn_close = GUI:Button_Create(img_bg, "btn_close", 812, 496, "res/public/1900000510.png")
GUI:Button_loadTexturePressed(btn_close, "res/public/1900000511.png")
GUI:Button_setTitleText(btn_close, [[]])
GUI:Button_setTitleColor(btn_close, "#ffffff")
GUI:Button_setTitleFontSize(btn_close, 16)
GUI:Button_titleEnableOutline(btn_close, "#000000", 1)
GUI:setAnchorPoint(btn_close, 0.50, 0.50)
GUI:setTouchEnabled(btn_close, true)
GUI:setTag(btn_close, -1)
-- Create tableView
local tableView = GUI:TableView_Create(img_bg, "tableView", 54, 42, 500, 390, 1, 498, 56, 12)
GUI:setAnchorPoint(tableView, 0.00, 0.00)
GUI:setTouchEnabled(tableView, true)
GUI:setTag(tableView, 0)
-- Create boss_model_node
local boss_model_node = GUI:Node_Create(img_bg, "boss_model_node", 568, 100)
GUI:setContentSize(boss_model_node, 200, 280)
GUI:setAnchorPoint(boss_model_node, 0.00, 0.00)
GUI:setTag(boss_model_node, -1)
ui.update(__data__)
return Layer
end
function ui.update(data)
for _, func in pairs(FUNCQUEUE) do
if func then func(data) end
end
end
return ui

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,230 @@
BOSSqueryOBJ = Up_BaseClassOBJ:new()
BOSSqueryOBJ.__cname = "BOSSqueryOBJ"
-- UI导出文件路径
BOSSqueryOBJ.UIfile = "game/Tongyong/BOSSqueryUI"
-- 数据
BOSSqueryOBJ.cfg = {}
---* 窗口创建入口
function BOSSqueryOBJ:main(arg1, arg2, arg3, data)
-- 防止重复打开
if GUI:Win_IsNotNull(self.__cname) then
GUI:Win_Close(self.__cname)
end
local parent = GUI:Win_Create(self.__cname, 0, 0, 0, 0, false, false, true, false)
if not parent then
return false
end
-- 加载UI导出文件
GUI:LoadExport(parent, self.UIfile)
self._parent = parent
self.ui = GUI:ui_delegate(parent)
-- 窗口居中
ssrUIManager:OpenAlgin(self)
-- 背景图点击关闭
GUI:addOnClickEvent(self.ui.bg_close, function()
GUI:Win_Close(self._parent)
end)
-- 关闭按钮
GUI:addOnClickEvent(self.ui.btn_close, function()
GUI:Win_Close(self._parent)
end)
-- 绑定事件
self:EventBind()
-- 接收服务端数据
if data and data.cfg then
self.cfg = data.cfg
end
-- 创建 TableView在img_bg上与Title下方对齐
self.dataList = {}
self:CreateTableView()
-- 构建数据并刷新
self:buildDataList()
if self.ui.tableView then
GUI:TableView_reloadData(self.ui.tableView)
end
end
---* 创建 TableView
function BOSSqueryOBJ:CreateTableView()
-- TableView 已在 UI 文件中创建,此处只配置回调
-- 设置行数
GUI:TableView_setTableViewCellsNumHandler(self.ui.tableView, function()
return self.dataList and #self.dataList or 0
end)
-- cell创建回调
GUI:TableView_setCellCreateEvent(self.ui.tableView, function(cellParent, idx)
local realIdx = (tonumber(idx) or 0)
local item = self.dataList[realIdx]
if not item then
return
end
self:buildCell(cellParent, item)
end)
end
---* 构建数据列表
function BOSSqueryOBJ:buildDataList()
local cfg = self.cfg or {}
self.dataList = {}
for i, v in ipairs(cfg) do
-- 根据绝对复活时间戳计算剩余秒数
local respawnTime = 0
local reviveStamp = v.reviveStamp or 0
if not v.alive and reviveStamp > 0 then
local now = SL:GetValue("SERVER_TIME") or 0
respawnTime = math.max(0, reviveStamp - now)
end
local item = {
idx = i,
map = v.map or "",
name = v.name or "",
level = v.level or "S级",
alive = v.alive or false,
respawnTime = respawnTime,
appr = v.appr or 0,
}
table.insert(self.dataList, item)
end
end
---* 构建每行UI
function BOSSqueryOBJ:buildCell(cellParent, item)
-- cellParent会被复用先清空
GUI:removeAllChildren(cellParent)
-- 行背景图片 (cell宽498, 高56, 垂直居中 y=28)
local cell_bg = GUI:Image_Create(cellParent, "cell_bg_" .. item.idx, 0, 0, "res/custom/43/3.png")
GUI:setTouchEnabled(cell_bg, true)
GUI:setSwallowTouches(cell_bg, false)
-- cell点击事件
GUI:addOnClickEvent(cell_bg, function()
self.selectedIdx = item.idx
GUI:TableView_reloadDataEx(self.ui.tableView)
self:showBossModel(item)
end)
-- 地图名称
local text_map = GUI:Text_Create(cell_bg, "text_map_" .. item.idx, 64, 28, 15, "#CCAA66", item.map)
GUI:setAnchorPoint(text_map, 0.50, 0.50)
-- BOSS名称
local text_name = GUI:Text_Create(cell_bg, "text_name_" .. item.idx, 190, 28, 16, "#FFFFFF", item.name)
GUI:setAnchorPoint(text_name, 0.50, 0.50)
GUI:Text_enableOutline(text_name, "#000000", 1)
-- 等级标签
local levelColor = "#FF4444"
if item.level == "S级" then
levelColor = "#FF4444"
elseif item.level == "A级" then
levelColor = "#FF8800"
elseif item.level == "B级" then
levelColor = "#FFCC00"
end
local text_level = GUI:Text_Create(cell_bg, "text_level_" .. item.idx, 380, 28, 15, levelColor, item.level)
GUI:setAnchorPoint(text_level, 0.00, 0.50)
GUI:Text_enableOutline(text_level, "#000000", 1)
-- 刷新状态
local refreshStr, refreshColor
if item.alive then
refreshStr = "已刷新"
refreshColor = "#33FF33"
else
refreshStr = "未刷新"
refreshColor = "#FF4444"
end
local text_refresh = GUI:Text_Create(cell_bg, "text_refresh_" .. item.idx, 420, 28, 15, refreshColor, refreshStr)
GUI:setAnchorPoint(text_refresh, 0.00, 0.50)
GUI:Text_enableOutline(text_refresh, "#000000", 1)
-- 倒计时
local text_countdown = GUI:Text_Create(cell_bg, "text_countdown_" .. item.idx, 276, 28, 15, "#FFCC00", "")
GUI:setAnchorPoint(text_countdown, 0.00, 0.50)
GUI:Text_enableOutline(text_countdown, "#000000", 1)
if not item.alive then
local respawn = item.respawnTime or 0
if respawn > 0 then
GUI:Text_COUNTDOWN(text_countdown, respawn, nil, 1)
end
end
-- 选中高亮覆盖图
if item.idx == self.selectedIdx then
GUI:Image_Create(cell_bg, "cell_select_" .. item.idx, 0, 0, "res/custom/43/4.png")
end
return cell_bg
end
---* 展示BOSS模型
function BOSSqueryOBJ:showBossModel(item)
if not self.ui.boss_model_node then
return
end
-- 清除旧模型
GUI:removeAllChildren(self.ui.boss_model_node)
local appr = item.appr or 0
if appr <= 0 then
return
end
-- 使用 Effect_Create 展示怪物模型 (effecttype=2=怪物)
local model = GUI:Effect_Create(
self.ui.boss_model_node,
"boss_model",
100, -- x (200宽节点居中)
140, -- y (280高节点居中)
2, -- effecttype: 怪物
appr, -- effectid: 怪物appr
0, -- sex
0, -- act: 待机
3, -- dir
1 -- speed
)
GUI:setScale(model, 1.0)
end
---* 事件绑定
function BOSSqueryOBJ:EventBind()
--关闭窗口
SL:RegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname, function(widgetName)
self:OnClose(widgetName)
end)
end
--关闭窗口
function BOSSqueryOBJ:OnClose(widgetName)
if widgetName == self.__cname then
self:UnRegisterEvent()
end
end
---* 注销事件
function BOSSqueryOBJ:UnRegisterEvent()
SL:UnRegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname)
end
return BOSSqueryOBJ

View file

@ -129,8 +129,14 @@ function MainProperty.main()
GUI:addOnClickEvent(MainProperty._ui["jiaoyi_btn"], function()
SL:JumpTo(ssrConstCfg.Auction)
end)
-- BOSS查询
GUI:addOnClickEvent(MainProperty._ui["bossquery"], function()
ssrMessage:SubLink("BOSSqueryOBJ_main")
end)
end
------------------------------ 快捷栏 -------------------------------------------------------
-- 初始化显示的快捷栏
function MainProperty.InitQuickUseItems()

View file

@ -1,22 +1,22 @@
MainProperty = {}
MainProperty = {}
MainProperty._path = "res/private/main-win32/"
MainProperty._path = "res/private/main-win32/"
-- 斗转星移技能ID
local DZXY_SkillID = 118
local DZXY_SkillID = 118
-- 醉酒相关是否显示
local ON_OFF_zuijiu = false
local ON_OFF_zuijiu = false
local DROP_TOTAL_TYPE_ID = 99
local FAKE_DROP_TYPE_ID = 77
local DROP_TOTAL_TYPE_ID = 99
local FAKE_DROP_TYPE_ID = 77
local PCShowSelectChannels = SL:GetValue("GAME_DATA","PCShowSelectChannels")
local PCShowSelectChannels = SL:GetValue("GAME_DATA", "PCShowSelectChannels")
local CHANNEL = GUIDefine.ChatChannel
local CHANNEL = GUIDefine.ChatChannel
-- 对应选择频道名
local CHANNEL_NAME = {
local CHANNEL_NAME = {
[CHANNEL.SHOUT] = "喊 话",
[CHANNEL.GUILD] = "行 会",
[CHANNEL.TEAM] = "组 队",
@ -27,9 +27,10 @@ local CHANNEL_NAME = {
[CHANNEL.CROSS] = "跨 服",
}
local PKType = GUIDefine.PKModeType
MainProperty._showPKTab = {PKType.HAM_ALL, PKType.HAM_PEACE, PKType.HAM_GROUP, PKType.HAM_GUILD, PKType.HAM_SHANE, PKType.HAM_NATION, PKType.HAM_CAMP}
MainProperty._pkModeStrList = {
local PKType = GUIDefine.PKModeType
MainProperty._showPKTab = { PKType.HAM_ALL, PKType.HAM_PEACE, PKType.HAM_GROUP, PKType.HAM_GUILD, PKType
.HAM_SHANE, PKType.HAM_NATION, PKType.HAM_CAMP }
MainProperty._pkModeStrList = {
[PKType.HAM_ALL] = "[全体攻击模式]",
[PKType.HAM_PEACE] = "[和平攻击模式]",
[PKType.HAM_GROUP] = "[编组攻击模式]",
@ -41,68 +42,69 @@ MainProperty._pkModeStrList = {
}
MainProperty._channelBtnTipList = {
[0] = {"综合", CHANNEL.COMMON},
[1] = {"系统", CHANNEL.SYSTEM},
[2] = {"喊话", CHANNEL.SHOUT},
[3] = {"私聊", CHANNEL.PRIVATE},
[4] = {"行会", CHANNEL.GUILD},
[5] = {"组队", CHANNEL.TEAM},
[6] = {"附近", CHANNEL.NEAR},
[7] = {"世界", CHANNEL.WORLD},
[8] = {"国家", CHANNEL.NATION}
[0] = { "综合", CHANNEL.COMMON },
[1] = { "系统", CHANNEL.SYSTEM },
[2] = { "喊话", CHANNEL.SHOUT },
[3] = { "私聊", CHANNEL.PRIVATE },
[4] = { "行会", CHANNEL.GUILD },
[5] = { "组队", CHANNEL.TEAM },
[6] = { "附近", CHANNEL.NEAR },
[7] = { "世界", CHANNEL.WORLD },
[8] = { "国家", CHANNEL.NATION }
}
local DarkState = GUIDefine.DarkState or {}
MainProperty._darkImgList = {
[DarkState.DAYTIME or 0] = "00000044.png", -- 白天
[DarkState.NIGHT or 1] = "00000046.png", -- 晚上
[DarkState.SUNRISE or 2] = "00000045.png", -- 日出
[DarkState.EVENING or 3] = "00000047.png" -- 傍晚
local DarkState = GUIDefine.DarkState or {}
MainProperty._darkImgList = {
[DarkState.DAYTIME or 0] = "00000044.png", -- 白天
[DarkState.NIGHT or 1] = "00000046.png", -- 晚上
[DarkState.SUNRISE or 2] = "00000045.png", -- 日出
[DarkState.EVENING or 3] = "00000047.png" -- 傍晚
}
MainProperty._mhpPrefixList = {"hp_", "mp_", "fhp_"}
MainProperty._mhpTagList = {"HPSFX", "MPSFX", "FHPSFX"}
MainProperty._mhpPrefixList = { "hp_", "mp_", "fhp_" }
MainProperty._mhpTagList = { "HPSFX", "MPSFX", "FHPSFX" }
MainProperty._quitTimeTips = {
MainProperty._quitTimeTips = {
[1] = "<outline size='1'><font color = '#00ff00'>%s秒后将返回选角界面</font></outline>",
[2] = "<outline size='1'><font color = '#ff0000'>%s秒后将退出游戏</font></outline>",
}
local reinAddIcons = {"1900011003.png", "1900011007.png"}
local comboShowIcons = {"01121.png", "01122.png"}
local reinAddIcons = { "1900011003.png", "1900011007.png" }
local comboShowIcons = { "01121.png", "01122.png" }
MainProperty._ChatItemWidth = 500
MainProperty._ChatItemWidth = 500
function MainProperty.Init()
MainProperty._bubbleTipsDatas = {} -- 气泡数据
MainProperty._bubbleTipsCells = {}
MainProperty._bubbleTipsDatas = {} -- 气泡数据
MainProperty._bubbleTipsCells = {}
MainProperty._quickUseCells = {}
MainProperty._quickUseCells = {}
MainProperty._chatCellCache = {}
MainProperty._isScrolling = false
MainProperty._chatCellCache = {}
MainProperty._isScrolling = false
MainProperty._pSize = {}
MainProperty._drawHWay = {} -- 绘制方式
MainProperty._pSize = {}
MainProperty._drawHWay = {} -- 绘制方式
MainProperty._dropTypeList = {}
MainProperty._dropTypeCells = {}
MainProperty._dropTypeList = {}
MainProperty._dropTypeCells = {}
MainProperty._inputIndex = 0
MainProperty._inputCache = {}
MainProperty._inputIndex = 0
MainProperty._inputCache = {}
MainProperty._channelCells = {}
MainProperty._channelCells = {}
MainProperty._channelSelect = nil
MainProperty._channelSelect = nil
MainProperty._exCellHei = 12
MainProperty._exCellHei = 12
-- 聊天间隔
local values = GUIDefineEx.ChatContentInterval
local values = GUIDefineEx.ChatContentInterval
MainProperty._listInterval, MainProperty._richVspace = values.listInterval, values.richVspace or 0
MainProperty._NGShow = tonumber(SL:GetValue("GAME_DATA", "OpenNGUI")) == 1 and SL:GetValue("IS_LEARNED_INTERNAL")
MainProperty._angerHei = GUI:getContentSize(MainProperty._ui["Panel_loadBar"]).height
MainProperty._NGShow = tonumber(SL:GetValue("GAME_DATA", "OpenNGUI")) == 1 and
SL:GetValue("IS_LEARNED_INTERNAL")
MainProperty._angerHei = GUI:getContentSize(MainProperty._ui["Panel_loadBar"]).height
end
function MainProperty.main()
@ -141,6 +143,12 @@ function MainProperty.main()
end
end)
-- BOSS查询
GUI:addOnClickEvent(MainProperty._ui["bossquery"], function()
ssrMessage:SubLink("BOSSqueryOBJ_main")
SL:PlayBtnClickAudio()
end)
MainProperty.OnRefreshPropertyShow()
MainProperty.OnUpdatePlayerPosition()
MainProperty.OnDarkStateChange()
@ -153,7 +161,11 @@ function MainProperty.main()
MainProperty.TargetData = nil --电脑PC端私聊数据
GUI:RefPosByParent(MainProperty._root)
SL:AttachTXTSUI({root = MainProperty._ui["Panel_chat_funcs"], index = SLDefine.SUIComponentTable.PCMainPropertyFuncs})
SL:AttachTXTSUI({
root = MainProperty._ui["Panel_chat_funcs"],
index = SLDefine.SUIComponentTable
.PCMainPropertyFuncs
})
end
function MainProperty.InitDropData()
@ -167,7 +179,7 @@ function MainProperty.InitDropData()
if fakeDrop and string.len(fakeDrop) > 0 then
local param = string.split(fakeDrop, "#")
if param[2] and tonumber(param[2]) == 1 and not ChatData.IsCloseFakeDrop() then
table.insert(MainProperty._dropTypeList, {id = FAKE_DROP_TYPE_ID, name = param[1]})
table.insert(MainProperty._dropTypeList, { id = FAKE_DROP_TYPE_ID, name = param[1] })
end
end
@ -177,7 +189,7 @@ function MainProperty.InitDropData()
for i, v in ipairs(list) do
local param1 = string.split(v, "#")
if param1[1] and tonumber(param1[1]) == 1 then
table.insert(MainProperty._dropTypeList, {id = tonumber(param1[2]), name = param1[3]})
table.insert(MainProperty._dropTypeList, { id = tonumber(param1[2]), name = param1[3] })
end
end
end
@ -189,7 +201,7 @@ function MainProperty.InitCustomPKMode()
for _, modeId in ipairs(typeList) do
local config = SL:GetValue("RELATION_TYPE_CONFIG", modeId)
table.insert(MainProperty._showPKTab, modeId)
MainProperty._pkModeStrList[modeId] = string.format("[%s攻击模式]" , config and config.mode_name or "")
MainProperty._pkModeStrList[modeId] = string.format("[%s攻击模式]", config and config.mode_name or "")
end
end
end
@ -208,7 +220,8 @@ function MainProperty.InitAdapet()
local sizeW = PCShowSelectChannels and GUI:getContentSize(MainProperty._ui["Button_channel"]).width or 0
local TextField_input = MainProperty._ui["TextField_input"]
GUI:setPositionX(TextField_input, 14 + sizeW)
GUI:setContentSize(TextField_input, MainProperty._ChatItemWidth - sizeW, GUI:getContentSize(TextField_input).height)
GUI:setContentSize(TextField_input, MainProperty._ChatItemWidth - sizeW,
GUI:getContentSize(TextField_input).height)
return
end
@ -257,11 +270,11 @@ end
function MainProperty.InitHPPanel()
local iconPaths = {
[CHANNEL.SYSTEM] = {"190001100.png", "190001101.png"}, -- 系统频道
[CHANNEL.SHOUT] = {"190001108.png", "190001109.png"}, -- 喊话
[CHANNEL.PRIVATE] = {"190001104.png", "190001105.png"}, -- 私聊
[CHANNEL.GUILD] = {"190001106.png", "190001107.png"}, -- 行会
[CHANNEL.WORLD] = {"190001102.png", "190001103.png"}, -- 世界
[CHANNEL.SYSTEM] = { "190001100.png", "190001101.png" }, -- 系统频道
[CHANNEL.SHOUT] = { "190001108.png", "190001109.png" }, -- 喊话
[CHANNEL.PRIVATE] = { "190001104.png", "190001105.png" }, -- 私聊
[CHANNEL.GUILD] = { "190001106.png", "190001107.png" }, -- 行会
[CHANNEL.WORLD] = { "190001102.png", "190001103.png" }, -- 世界
}
local function mainSetReceiving(channel, sender)
@ -303,26 +316,30 @@ function MainProperty.InitHPPanel()
mainSetReceiving(CHANNEL.SHOUT, sender)
end)
-- 自动喊话开关
-- 鼠标移入Tips
GUI:addMouseOverTips(MainProperty._ui["Button_chat_1"], "允许所有系统信息", {x = -10, y = -20}, {x = 1, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_chat_2"], "允许所有传音信息", {x = -10, y = -20}, {x = 1, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_chat_3"], "允许所有私聊信息", {x = -10, y = -20}, {x = 1, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_chat_4"], "允许行会聊天信息", {x = -10, y = -20}, {x = 1, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_chat_5"], "允许所有喊话消息", {x = -10, y = -20}, {x = 1, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_chat_6"], "特殊命令", {x = -10, y = -20}, {x = 1, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_chat_7"], "自动喊话开关", {x = -10, y = -20}, {x = 1, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_chat_1"], "允许所有系统信息", { x = -10, y = -20 }, { x = 1, y = 0.5 })
GUI:addMouseOverTips(MainProperty._ui["Button_chat_2"], "允许所有传音信息", { x = -10, y = -20 }, { x = 1, y = 0.5 })
GUI:addMouseOverTips(MainProperty._ui["Button_chat_3"], "允许所有私聊信息", { x = -10, y = -20 }, { x = 1, y = 0.5 })
GUI:addMouseOverTips(MainProperty._ui["Button_chat_4"], "允许行会聊天信息", { x = -10, y = -20 }, { x = 1, y = 0.5 })
GUI:addMouseOverTips(MainProperty._ui["Button_chat_5"], "允许所有喊话消息", { x = -10, y = -20 }, { x = 1, y = 0.5 })
GUI:addMouseOverTips(MainProperty._ui["Button_chat_6"], "特殊命令", { x = -10, y = -20 }, { x = 1, y = 0.5 })
GUI:addMouseOverTips(MainProperty._ui["Button_chat_7"], "自动喊话开关", { x = -10, y = -20 }, { x = 1, y = 0.5 })
if tonumber(SL:GetValue("GAME_DATA", "OpenNGUI")) == 1 then
GUI:addMouseOverTips(MainProperty._ui["Panel_dz"], function ()
GUI:addMouseOverTips(MainProperty._ui["Panel_dz"], function()
local curDZValue = SL:GetValue("CUR_ABIL_BY_ID", GUIDefine.AttTypeTable.Internal_DZValue) or 0
local maxDZValue = SL:GetValue("MAX_ABIL_BY_ID", GUIDefine.AttTypeTable.Internal_DZValue) or 0
return string.format("斗转星移值: %s/%s", curDZValue, maxDZValue)
end, {x = 0, y = 0}, {x = 0.5, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Panel_zj"], string.format("醉酒值: %s%%", 0), {x = 0, y = 0}, {x = 0.5, y = 0.5})
end, { x = 0, y = 0 }, { x = 0.5, y = 0.5 })
GUI:addMouseOverTips(MainProperty._ui["Panel_zj"], string.format("醉酒值: %s%%", 0), { x = 0, y = 0 },
{ x = 0.5, y = 0.5 })
end
MainProperty.InitNGShow()
end
@ -365,7 +382,7 @@ function MainProperty.InitAutoShout()
SL:PlayBtnClickAudio()
MainProperty.OnRefreshAutoShout()
end, {channel_id = channel})
end, { channel_id = channel })
end
GUI:addOnClickEvent(btnAutoShout, function(sender)
@ -403,7 +420,15 @@ function MainProperty.OnRefreshAutoShout()
return
end
local sendData = {textType = GUIDefine.ChatTextType.NORMAL, msg = input, channel = channel, risk = 0, oriMsg = input, status = 0}
local sendData = {
textType = GUIDefine.ChatTextType.NORMAL,
msg = input,
channel = channel,
risk = 0,
oriMsg =
input,
status = 0
}
GUIFunction:SendChatMsg(sendData)
end
@ -441,10 +466,13 @@ function MainProperty.InitNGShow()
local pSize = GUI:getContentSize(MainProperty._ui["Panel_loadBar"])
local curHeiPer = pSize.height / MainProperty._angerHei
MainProperty._angerHei = 136
GUI:setContentSize(MainProperty._ui["Image_laodBarbg"], GUI:getContentSize(MainProperty._ui["Image_laodBarbg"]).width, MainProperty._angerHei)
GUI:setContentSize(MainProperty._ui["Image_laodBarbg"],
GUI:getContentSize(MainProperty._ui["Image_laodBarbg"]).width, MainProperty._angerHei)
GUI:setContentSize(MainProperty._ui["Panel_loadBar"], pSize.width, math.floor(MainProperty._angerHei * curHeiPer))
GUI:setContentSize(MainProperty._ui["Image_loadbar1"], GUI:getContentSize(MainProperty._ui["Image_loadbar1"]).width, MainProperty._angerHei)
GUI:setContentSize(MainProperty._ui["Image_loadbar2"], GUI:getContentSize(MainProperty._ui["Image_loadbar2"]).width, MainProperty._angerHei)
GUI:setContentSize(MainProperty._ui["Image_loadbar1"],
GUI:getContentSize(MainProperty._ui["Image_loadbar1"]).width, MainProperty._angerHei)
GUI:setContentSize(MainProperty._ui["Image_loadbar2"],
GUI:getContentSize(MainProperty._ui["Image_loadbar2"]).width, MainProperty._angerHei)
end
end
@ -459,7 +487,7 @@ function MainProperty.InitActPanel()
GUI:delayTouchEnabled(sender)
SL:RequestCallOrOutHero()
end)
GUI:addMouseOverTips(MainProperty._ui["Button_herostate"], "召唤英雄", {x = -20, y = 0}, {x = 0.5, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_herostate"], "召唤英雄", { x = -20, y = 0 }, { x = 0.5, y = 0.5 })
GUI:addOnClickEvent(MainProperty._ui["Button_heroinfo"], function()
if SL:GetValue("HERO_IS_ALIVE") then
@ -471,7 +499,7 @@ function MainProperty.InitActPanel()
end
end
end)
GUI:addMouseOverTips(MainProperty._ui["Button_heroinfo"], "英雄状态", {x = 0, y = 0}, {x = 0.5, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_heroinfo"], "英雄状态", { x = 0, y = 0 }, { x = 0.5, y = 0.5 })
GUI:delayTouchEnabled(MainProperty._ui["Button_herobag"], 0.5)
GUI:addOnClickEvent(MainProperty._ui["Button_herobag"], function()
@ -484,7 +512,7 @@ function MainProperty.InitActPanel()
end
end
end)
GUI:addMouseOverTips(MainProperty._ui["Button_herobag"], "英雄包裹", {x = 20, y = 0}, {x = 0.5, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_herobag"], "英雄包裹", { x = 20, y = 0 }, { x = 0.5, y = 0.5 })
else
GUI:setVisible(MainProperty._ui["Image_laodBarbg"], false)
GUI:setVisible(MainProperty._ui["Button_herostate"], false)
@ -500,11 +528,11 @@ function MainProperty.InitActPanel()
if isOpen and GUI:GetWindow(nil, UIConst.LAYERID.PlayerMainGUI) then
UIOperator:CloseMyPlayerUI()
else
UIOperator:OpenMyPlayerUI({page = UIConst.LayerTable.PlayerEquip})
UIOperator:OpenMyPlayerUI({ page = UIConst.LayerTable.PlayerEquip })
end
SL:PlayBtnClickAudio()
end)
GUI:addMouseOverTips(MainProperty._ui["Button_role"], "状态信息(F10)", {x = 0, y = 0}, {x = 0.7, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_role"], "状态信息(F10)", { x = 0, y = 0 }, { x = 0.7, y = 0.5 })
-- 背包
GUI:addOnClickEvent(MainProperty._ui["Button_bag"], function()
@ -515,7 +543,7 @@ function MainProperty.InitActPanel()
end
SL:PlayBtnClickAudio()
end)
GUI:addMouseOverTips(MainProperty._ui["Button_bag"], "包裹物品(F9)", {x = 0, y = 0}, {x = 0.7, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_bag"], "包裹物品(F9)", { x = 0, y = 0 }, { x = 0.7, y = 0.5 })
-- 技能
GUI:addOnClickEvent(MainProperty._ui["Button_skill"], function()
@ -523,11 +551,11 @@ function MainProperty.InitActPanel()
if isOpen and GUI:GetWindow(nil, UIConst.LAYERID.PlayerMainGUI) then
UIOperator:CloseMyPlayerUI()
else
UIOperator:OpenMyPlayerUI({page = UIConst.LayerTable.PlayerSkill})
UIOperator:OpenMyPlayerUI({ page = UIConst.LayerTable.PlayerSkill })
end
SL:PlayBtnClickAudio()
end)
GUI:addMouseOverTips(MainProperty._ui["Button_skill"], "技能信息(F11)", {x = 0, y = 0}, {x = 0.7, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_skill"], "技能信息(F11)", { x = 0, y = 0 }, { x = 0.7, y = 0.5 })
-- 音效
GUI:addOnClickEvent(MainProperty._ui["Button_voice"], function()
@ -538,7 +566,7 @@ function MainProperty.InitActPanel()
SL:SetValue("SETTING_VALUE", SLDefine.SETTINGID.SETTING_IDX_EFFECTMUSIC, { enable and 0 or 100 })
SL:PlayBtnClickAudio()
end)
GUI:addMouseOverTips(MainProperty._ui["Button_voice"], "音效开关", {x = 0, y = 0}, {x = 0.7, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Button_voice"], "音效开关", { x = 0, y = 0 }, { x = 0.7, y = 0.5 })
-- 商店
GUI:addOnClickEvent(MainProperty._ui["Button_store"], function()
@ -574,7 +602,7 @@ function MainProperty.InitActPanel()
SL:RequestChangePKMode(nextPKMode)
end
GUI:addOnClickEvent(MainProperty._ui["Text_pkmode"], changePKMode)
GUI:addMouseOverTips(MainProperty._ui["Text_pkmode"], "点击切换", {x = 0, y = 0}, {x = 0.7, y = 0.5})
GUI:addMouseOverTips(MainProperty._ui["Text_pkmode"], "点击切换", { x = 0, y = 0 }, { x = 0.7, y = 0.5 })
-- 时钟
local function callback()
@ -606,11 +634,11 @@ function MainProperty.InitActPanel()
GUI:addMouseOverTips(
MainProperty._ui["Text_level"],
function ()
function()
return string.format("当前等级:%s", SL:GetValue("LEVEL"))
end,
{x = 0, y = -20},
{x = 0.1, y = 0.5}
{ x = 0, y = -20 },
{ x = 0.1, y = 0.5 }
)
GUI:addMouseOverTips(
MainProperty._ui["LoadingBar_exp"],
@ -620,8 +648,8 @@ function MainProperty.InitActPanel()
local per = math.min(curExp / maxExp * 100, 100)
return string.format("当前经验:%.2f%%", per)
end,
{x = 0, y = 0},
{x = 0.3, y = 0.5}
{ x = 0, y = 0 },
{ x = 0.3, y = 0.5 }
)
GUI:addMouseOverTips(
MainProperty._ui["LoadingBar_weight"],
@ -630,8 +658,8 @@ function MainProperty.InitActPanel()
local maxWeight = SL:GetValue("MAXBW")
return string.format("包裹负重:%s/%s", curWeight, maxWeight)
end,
{x = 0, y = 0},
{x = 0.3, y = 0.5}
{ x = 0, y = 0 },
{ x = 0.3, y = 0.5 }
)
end
@ -640,14 +668,14 @@ function MainProperty.InitChatInputHandler()
local TextField_input = MainProperty._ui["TextField_input"]
TextField_input._lastInput = ""
local touchEvent = function (sender, eventype)
local touchEvent = function(sender, eventype)
if eventype == 2 then
GUI:TextInput_touchDownAction(TextField_input, 2)
end
end
GUI:addOnTouchEvent(TextField_input, touchEvent)
local inputEvent = function (sender, eventType)
local inputEvent = function(sender, eventType)
if eventType == GUIDefine.TextInputEventType.SEND then
if string.len(GUI:Text_getString(MainProperty._ui["TextField_input"])) > 0 then
MainProperty.SendChatMsg()
@ -665,17 +693,17 @@ function MainProperty.InitChatInputHandler()
end
function MainProperty.InitKeyBoardEvent()
GUI:addKeyboardEvent({"KEY_SHIFT", "KEY_1"}, function()
GUI:addKeyboardEvent({ "KEY_SHIFT", "KEY_1" }, function()
GUI:Text_setString(MainProperty._ui["TextField_input"], "!")
GUI:TextInput_touchDownAction(MainProperty._ui["TextField_input"], 2)
end)
GUI:addKeyboardEvent({"KEY_SHIFT", "KEY_2"}, function()
GUI:addKeyboardEvent({ "KEY_SHIFT", "KEY_2" }, function()
GUI:Text_setString(MainProperty._ui["TextField_input"], "@")
GUI:TextInput_touchDownAction(MainProperty._ui["TextField_input"], 2)
end)
GUI:addKeyboardEvent({"KEY_SHIFT", "KEY_3"}, function()
GUI:addKeyboardEvent({ "KEY_SHIFT", "KEY_3" }, function()
GUI:Text_setString(MainProperty._ui["TextField_input"], "#")
GUI:TextInput_touchDownAction(MainProperty._ui["TextField_input"], 2)
end)
@ -687,27 +715,29 @@ function MainProperty.InitKeyBoardEvent()
-- control ↑
local function callback()
MainProperty._inputIndex = MainProperty._inputIndex > 1 and MainProperty._inputIndex - 1 or MainProperty._inputIndex
MainProperty._inputIndex = MainProperty._inputIndex > 1 and MainProperty._inputIndex - 1 or
MainProperty._inputIndex
local input = MainProperty._inputCache[MainProperty._inputIndex]
if not input then
return false
end
GUI:Text_setString(MainProperty._ui["TextField_input"], input)
end
GUI:addKeyboardEvent({"KEY_CTRL", "KEY_UP_ARROW"}, callback)
GUI:addKeyboardEvent({"KEY_RIGHT_CTRL", "KEY_UP_ARROW"}, callback)
GUI:addKeyboardEvent({ "KEY_CTRL", "KEY_UP_ARROW" }, callback)
GUI:addKeyboardEvent({ "KEY_RIGHT_CTRL", "KEY_UP_ARROW" }, callback)
-- control ↓
local function callback()
MainProperty._inputIndex = MainProperty._inputIndex < #MainProperty._inputCache and MainProperty._inputIndex + 1 or MainProperty._inputIndex
MainProperty._inputIndex = MainProperty._inputIndex < #MainProperty._inputCache and MainProperty._inputIndex + 1 or
MainProperty._inputIndex
local input = MainProperty._inputCache[MainProperty._inputIndex]
if not input then
return false
end
GUI:Text_setString(MainProperty._ui["TextField_input"], input)
end
GUI:addKeyboardEvent({"KEY_CTRL", "KEY_DOWN_ARROW"}, callback)
GUI:addKeyboardEvent({"KEY_RIGHT_CTRL", "KEY_DOWN_ARROW"}, callback)
GUI:addKeyboardEvent({ "KEY_CTRL", "KEY_DOWN_ARROW" }, callback)
GUI:addKeyboardEvent({ "KEY_RIGHT_CTRL", "KEY_DOWN_ARROW" }, callback)
end
----------------------------- 聊天相关 -------------------------------------------------------
@ -736,7 +766,8 @@ function MainProperty.InitChatPanel()
GUI:ListView_addMouseScrollPercent(MainProperty._ui["ListView_chat"])
-- 频道切换开关开启
local isOpen = SL:GetValue("GAME_DATA", "PCSwitchChannelShow") and SL:GetValue("GAME_DATA", "PCSwitchChannelShow") == 1
local isOpen = SL:GetValue("GAME_DATA", "PCSwitchChannelShow") and
SL:GetValue("GAME_DATA", "PCSwitchChannelShow") == 1
GUI:setVisible(MainProperty._ui["Panel_channel"], isOpen)
local receiveChannel = ChatData.GetReceiveChannel()
@ -751,13 +782,14 @@ function MainProperty.InitChatPanel()
MainProperty.UpdateReceiving()
end)
if isOpen then
GUI:addMouseOverTips(btnChannel, MainProperty._channelBtnTipList[i][1], {x = -10, y = -20}, {x = 1, y = 0.5})
GUI:addMouseOverTips(btnChannel, MainProperty._channelBtnTipList[i][1], { x = -10, y = -20 },
{ x = 1, y = 0.5 })
end
end
end
GUI:setVisible(MainProperty._ui["Button_channel"], PCShowSelectChannels and true or false)
GUI:addOnClickEvent(MainProperty._ui["Button_channel"], function ()
GUI:addOnClickEvent(MainProperty._ui["Button_channel"], function()
if GUI:getVisible(MainProperty._ui["Panel_channel_s"]) then
MainProperty.HideChannels()
else
@ -903,8 +935,10 @@ function MainProperty.InitChatPanel()
height = math.max(minHeight, height)
height = math.round(height)
GUI:setContentSize(MainProperty._ui["Panel_chat"], GUI:getContentSize(MainProperty._ui["Panel_chat"]).width, height)
GUI:setContentSize(MainProperty._ui["Image_chat_bg"], GUI:getContentSize(MainProperty._ui["Image_chat_bg"]).width, height)
GUI:setContentSize(MainProperty._ui["Panel_chat"], GUI:getContentSize(MainProperty._ui["Panel_chat"]).width,
height)
GUI:setContentSize(MainProperty._ui["Image_chat_bg"],
GUI:getContentSize(MainProperty._ui["Image_chat_bg"]).width, height)
GUI:setPositionY(MainProperty._ui["Panel_chat_touch"], height)
GUI:setPositionY(MainProperty._ui["Panel_chat_funcs"], height - 9)
@ -931,12 +965,12 @@ end
function MainProperty.SendChatMsg(msg, channelID)
local TextField_input = MainProperty._ui["TextField_input"]
msg = msg or GUI:Text_getString(TextField_input)
channelID = channelID or MainProperty._channelSelect
msg = msg or GUI:Text_getString(TextField_input)
channelID = channelID or MainProperty._channelSelect
-- 换掉空格
msg = string.trim(msg)
msg = string.gsub(msg, "[\t\n\r]", "")
msg = string.trim(msg)
msg = string.gsub(msg, "[\t\n\r]", "")
GUI:Text_setString(TextField_input, "")
@ -952,11 +986,21 @@ function MainProperty.SendChatMsg(msg, channelID)
MainProperty._inputIndex = #MainProperty._inputCache + 1
-- 发送 PC端根据消息内容决定频道
local oriMsg = ext_param and ext_param.originStr
local sensitiveWords = ext_param and ext_param.replacedWords
local status = ext_param and ext_param.status
local uid = MainProperty.TargetData and MainProperty.TargetData.uid
local sendData = {textType = GUIDefine.ChatTextType.NORMAL, msg = input, channel = channelID, risk = risk_param, oriMsg = oriMsg, sensitiveWords = sensitiveWords, status = status,uid = uid}
local oriMsg = ext_param and ext_param.originStr
local sensitiveWords = ext_param and ext_param.replacedWords
local status = ext_param and ext_param.status
local uid = MainProperty.TargetData and MainProperty.TargetData.uid
local sendData = {
textType = GUIDefine.ChatTextType.NORMAL,
msg = input,
channel = channelID,
risk =
risk_param,
oriMsg = oriMsg,
sensitiveWords = sensitiveWords,
status = status,
uid = uid
}
GUIFunction:SendChatMsg(sendData)
end
@ -1002,14 +1046,14 @@ function MainProperty.SendChatMsg(msg, channelID)
toSendMsg(str, risk_param, ext_param)
end
local data = {channel_id = channel}
local data = { channel_id = channel }
if channel == CHANNEL.PRIVATE then
local target = ChatData.GetTargets()[1]
if target then
local actorID = target.uid
data.to_role_level = SL:GetValue("ACTOR_LEVEL", actorID)
data.to_role_id = actorID
data.to_role_name = target.name
local actorID = target.uid
data.to_role_level = SL:GetValue("ACTOR_LEVEL", actorID)
data.to_role_id = actorID
data.to_role_name = target.name
end
msg = content
end
@ -1052,7 +1096,7 @@ function MainProperty.PushChatCell(cell)
-- 超出限制,移除先放入的
local ListView_chat = MainProperty._ui["ListView_chat"]
GUI:ListView_pushBackCustomItem(ListView_chat, cell)
if #GUI:ListView_getItems(ListView_chat) >GUIDefine.ChatConfig.LIMIT_COUNT_PC then
if #GUI:ListView_getItems(ListView_chat) > GUIDefine.ChatConfig.LIMIT_COUNT_PC then
GUI:ListView_removeItemByIndex(ListView_chat, 0)
end
end
@ -1076,6 +1120,7 @@ function MainProperty.SelectChannel(channel)
MainProperty.OnPrivateChatWithTarget(target)
end
end
function MainProperty.CreateChannelCell(id)
local widget = GUI:Widget_Create(-1, "Widget_" .. id, 0, 0, 0, 0)
GUI:LoadExport(widget, "main/main_channel_cell_win32")
@ -1098,7 +1143,7 @@ function MainProperty.ShowChannels()
end
MainProperty._channelCells = {}
local channels = {CHANNEL.NEAR}
local channels = { CHANNEL.NEAR }
if PCShowSelectChannels and string.len(PCShowSelectChannels) > 0 then
local list = string.split(PCShowSelectChannels, "#")
for _, index in ipairs(list) do
@ -1160,10 +1205,11 @@ function MainProperty.OnRefreshChannelSelect()
end
function MainProperty.RefreshListView(byData)
local cellSize = {width = MainProperty._ChatItemWidth, height = MainProperty._exCellHei}
local count = byData and #ChatData.GetChatExItemsData() or #GUI:ListView_getItems(MainProperty._ui["ListView_chat_ex"])
local margin = GUI:ListView_getItemsMargin(MainProperty._ui["ListView_chat_ex"])
local exHei = (cellSize.height * count) + (count - 1) * margin
local cellSize = { width = MainProperty._ChatItemWidth, height = MainProperty._exCellHei }
local count = byData and #ChatData.GetChatExItemsData() or
#GUI:ListView_getItems(MainProperty._ui["ListView_chat_ex"])
local margin = GUI:ListView_getItemsMargin(MainProperty._ui["ListView_chat_ex"])
local exHei = (cellSize.height * count) + (count - 1) * margin
GUI:setContentSize(MainProperty._ui["ListView_chat_ex"], MainProperty._ChatItemWidth, exHei)
local panelHei = GUI:getContentSize(MainProperty._ui["Panel_chat"]).height
@ -1247,19 +1293,19 @@ function MainProperty.CheckChatExNotice()
return false
end
data.Label = data.Label or ""
data.Y = data.Y or 0
data.Count = data.Count or 1
data.FColor = data.FColor or 255
data.BColor = data.BColor or 255
data.SendNameTemp = data.SendName or ""
data.Label = data.Label or ""
data.Y = data.Y or 0
data.Count = data.Count or 1
data.FColor = data.FColor or 255
data.BColor = data.BColor or 255
data.SendNameTemp = data.SendName or ""
local FColorHex = SL:GetHexColorByStyleId(data.FColor)
local BColorHex = SL:GetHexColorByStyleId(data.BColor)
local BColorEnable = data.BColor ~= -1
local capacitySize = {width = MainProperty._ChatItemWidth, height = MainProperty._exCellHei}
local FColorHex = SL:GetHexColorByStyleId(data.FColor)
local BColorHex = SL:GetHexColorByStyleId(data.BColor)
local BColorEnable = data.BColor ~= -1
local capacitySize = { width = MainProperty._ChatItemWidth, height = MainProperty._exCellHei }
local layout = GUI:Layout_Create(-1, "layout", 0, 0, capacitySize.width, capacitySize.height)
local layout = GUI:Layout_Create(-1, "layout", 0, 0, capacitySize.width, capacitySize.height)
if BColorEnable then
GUI:Layout_setBackGroundColor(layout, FColorHex)
GUI:Layout_setBackGroundColorType(layout, 0)
@ -1269,12 +1315,12 @@ function MainProperty.CheckChatExNotice()
local scrollWidget = GUI:Widget_Create(layout, "scrollWidget", 0, 0, capacitySize.width, capacitySize.height)
local scrollAble = nil
local scrollSize = {width = 0, height = 0}
local remaining = data.Time
local Msg = SL:FixStringFormatCharacter(data.Msg)
local hasFormat = string.find(Msg,"%%")
local showName = data.SendName and (data.SendName .. ": ") or ""
local scrollAble = nil
local scrollSize = { width = 0, height = 0 }
local remaining = data.Time
local Msg = SL:FixStringFormatCharacter(data.Msg)
local hasFormat = string.find(Msg, "%%")
local showName = data.SendName and (data.SendName .. ": ") or ""
local function callback()
remaining = math.min(remaining, data.Time)
@ -1282,9 +1328,10 @@ function MainProperty.CheckChatExNotice()
local name = showName or ""
local str = name .. (hasFormat and string.format(Msg, remaining) or Msg)
local fontSize = SL:GetValue("GAME_DATA","DEFAULT_FONT_SIZE")
local fontSize = SL:GetValue("GAME_DATA", "DEFAULT_FONT_SIZE")
GUI:removeAllChildren(scrollWidget)
local richText = GUI:RichTextFCOLOR_Create(scrollWidget, "richText", 0, capacitySize.height / 2, str, 1000, fontSize, FColorHex, MainProperty._richVspace, nil, nil, {outlineSize = 0})
local richText = GUI:RichTextFCOLOR_Create(scrollWidget, "richText", 0, capacitySize.height / 2, str, 1000,
fontSize, FColorHex, MainProperty._richVspace, nil, nil, { outlineSize = 0 })
GUI:setTouchEnabled(richText, true)
GUI:setAnchorPoint(richText, 0, 0.5)
GUI:RefPosByParent(richText)
@ -1293,7 +1340,7 @@ function MainProperty.CheckChatExNotice()
end
GUI:addOnClickEvent(richText, function()
if data.SendId and data.SendName and data.SendId ~= SL:GetValue("USER_ID") then
SL:onLUAEvent(LUA_EVENT_CHAT_PRIVATE_TARGET, {name = data.SendNameTemp, uid = data.SendId})
SL:onLUAEvent(LUA_EVENT_CHAT_PRIVATE_TARGET, { name = data.SendNameTemp, uid = data.SendId })
else
MainProperty.OnFillChatInput(string.format(data.Msg, remaining))
end
@ -1318,8 +1365,9 @@ function MainProperty.CheckChatExNotice()
-- 滚动
if scrollAble then
local time = (scrollSize.width - capacitySize.width) / 50
GUI:runAction(scrollWidget,GUI:ActionRepeatForever(GUI:ActionSequence(GUI:ActionMoveTo(time, capacitySize.width - scrollSize.width, 0),
GUI:DelayTime(3), GUI:ActionMoveTo(0, 0, 0))))
GUI:runAction(scrollWidget,
GUI:ActionRepeatForever(GUI:ActionSequence(GUI:ActionMoveTo(time, capacitySize.width - scrollSize.width, 0),
GUI:DelayTime(3), GUI:ActionMoveTo(0, 0, 0))))
end
end
@ -1450,6 +1498,7 @@ function MainProperty.OnReinAttrChange()
SL:schedule(btnReinAdd, playBlink, 0.2)
end
end
---------------------------------------------------------------------------------------------
@ -1552,6 +1601,7 @@ function MainProperty.GetBubbleButtonByID(id)
end
return nil
end
---------------------------------------------------------------------------------------------
------------------------------ 自动提示 ------------------------------------------------------
@ -1626,7 +1676,7 @@ function MainProperty.OnPlayMagicBallEffect(data)
local prefix = MainProperty._mhpPrefixList[data.type + 1] or ""
local ani = GUI:Animation_Create()
local pSize = {width = 0, height = 0}
local pSize = { width = 0, height = 0 }
for i = data.beginNum, data.beginNum + data.count - 1 do
local path = string.format("res/private/mhp_ui_win32/%s%s.png", prefix, i)
if SL:IsFileExist(path) then
@ -1670,7 +1720,7 @@ function MainProperty.OnPlayMagicBallEffect(data)
GUI:setVisible(MainProperty._ui["Panel_mp_sfx"], data.type ~= 2)
GUI:setVisible(MainProperty._ui["Panel_fhp_sfx"], true)
if data.type == 0 then -- HP
if data.type == 0 then -- HP
GUI:setPosition(widget, 38 + data.offsetX, 65 + data.offsetY)
elseif data.type == 1 then -- MP
local hpPosX = GUI:getPositionX(MainProperty._ui["Panel_hp_sfx"])
@ -1724,6 +1774,7 @@ function MainProperty.RefreshSfxShowPercent()
end
end
end
---------------------------------------------------------------------------------------------
------------------------------ 内功相关 ------------------------------------------------------
@ -1776,7 +1827,8 @@ function MainProperty.OnRefreshComboShow(state)
local blink = false
local function playBlink()
blink = not blink
GUI:Image_loadTexture(MainProperty._ui["Image_ng_shan"], MainProperty._path .. comboShowIcons[blink and 2 or 1])
GUI:Image_loadTexture(MainProperty._ui["Image_ng_shan"],
MainProperty._path .. comboShowIcons[blink and 2 or 1])
end
SL:schedule(MainProperty._ui["Image_ng_shan"], playBlink, 0.2)
end
@ -1934,7 +1986,7 @@ function MainProperty.RefreshFakeDropType()
if fakeDrop and string.len(fakeDrop) > 0 then
local param = string.split(fakeDrop, "#")
if param[2] and tonumber(param[2]) == 1 then
table.insert(MainProperty._dropTypeList, 2, {id = FAKE_DROP_TYPE_ID, name = param[1]})
table.insert(MainProperty._dropTypeList, 2, { id = FAKE_DROP_TYPE_ID, name = param[1] })
needRefresh = true
end
end
@ -1944,6 +1996,7 @@ function MainProperty.RefreshFakeDropType()
MainProperty.HideDropSwitchPanel()
end
end
---------------------------------------------------------------------------------------------
------------------------------ 快捷栏 --------------------------------------------------------
@ -1965,7 +2018,7 @@ end
-- 初始化显示的快捷栏
function MainProperty.InitQuickUseItems()
local regstetMouseEvent = function (widget, item, i)
local regstetMouseEvent = function(widget, item, i)
local function addItemIntoBag(touchPos)
local state = SL:GetValue("ITEM_MOVE_STATE")
local canMove = item and GUI:getVisible(item)
@ -2000,8 +2053,8 @@ function MainProperty.InitQuickUseItems()
showNum = showNum + 1
local size = GUI:getContentSize(item)
local nodeItem = GUI:Node_Create(item, "nodeItem", size.width/2, size.height/2)
MainProperty._quickUseCells[i] = {layout = item, nodeItem = nodeItem}
local nodeItem = GUI:Node_Create(item, "nodeItem", size.width / 2, size.height / 2)
MainProperty._quickUseCells[i] = { layout = item, nodeItem = nodeItem }
local Panel_touch = GUI:Layout_Create(item, "Panel_touch", 0, 0, size.width, size.height)
GUI:setTouchEnabled(Panel_touch, true)
@ -2048,7 +2101,7 @@ function MainProperty.UpdateQuickUseItem()
local quickUseData = QuickUseData.GetQuickUseData()
for k, v in pairs(quickUseData) do
MainProperty.AddQuickUseItem({index = k, itemData = v})
MainProperty.AddQuickUseItem({ index = k, itemData = v })
end
end
@ -2102,20 +2155,27 @@ function MainProperty.AddQuickUseItem(data)
return item.OverLap
end
if item.StdMode == 2 and item.Dura > 0 then --使用次数
return item.Dura < 1000 and 1 or math.floor(item.Dura / 1000) --小于1000都为1大于1000向下取整
if item.StdMode == 2 and item.Dura > 0 then --使用次数
return item.Dura < 1000 and 1 or math.floor(item.Dura / 1000) --小于1000都为1大于1000向下取整
end
return 0
end
local itemData = data.itemData
local data = {index = itemData.Index, itemData = itemData, count = getCount(itemData), from = GUIDefine.ItemFrom.QUICK_USE, movable = true}
local data = {
index = itemData.Index,
itemData = itemData,
count = getCount(itemData),
from = GUIDefine.ItemFrom
.QUICK_USE,
movable = true
}
local item = GUI:ItemShow_Create(nodeItem, "quickCell", 0, 0, data)
GUI:setAnchorPoint(item, 0.5, 0.5)
GUI:addMouseButtonEvent(item, {
onRightUpFunc = function() SL:RequestUseItem(itemData) end,
onDoubleLFunc = function() SL:RequestUseItem(itemData) end,
onRightUpFunc = function() SL:RequestUseItem(itemData) end,
onDoubleLFunc = function() SL:RequestUseItem(itemData) end,
})
-- 延迟0.15s显示goodsitem
@ -2146,13 +2206,14 @@ function MainProperty.ChangeQuickUseItem(data)
return item.OverLap
end
if item.StdMode == 2 and item.Dura > 0 then --使用次数
return item.Dura < 1000 and 1 or math.floor(item.Dura / 1000) --小于1000都为1大于1000向下取整
if item.StdMode == 2 and item.Dura > 0 then --使用次数
return item.Dura < 1000 and 1 or math.floor(item.Dura / 1000) --小于1000都为1大于1000向下取整
end
return 0
end
GUI:ItemShow_UpdateItemCountShow(cell.item, data.itemData, getCount(data.itemData))
end
---------------------------------------------------------------------------------------------
----------------------------- 倒计时提示 -----------------------------------------------------
@ -2162,7 +2223,7 @@ function MainProperty.OnAddQuitTimeTips(data)
end
local time
local type = data.type -- 1 小退 2 大退
local type = data.type -- 1 小退 2 大退
local Node_quit_tip = MainProperty._ui["Node_quit_tip"]
if not Node_quit_tip then
@ -2176,7 +2237,8 @@ function MainProperty.OnAddQuitTimeTips(data)
GUI:removeAllChildren(Node_quit_tip)
local width = SL:GetValue("SCREEN_WIDTH")
local richText = GUI:RichText_Create(Node_quit_tip, "richtips", 0, 0, str, width, (SL:GetValue("GAME_DATA","DEFAULT_FONT_SIZE") or 16) + 1, "#ffffff")
local richText = GUI:RichText_Create(Node_quit_tip, "richtips", 0, 0, str, width,
(SL:GetValue("GAME_DATA", "DEFAULT_FONT_SIZE") or 16) + 1, "#ffffff")
GUI:setAnchorPoint(richText, 0.5, 0)
end
@ -2194,12 +2256,14 @@ function MainProperty.OnDelQuitTimeTips()
GUI:stopAllActions(Node_quit_tip)
GUI:removeAllChildren(Node_quit_tip)
end
---------------------------------------------------------------------------------------------
---------------------------- 窗体尺寸改变 ----------------------------------------------------
function MainProperty.OnWindowChange()
MainProperty.InitAdapet()
end
---------------------------------------------------------------------------------------------
-- 更新恢复聊天框未聚焦状态: 关闭Keyboard
function MainProperty.OnCloseKeyBoard()
@ -2275,10 +2339,11 @@ function MainProperty.RegisterEvent()
SL:RegisterLUAEvent(LUA_EVENT_WINDOW_CHANGE, "MainProperty", MainProperty.OnWindowChange)
SL:RegisterLUAEvent(LUA_EVENT_MAIN_CLOSE_KEYBOARD, "MainProperty", MainProperty.OnCloseKeyBoard)
SL:RegisterLUAEvent(LUA_EVENT_MAIN_PROPERTY_ON_KEY_ENTER , "MainProperty", MainProperty.handlePressedEnter)
SL:RegisterLUAEvent(LUA_EVENT_MAIN_PROPERTY_ON_KEY_ENTER, "MainProperty", MainProperty.handlePressedEnter)
SL:RegisterLUAEvent(LUA_EVENT_CHAT_PC_AUTO_SHOUT, "MainProperty", MainProperty.OnRefreshAutoShout)
end
----------------------------------------------------------------------------------------------
MainProperty.main()

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1 @@
{
"channel": 1,
"gm": 0,
"modlist": "http://list.dhsf.xqhuyu.com/testmodlist/modlist_tool_11557.txt",
"signkey": "634eff98723b31da43ed35f0dd4edf36"
}
{"gm":0,"signkey":"634eff98723b31da43ed35f0dd4edf36","oper_mode":1,"modlist":"http:\/\/list.dhsf.xqhuyu.com\/testmodlist\/modlist_tool_11557.txt","resolution":"1024x768","channel":1}

View file

@ -0,0 +1,21 @@
///key,index,Filter,HD
///Filter,CS,CS,CS
//;地图名,怪物名称,BOSS级别,怪物形象
///index,name,level,Appr
邪恶之都,迷失洞主,S级,651
恶魔深渊,铁血双锤,S级,20046
沃玛大厅,远古·沃玛魔祖,S级,3021
归墟神殿,天雷魔君,S级,20043
祖玛大厅,洪荒·祖玛教皇,S级,1226
玛法禁地,远古教皇,S级,20072
封魔殿,虹魔老祖,S级,3033
般若神殿,不灭君主,S级,20073
赤月祭坛,双头老爹,S级,20089
洞天秘境,狂暴·风沙之主,S级,20050
奴隶之家,奴隶统帅,S级,20029
阴曹地府,孟婆,S级,20002
仙岛秘境,七彩神龙,S级,2020
狼烟梦境,雷帝,S级,20139
狐月秘境,狐月天珠,S级,327
狐月神殿,齐天至尊,S级,20136
先天秘境,迷宫之主,S级,20012
1 ///key index Filter HD
2 ///Filter CS CS CS
3 //;地图名 怪物名称 BOSS级别 怪物形象
4 ///index name level Appr
5 邪恶之都 迷失洞主 S级 651
6 恶魔深渊 铁血双锤 S级 20046
7 沃玛大厅 远古·沃玛魔祖 S级 3021
8 归墟神殿 天雷魔君 S级 20043
9 祖玛大厅 洪荒·祖玛教皇 S级 1226
10 玛法禁地 远古教皇 S级 20072
11 封魔殿 虹魔老祖 S级 3033
12 般若神殿 不灭君主 S级 20073
13 赤月祭坛 双头老爹 S级 20089
14 洞天秘境 狂暴·风沙之主 S级 20050
15 奴隶之家 奴隶统帅 S级 20029
16 阴曹地府 孟婆 S级 20002
17 仙岛秘境 七彩神龙 S级 2020
18 狼烟梦境 雷帝 S级 20139
19 狐月秘境 狐月天珠 S级 327
20 狐月神殿 齐天至尊 S级 20136
21 先天秘境 迷宫之主 S级 20012

View file

@ -0,0 +1,21 @@
///key,index,Filter,HD
///Filter,CS,CS,CS
//;地图名,怪物名称,BOSS级别,怪物形象
///index,name,level,Appr
邪恶之都,迷失洞主,S级,651
恶魔深渊,铁血双锤,S级,20046
沃玛大厅,远古·沃玛魔祖,S级,3021
归墟神殿,天雷魔君,S级,20043
祖玛大厅,洪荒·祖玛教皇,S级,1226
玛法禁地,远古教皇,S级,20072
封魔殿,虹魔老祖,S级,3033
般若神殿,不灭君主,S级,20073
赤月祭坛,双头老爹,S级,20089
洞天秘境,狂暴·风沙之主,S级,20050
奴隶之家,奴隶统帅,S级,20029
阴曹地府,孟婆,S级,20002
仙岛秘境,七彩神龙,S级,2020
狼烟梦境,雷帝,S级,20139
狐月秘境,狐月天珠,S级,327
狐月神殿,齐天至尊,S级,20136
先天秘境,迷宫之主,S级,20012
1 ///key index Filter HD
2 ///Filter CS CS CS
3 //;地图名 怪物名称 BOSS级别 怪物形象
4 ///index name level Appr
5 邪恶之都 迷失洞主 S级 651
6 恶魔深渊 铁血双锤 S级 20046
7 沃玛大厅 远古·沃玛魔祖 S级 3021
8 归墟神殿 天雷魔君 S级 20043
9 祖玛大厅 洪荒·祖玛教皇 S级 1226
10 玛法禁地 远古教皇 S级 20072
11 封魔殿 虹魔老祖 S级 3033
12 般若神殿 不灭君主 S级 20073
13 赤月祭坛 双头老爹 S级 20089
14 洞天秘境 狂暴·风沙之主 S级 20050
15 奴隶之家 奴隶统帅 S级 20029
16 阴曹地府 孟婆 S级 20002
17 仙岛秘境 七彩神龙 S级 2020
18 狼烟梦境 雷帝 S级 20139
19 狐月秘境 狐月天珠 S级 327
20 狐月神殿 齐天至尊 S级 20136
21 先天秘境 迷宫之主 S级 20012

View file

@ -0,0 +1,21 @@
///key,index,Filter,HD,
///Filter,CS,CS,CS,
//;地图名,地图名,怪物名称,BOSS级别,怪物形象
///index,mapname,name,level,Appr
1,邪恶之都,迷失洞主,S级,651
2,恶魔深渊,铁血双锤,S级,20046
3,沃玛大厅,远古·沃玛魔祖,S级,3021
4,归墟神殿,天雷魔君,S级,20043
5,祖玛大厅,洪荒·祖玛教皇,S级,1226
6,玛法禁地,远古教皇,S级,20072
7,封魔殿,虹魔老祖,S级,3033
8,般若神殿,不灭君主,S级,20073
9,赤月祭坛,双头老爹,S级,20089
10,洞天秘境,狂暴·风沙之主,S级,20050
11,奴隶之家,奴隶统帅,S级,20029
12,阴曹地府,孟婆,S级,20002
13,仙岛秘境,七彩神龙,S级,2020
14,狼烟梦境,雷帝,S级,20139
15,狐月秘境,狐月天珠,S级,327
16,狐月神殿,齐天至尊,S级,20136
17,先天秘境,迷宫之主,S级,20012
1 ///key index Filter HD
2 ///Filter CS CS CS
3 //;地图名 地图名 怪物名称 BOSS级别 怪物形象
4 ///index mapname name level Appr
5 1 邪恶之都 迷失洞主 S级 651
6 2 恶魔深渊 铁血双锤 S级 20046
7 3 沃玛大厅 远古·沃玛魔祖 S级 3021
8 4 归墟神殿 天雷魔君 S级 20043
9 5 祖玛大厅 洪荒·祖玛教皇 S级 1226
10 6 玛法禁地 远古教皇 S级 20072
11 7 封魔殿 虹魔老祖 S级 3033
12 8 般若神殿 不灭君主 S级 20073
13 9 赤月祭坛 双头老爹 S级 20089
14 10 洞天秘境 狂暴·风沙之主 S级 20050
15 11 奴隶之家 奴隶统帅 S级 20029
16 12 阴曹地府 孟婆 S级 20002
17 13 仙岛秘境 七彩神龙 S级 2020
18 14 狼烟梦境 雷帝 S级 20139
19 15 狐月秘境 狐月天珠 S级 327
20 16 狐月神殿 齐天至尊 S级 20136
21 17 先天秘境 迷宫之主 S级 20012

View file

@ -1,21 +1,21 @@
///key,index,Filter,HD
///Filter,CS,CS,
//;地图名,怪物名称,BOSS级别,
///index,name,level,
邪恶之都,迷失洞主,S级,
恶魔深渊,铁血双锤,S级,
沃玛大厅,远古·沃玛魔祖,S级,
归墟神殿,天雷魔君,S级,
祖玛大厅,洪荒·祖玛教皇,S级,
玛法禁地,远古教皇,S级,
封魔殿,虹魔老祖,S级,
般若神殿,不灭君主,S级,
赤月祭坛,双头老爹,S级,
洞天秘境,狂暴·风沙之主,S级,
奴隶之家,奴隶统帅,S级,
阴曹地府,孟婆,S级,
仙岛秘境,七彩神龙,S级,
狼烟梦境,雷帝,S级,
狐月秘境,狐月天珠,S级,
狐月神殿,齐天至尊,S级,
先天秘境,迷宫之主,S级,
///key,index,Filter,HD,
///Filter,CS,CS,CS,
//;地图名,地图名,怪物名称,BOSS级别,怪物形象
///index,mapname,name,level,Appr
1,邪恶之都,迷失洞主,S级,651
2,恶魔深渊,铁血双锤,S级,20046
3,沃玛大厅,远古·沃玛魔祖,S级,3021
4,归墟神殿,天雷魔君,S级,20043
5,祖玛大厅,洪荒·祖玛教皇,S级,1226
6,玛法禁地,远古教皇,S级,20072
7,封魔殿,虹魔老祖,S级,3033
8,般若神殿,不灭君主,S级,20073
9,赤月祭坛,双头老爹,S级,20089
10,洞天秘境,狂暴·风沙之主,S级,20050
11,奴隶之家,奴隶统帅,S级,20029
12,阴曹地府,孟婆,S级,20002
13,仙岛秘境,七彩神龙,S级,2020
14,狼烟梦境,雷帝,S级,20139
15,狐月秘境,狐月天珠,S级,327
16,狐月神殿,齐天至尊,S级,20136
17,先天秘境,迷宫之主,S级,20012

1 ///key index Filter HD
2 ///Filter CS CS CS
3 //;地图名 怪物名称 地图名 BOSS级别 怪物名称 BOSS级别 怪物形象
4 ///index name mapname level name level Appr
5 邪恶之都 1 迷失洞主 邪恶之都 S级 迷失洞主 S级 651
6 恶魔深渊 2 铁血双锤 恶魔深渊 S级 铁血双锤 S级 20046
7 沃玛大厅 3 远古·沃玛魔祖 沃玛大厅 S级 远古·沃玛魔祖 S级 3021
8 归墟神殿 4 天雷魔君 归墟神殿 S级 天雷魔君 S级 20043
9 祖玛大厅 5 洪荒·祖玛教皇 祖玛大厅 S级 洪荒·祖玛教皇 S级 1226
10 玛法禁地 6 远古教皇 玛法禁地 S级 远古教皇 S级 20072
11 封魔殿 7 虹魔老祖 封魔殿 S级 虹魔老祖 S级 3033
12 般若神殿 8 不灭君主 般若神殿 S级 不灭君主 S级 20073
13 赤月祭坛 9 双头老爹 赤月祭坛 S级 双头老爹 S级 20089
14 洞天秘境 10 狂暴·风沙之主 洞天秘境 S级 狂暴·风沙之主 S级 20050
15 奴隶之家 11 奴隶统帅 奴隶之家 S级 奴隶统帅 S级 20029
16 阴曹地府 12 孟婆 阴曹地府 S级 孟婆 S级 20002
17 仙岛秘境 13 七彩神龙 仙岛秘境 S级 七彩神龙 S级 2020
18 狼烟梦境 14 雷帝 狼烟梦境 S级 雷帝 S级 20139
19 狐月秘境 15 狐月天珠 狐月秘境 S级 狐月天珠 S级 327
20 狐月神殿 16 齐天至尊 狐月神殿 S级 齐天至尊 S级 20136
21 先天秘境 17 迷宫之主 先天秘境 S级 迷宫之主 S级 20012