2349 lines
88 KiB
Lua
2349 lines
88 KiB
Lua
MainProperty = {}
|
||
|
||
MainProperty._path = "res/private/main-win32/"
|
||
|
||
-- 斗转星移技能ID
|
||
local DZXY_SkillID = 118
|
||
|
||
-- 醉酒相关是否显示
|
||
local ON_OFF_zuijiu = false
|
||
|
||
local DROP_TOTAL_TYPE_ID = 99
|
||
local FAKE_DROP_TYPE_ID = 77
|
||
|
||
local PCShowSelectChannels = SL:GetValue("GAME_DATA", "PCShowSelectChannels")
|
||
|
||
local CHANNEL = GUIDefine.ChatChannel
|
||
|
||
-- 对应选择频道名
|
||
local CHANNEL_NAME = {
|
||
[CHANNEL.SHOUT] = "喊 话",
|
||
[CHANNEL.GUILD] = "行 会",
|
||
[CHANNEL.TEAM] = "组 队",
|
||
[CHANNEL.NEAR] = "附 近",
|
||
[CHANNEL.WORLD] = "世 界",
|
||
[CHANNEL.NATION] = "国 家",
|
||
[CHANNEL.UNION] = "联 盟",
|
||
[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 = {
|
||
[PKType.HAM_ALL] = "[全体攻击模式]",
|
||
[PKType.HAM_PEACE] = "[和平攻击模式]",
|
||
[PKType.HAM_GROUP] = "[编组攻击模式]",
|
||
[PKType.HAM_GUILD] = "[行会攻击模式]",
|
||
[PKType.HAM_SHANE] = "[善恶攻击模式]",
|
||
[PKType.HAM_NATION] = "[国家攻击模式]",
|
||
[PKType.HAM_CAMP] = "[阵营攻击模式]",
|
||
[PKType.HAM_SERVER] = "[区服攻击模式]"
|
||
}
|
||
|
||
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 }
|
||
}
|
||
|
||
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._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" }
|
||
|
||
MainProperty._ChatItemWidth = 500
|
||
|
||
function MainProperty.Init()
|
||
MainProperty._bubbleTipsDatas = {} -- 气泡数据
|
||
MainProperty._bubbleTipsCells = {}
|
||
|
||
MainProperty._quickUseCells = {}
|
||
|
||
MainProperty._chatCellCache = {}
|
||
MainProperty._isScrolling = false
|
||
|
||
MainProperty._pSize = {}
|
||
MainProperty._drawHWay = {} -- 绘制方式
|
||
|
||
MainProperty._dropTypeList = {}
|
||
MainProperty._dropTypeCells = {}
|
||
|
||
MainProperty._inputIndex = 0
|
||
MainProperty._inputCache = {}
|
||
|
||
MainProperty._channelCells = {}
|
||
|
||
MainProperty._channelSelect = nil
|
||
|
||
MainProperty._exCellHei = 12
|
||
|
||
-- 聊天间隔
|
||
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
|
||
end
|
||
|
||
function MainProperty.main()
|
||
local parent = GUI:Attach_Center()
|
||
GUI:LoadExport(parent, "main/main_property_win32")
|
||
|
||
MainProperty._root = GUI:getChildByName(parent, "Main_Property")
|
||
MainProperty._ui = GUI:ui_delegate(MainProperty._root)
|
||
if not MainProperty._ui then
|
||
return false
|
||
end
|
||
|
||
MainProperty.Init()
|
||
MainProperty.InitDropData()
|
||
MainProperty.InitCustomPKMode()
|
||
|
||
MainProperty.InitHPPanel()
|
||
MainProperty.InitAutoShout()
|
||
MainProperty.InitActPanel()
|
||
MainProperty.InitChatPanel()
|
||
MainProperty.InitKeyBoardEvent()
|
||
MainProperty.InitChatInputHandler()
|
||
MainProperty.InitAutoSFXTips()
|
||
MainProperty.InitPickButton()
|
||
MainProperty.InitQuickUseShow()
|
||
|
||
-- 转生属性点分配页
|
||
GUI:addOnClickEvent(MainProperty._ui["btn_rein_add"], function()
|
||
if not GUI:GetWindow(nil, UIConst.LAYERID.ReinAttrGUI) then
|
||
if tonumber(SL:GetValue("GAME_DATA", "UIOpenMethod")) == 1 then
|
||
SL:CheckOpenLayer(SLDefine.HyperLinkID.ReinAttrPoint)
|
||
else
|
||
SL:JumpTo(SLDefine.HyperLinkID.ReinAttrPoint)
|
||
end
|
||
SL:PlayBtnClickAudio()
|
||
end
|
||
end)
|
||
|
||
-- BOSS查询
|
||
GUI:addOnClickEvent(MainProperty._ui["bossquery"], function()
|
||
ssrMessage:SubLink("BOSSqueryOBJ_main")
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
|
||
MainProperty.OnRefreshPropertyShow()
|
||
MainProperty.OnUpdatePlayerPosition()
|
||
MainProperty.OnDarkStateChange()
|
||
|
||
MainProperty.InitAdapet()
|
||
MainProperty.InitQuickUseItems()
|
||
|
||
MainProperty.RegisterEvent()
|
||
|
||
MainProperty.TargetData = nil --电脑PC端私聊数据
|
||
|
||
GUI:RefPosByParent(MainProperty._root)
|
||
SL:AttachTXTSUI({
|
||
root = MainProperty._ui["Panel_chat_funcs"],
|
||
index = SLDefine.SUIComponentTable
|
||
.PCMainPropertyFuncs
|
||
})
|
||
end
|
||
|
||
function MainProperty.InitDropData()
|
||
local dropTotalData = {
|
||
id = DROP_TOTAL_TYPE_ID,
|
||
name = "全部",
|
||
}
|
||
table.insert(MainProperty._dropTypeList, dropTotalData)
|
||
|
||
local fakeDrop = SL:GetMetaValue("GAME_DATA", "ShowFakeDropType")
|
||
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] })
|
||
end
|
||
end
|
||
|
||
local data = SL:GetValue("GAME_DATA", "DropTypeShow")
|
||
if data and string.len(data) > 0 then
|
||
local list = string.split(data, "|")
|
||
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] })
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function MainProperty.InitCustomPKMode()
|
||
local typeList = SL:GetValue("RELATION_TYPE_LIST")
|
||
if typeList and next(typeList) then
|
||
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 "")
|
||
end
|
||
end
|
||
end
|
||
|
||
function MainProperty.InitAdapet()
|
||
local screenW = SL:GetValue("SCREEN_WIDTH")
|
||
local screenH = SL:GetValue("SCREEN_HEIGHT")
|
||
|
||
GUI:setPositionX(MainProperty._root, screenW / 2)
|
||
|
||
local notAdapet = tonumber(SL:GetValue("GAME_DATA", "PCPropertyNotAdapet")) == 1
|
||
local contentWidth = GUI:getContentSize(MainProperty._ui["Panel_chat"]).width
|
||
if notAdapet then
|
||
MainProperty._ChatItemWidth = GUI:getContentSize(MainProperty._ui["ListView_chat"]).width
|
||
|
||
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)
|
||
|
||
return
|
||
end
|
||
|
||
GUI:setContentSize(MainProperty._ui["Panel_bg"], screenW, screenH)
|
||
GUI:setContentSize(MainProperty._ui["Panel_hide_drop"], screenW, screenH)
|
||
|
||
GUI:setPosition(MainProperty._ui["Panel_hp"], 0, 0)
|
||
GUI:setPosition(MainProperty._ui["Panel_act"], screenW, 0)
|
||
local hpPanelWid = GUI:getContentSize(MainProperty._ui["Panel_hp"]).width
|
||
local actPanelWid = GUI:getContentSize(MainProperty._ui["Panel_act"]).width
|
||
|
||
contentWidth = screenW - hpPanelWid - actPanelWid
|
||
local offsetX = math.floor((hpPanelWid - actPanelWid) / 2)
|
||
|
||
local Panel_chat = MainProperty._ui["Panel_chat"]
|
||
GUI:setPositionX(Panel_chat, screenW / 2 + offsetX)
|
||
GUI:setContentSize(Panel_chat, contentWidth, GUI:getContentSize(Panel_chat).height)
|
||
|
||
local Image_chat_bg = MainProperty._ui["Image_chat_bg"]
|
||
GUI:setPositionX(Image_chat_bg, contentWidth / 2)
|
||
GUI:setContentSize(Image_chat_bg, contentWidth, GUI:getContentSize(Image_chat_bg).height)
|
||
|
||
local Panel_chat_touch = MainProperty._ui["Panel_chat_touch"]
|
||
GUI:setPositionX(Panel_chat_touch, contentWidth / 2)
|
||
GUI:setContentSize(Panel_chat_touch, contentWidth, GUI:getContentSize(Panel_chat_touch).height)
|
||
|
||
local ListView_chat = MainProperty._ui["ListView_chat"]
|
||
local chatListWid = contentWidth - 28
|
||
GUI:setPositionX(ListView_chat, contentWidth / 2)
|
||
GUI:setContentSize(ListView_chat, chatListWid, GUI:getContentSize(ListView_chat).height)
|
||
|
||
local ListView_chat_ex = MainProperty._ui["ListView_chat_ex"]
|
||
GUI:setPositionX(ListView_chat_ex, contentWidth / 2)
|
||
GUI:setContentSize(ListView_chat_ex, chatListWid, GUI:getContentSize(ListView_chat_ex).height)
|
||
|
||
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, chatListWid - sizeW, GUI:getContentSize(TextField_input).height)
|
||
|
||
GUI:setPositionX(MainProperty._ui["Panel_exit_funcs"], contentWidth - 8)
|
||
|
||
MainProperty._ChatItemWidth = chatListWid
|
||
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" }, -- 世界
|
||
}
|
||
|
||
local function mainSetReceiving(channel, sender)
|
||
if not channel or not sender then
|
||
return
|
||
end
|
||
|
||
local isReceiving = ChatData.IsReceiving(channel)
|
||
ChatData.SetReceiving(channel, not isReceiving)
|
||
local path = ChatData.IsReceiving(channel) and iconPaths[channel][1] or iconPaths[channel][2]
|
||
GUI:Button_loadTextureNormal(sender, MainProperty._path .. path)
|
||
GUI:Button_loadTexturePressed(sender, MainProperty._path .. path)
|
||
SL:PlayBtnClickAudio()
|
||
end
|
||
|
||
-- 频道接收开关
|
||
-- 系统
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_chat_1"], function(sender)
|
||
mainSetReceiving(CHANNEL.SYSTEM, sender)
|
||
end)
|
||
|
||
-- 世界
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_chat_2"], function(sender)
|
||
mainSetReceiving(CHANNEL.WORLD, sender)
|
||
end)
|
||
|
||
-- 私聊
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_chat_3"], function(sender)
|
||
mainSetReceiving(CHANNEL.PRIVATE, sender)
|
||
end)
|
||
|
||
-- 行会
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_chat_4"], function(sender)
|
||
mainSetReceiving(CHANNEL.GUILD, sender)
|
||
end)
|
||
|
||
-- 喊话
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_chat_5"], function(sender)
|
||
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 })
|
||
|
||
if tonumber(SL:GetValue("GAME_DATA", "OpenNGUI")) == 1 then
|
||
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
|
||
|
||
|
||
MainProperty.InitNGShow()
|
||
end
|
||
|
||
function MainProperty.InitAutoShout()
|
||
local btnAutoShout = MainProperty._ui["Button_chat_7"]
|
||
if not btnAutoShout then
|
||
return false
|
||
end
|
||
|
||
local function checkInputContent(inputStr)
|
||
local channel = CHANNEL.SHOUT
|
||
SL:RequestCheckSensitiveWord(inputStr, 2, function(state, str, risk_param, ex_param)
|
||
-- 检测,不通过
|
||
if not state then
|
||
SL:ShowSystemTips("请不要包含敏感字或者特殊字符!")
|
||
return
|
||
end
|
||
|
||
if risk_param and risk_param ~= 0 then
|
||
SL:ShowSystemTips("请不要包含敏感字或者特殊字符!")
|
||
return
|
||
end
|
||
|
||
if ex_param then
|
||
if ex_param.status and ex_param.status ~= 0 then
|
||
SL:ShowSystemTips("请不要包含敏感字或者特殊字符!")
|
||
return
|
||
end
|
||
end
|
||
|
||
ChatData.SetAutoShoutSwitch(not ChatData.GetAutoShoutSwitch())
|
||
|
||
-- 记录自动喊话内容
|
||
ChatData.SetLocalChatDataByChannel(channel, inputStr or "")
|
||
|
||
-- 发送提示
|
||
local isOpen = ChatData.GetAutoShoutSwitch()
|
||
local msg = isOpen and "启动了自动喊话功能,聊天框中内容已记录为喊话内容" or "关闭了自动喊话功能"
|
||
SL:ShowSystemChat(msg, 0, 255)
|
||
SL:PlayBtnClickAudio()
|
||
|
||
MainProperty.OnRefreshAutoShout()
|
||
end, { channel_id = channel })
|
||
end
|
||
|
||
GUI:addOnClickEvent(btnAutoShout, function(sender)
|
||
local input = GUI:Text_getString(MainProperty._ui["TextField_input"])
|
||
checkInputContent(input)
|
||
end)
|
||
|
||
MainProperty.OnRefreshAutoShout()
|
||
end
|
||
|
||
function MainProperty.OnRefreshAutoShout()
|
||
local btnAutoShout = MainProperty._ui["Button_chat_7"]
|
||
if not btnAutoShout then
|
||
return false
|
||
end
|
||
|
||
local isAutoShout = ChatData.GetAutoShoutSwitch()
|
||
|
||
local picPath = string.format("%s/%s", MainProperty._path, isAutoShout and "190001112.png" or "190001113.png")
|
||
GUI:Button_loadTextureNormal(btnAutoShout, picPath)
|
||
GUI:Button_loadTexturePressed(btnAutoShout, picPath)
|
||
|
||
if not isAutoShout then
|
||
return GUI:stopActionByTag(btnAutoShout, 888)
|
||
end
|
||
|
||
local shoutInput = ChatData.GetLocalChatDataByChannel(CHANNEL.SHOUT)
|
||
if not shoutInput or shoutInput == "" then
|
||
return false
|
||
end
|
||
|
||
-- 自动喊话开关
|
||
local function sendAutoShoutMsg(input, channel)
|
||
if not channel or not GUIFunction:CheckAbleToSayByChannel(channel) then
|
||
return
|
||
end
|
||
|
||
local sendData = {
|
||
textType = GUIDefine.ChatTextType.NORMAL,
|
||
msg = input,
|
||
channel = channel,
|
||
risk = 0,
|
||
oriMsg =
|
||
input,
|
||
status = 0
|
||
}
|
||
GUIFunction:SendChatMsg(sendData)
|
||
end
|
||
|
||
local autoShoutCallback = function(shoutInput)
|
||
GUI:stopActionByTag(btnAutoShout, 888)
|
||
if not shoutInput or shoutInput == "" then
|
||
return false
|
||
end
|
||
|
||
if not ChatData.GetAutoShoutSwitch() then
|
||
return false
|
||
end
|
||
|
||
local action = SL:schedule(btnAutoShout, function()
|
||
-- 发送
|
||
sendAutoShoutMsg(shoutInput, CHANNEL.SHOUT)
|
||
end, ChatData.GetAutoShoutDelay())
|
||
GUI:setTag(action, 888)
|
||
|
||
sendAutoShoutMsg(shoutInput, CHANNEL.SHOUT)
|
||
end
|
||
|
||
autoShoutCallback(shoutInput)
|
||
end
|
||
|
||
function MainProperty.InitNGShow()
|
||
if SL:GetValue("GAME_DATA", "OpenNGUI") ~= 1 then
|
||
return
|
||
end
|
||
MainProperty.OnRefreshDZShow()
|
||
GUI:setVisible(MainProperty._ui["Panel_zj"], ON_OFF_zuijiu)
|
||
GUI:setVisible(MainProperty._ui["Panel_ng_show"], MainProperty._NGShow)
|
||
|
||
if MainProperty._NGShow then
|
||
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["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)
|
||
end
|
||
end
|
||
|
||
function MainProperty.InitActPanel()
|
||
-- 英雄相关
|
||
if SL:GetValue("USEHERO") then
|
||
GUI:setVisible(MainProperty._ui["Image_loadbar2"], false)
|
||
MainProperty.RefAnger(0)
|
||
|
||
GUI:delayTouchEnabled(MainProperty._ui["Button_herostate"], 0.5)
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_herostate"], function(sender)
|
||
GUI:delayTouchEnabled(sender)
|
||
SL:RequestCallOrOutHero()
|
||
end)
|
||
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
|
||
-- 打开英雄角色面板
|
||
if HeroFrame and GUI:GetWindow(nil, UIConst.LAYERID.HeroMainGUI) then
|
||
UIOperator:CloseMyHeroUI()
|
||
else
|
||
UIOperator:OpenMyHeroUI()
|
||
end
|
||
end
|
||
end)
|
||
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()
|
||
if SL:GetValue("HERO_IS_ALIVE") then
|
||
-- 打开英雄背包
|
||
if HeroBag and GUI:GetWindow(nil, UIConst.LAYERID.HeroBagLayerGUI) then
|
||
UIOperator:CloseHeroBagUI()
|
||
else
|
||
UIOperator:OpenHeroBagUI()
|
||
end
|
||
end
|
||
end)
|
||
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)
|
||
GUI:setVisible(MainProperty._ui["Button_heroinfo"], false)
|
||
GUI:setVisible(MainProperty._ui["Button_herobag"], false)
|
||
GUI:setPositionY(MainProperty._ui["Text_pkmode"], GUI:getPositionY(MainProperty._ui["Text_pkmode"]) + 10)
|
||
end
|
||
|
||
-- 功能按钮
|
||
-- 角色
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_role"], function()
|
||
local isOpen = (PlayerFrame and PlayerFrame.IsReOpen) and PlayerFrame:IsReOpen(UIConst.LayerTable.PlayerEquip)
|
||
if isOpen and GUI:GetWindow(nil, UIConst.LAYERID.PlayerMainGUI) then
|
||
UIOperator:CloseMyPlayerUI()
|
||
else
|
||
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:addOnClickEvent(MainProperty._ui["Button_bag"], function()
|
||
if tonumber(SL:GetValue("GAME_DATA", "UIOpenMethod")) == 1 then
|
||
SL:CheckOpenLayer(SLDefine.HyperLinkID.Bag)
|
||
else
|
||
SL:JumpTo(SLDefine.HyperLinkID.Bag)
|
||
end
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_bag"], "包裹物品(F9)", { x = 0, y = 0 }, { x = 0.7, y = 0.5 })
|
||
|
||
-- 技能
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_skill"], function()
|
||
local isOpen = (PlayerFrame and PlayerFrame.IsReOpen) and PlayerFrame:IsReOpen(UIConst.LayerTable.PlayerSkill)
|
||
if isOpen and GUI:GetWindow(nil, UIConst.LAYERID.PlayerMainGUI) then
|
||
UIOperator:CloseMyPlayerUI()
|
||
else
|
||
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:addOnClickEvent(MainProperty._ui["Button_voice"], function()
|
||
local value27 = SL:GetValue("SETTING_ENABLED", SLDefine.SETTINGID.SETTING_IDX_BGMUSIC) or 0
|
||
local value52 = SL:GetValue("SETTING_ENABLED", SLDefine.SETTINGID.SETTING_IDX_EFFECTMUSIC) or 0
|
||
local enable = value27 > 0 and value52 > 0
|
||
SL:SetValue("SETTING_VALUE", SLDefine.SETTINGID.SETTING_IDX_BGMUSIC, { enable and 0 or 100 })
|
||
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:addOnClickEvent(MainProperty._ui["Button_store"], function()
|
||
if tonumber(SL:GetValue("GAME_DATA", "UIOpenMethod")) == 1 then
|
||
SL:CheckOpenLayer(SLDefine.HyperLinkID.StoreHot)
|
||
else
|
||
SL:JumpTo(SLDefine.HyperLinkID.StoreHot)
|
||
end
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
|
||
-- pk模式切换
|
||
local function changePKMode()
|
||
GUI:delayTouchEnabled(MainProperty._ui["Text_pkmode"])
|
||
|
||
local canMode = {}
|
||
for _, v in ipairs(MainProperty._showPKTab) do
|
||
if SL:GetValue("PKMODE_CAN_USE", v) then
|
||
table.insert(canMode, v)
|
||
end
|
||
end
|
||
local function getPKModeIndex(pkm)
|
||
for k, v in ipairs(canMode) do
|
||
if pkm == v then
|
||
return k
|
||
end
|
||
end
|
||
return 1
|
||
end
|
||
local curPKMode = SL:GetValue("PKMODE")
|
||
local index = getPKModeIndex(curPKMode)
|
||
local nextPKMode = canMode[(index >= #canMode and 1 or index + 1)]
|
||
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 })
|
||
|
||
-- 时钟
|
||
local function callback()
|
||
local date = os.date("*t", SL:GetValue("SERVER_TIME"))
|
||
GUI:Text_setString(MainProperty._ui["Text_time"], string.format("%02d:%02d:%02d", date.hour, date.min, date.sec))
|
||
end
|
||
local timeID = SL:Schedule(callback, 1)
|
||
callback()
|
||
|
||
-- FPS 帧率
|
||
local sumFps = 0
|
||
local count = 0
|
||
SL:Schedule(
|
||
function()
|
||
sumFps = sumFps + SL:GetValue("FPS")
|
||
count = count + 1
|
||
end,
|
||
0
|
||
)
|
||
SL:Schedule(
|
||
function()
|
||
local fps = math.min(math.ceil(sumFps / count), 60)
|
||
GUI:Text_setString(MainProperty._ui["Text_FPS"], string.format("FPS:%s", fps))
|
||
sumFps = 0
|
||
count = 0
|
||
end,
|
||
0.5
|
||
)
|
||
|
||
GUI:addMouseOverTips(
|
||
MainProperty._ui["Text_level"],
|
||
function()
|
||
return string.format("当前等级:%s", SL:GetValue("LEVEL"))
|
||
end,
|
||
{ x = 0, y = -20 },
|
||
{ x = 0.1, y = 0.5 }
|
||
)
|
||
GUI:addMouseOverTips(
|
||
MainProperty._ui["LoadingBar_exp"],
|
||
function()
|
||
local curExp = SL:GetValue("EXP")
|
||
local maxExp = math.max(SL:GetValue("MAXEXP"), 1)
|
||
local per = math.min(curExp / maxExp * 100, 100)
|
||
return string.format("当前经验:%.2f%%", per)
|
||
end,
|
||
{ x = 0, y = 0 },
|
||
{ x = 0.3, y = 0.5 }
|
||
)
|
||
GUI:addMouseOverTips(
|
||
MainProperty._ui["LoadingBar_weight"],
|
||
function()
|
||
local curWeight = SL:GetValue("BW")
|
||
local maxWeight = SL:GetValue("MAXBW")
|
||
return string.format("包裹负重:%s/%s", curWeight, maxWeight)
|
||
end,
|
||
{ x = 0, y = 0 },
|
||
{ x = 0.3, y = 0.5 }
|
||
)
|
||
end
|
||
|
||
-- 监听聊天输入框
|
||
function MainProperty.InitChatInputHandler()
|
||
local TextField_input = MainProperty._ui["TextField_input"]
|
||
TextField_input._lastInput = ""
|
||
|
||
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)
|
||
if eventType == GUIDefine.TextInputEventType.SEND then
|
||
if string.len(GUI:Text_getString(MainProperty._ui["TextField_input"])) > 0 then
|
||
MainProperty.SendChatMsg()
|
||
end
|
||
elseif eventType == GUIDefine.TextInputEventType.BEGAN or eventType == GUIDefine.TextInputEventType.CHANGE then
|
||
local str = GUI:Text_getString(sender)
|
||
local target = ChatData.GetTargets()[1]
|
||
if sender._lastInput == "" and str == "/" and target then
|
||
MainProperty.OnPrivateChatWithTarget(target)
|
||
end
|
||
sender._lastInput = str
|
||
end
|
||
end
|
||
GUI:TextInput_addOnEvent(TextField_input, inputEvent)
|
||
end
|
||
|
||
function MainProperty.InitKeyBoardEvent()
|
||
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:Text_setString(MainProperty._ui["TextField_input"], "@")
|
||
GUI:TextInput_touchDownAction(MainProperty._ui["TextField_input"], 2)
|
||
end)
|
||
|
||
GUI:addKeyboardEvent({ "KEY_SHIFT", "KEY_3" }, function()
|
||
GUI:Text_setString(MainProperty._ui["TextField_input"], "#")
|
||
GUI:TextInput_touchDownAction(MainProperty._ui["TextField_input"], 2)
|
||
end)
|
||
|
||
GUI:addKeyboardEvent("KEY_SLASH", function()
|
||
GUI:Text_setString(MainProperty._ui["TextField_input"], "/")
|
||
GUI:TextInput_touchDownAction(MainProperty._ui["TextField_input"], 2)
|
||
end)
|
||
|
||
-- control ↑
|
||
local function callback()
|
||
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)
|
||
|
||
-- control ↓
|
||
local function callback()
|
||
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)
|
||
end
|
||
|
||
----------------------------- 聊天相关 -------------------------------------------------------
|
||
-- 聊天框的宽
|
||
function MainProperty.GetChatWidth()
|
||
return MainProperty._ChatItemWidth
|
||
end
|
||
|
||
function MainProperty.InitChatPanel()
|
||
if MainProperty._listInterval then
|
||
GUI:ListView_setItemsMargin(MainProperty._ui["ListView_chat"], MainProperty._listInterval)
|
||
GUI:ListView_setItemsMargin(MainProperty._ui["ListView_chat_ex"], MainProperty._listInterval)
|
||
end
|
||
|
||
-- 拖动
|
||
local function listCallback(sender, eventType)
|
||
if eventType == 9 or eventType == 10 then
|
||
local innerPos = GUI:ListView_getInnerContainerPosition(MainProperty._ui["ListView_chat"])
|
||
if innerPos.y == 0 and MainProperty._isScrolling then
|
||
MainProperty._isScrolling = false
|
||
MainProperty.ShowChatCache()
|
||
end
|
||
end
|
||
end
|
||
GUI:ListView_addOnScrollEvent(MainProperty._ui["ListView_chat"], listCallback)
|
||
GUI:ListView_addMouseScrollPercent(MainProperty._ui["ListView_chat"])
|
||
|
||
-- 频道切换开关开启
|
||
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()
|
||
for i = 0, 8 do
|
||
local btnChannel = MainProperty._ui["Button_channel_" .. i]
|
||
if btnChannel then
|
||
local channel = MainProperty._channelBtnTipList[i][2]
|
||
GUI:Button_setBright(btnChannel, channel ~= receiveChannel)
|
||
GUI:setTouchEnabled(btnChannel, channel ~= receiveChannel)
|
||
GUI:addOnClickEvent(btnChannel, function()
|
||
ChatData.SetReceiveChannel(channel)
|
||
MainProperty.UpdateReceiving()
|
||
end)
|
||
if isOpen then
|
||
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()
|
||
if GUI:getVisible(MainProperty._ui["Panel_channel_s"]) then
|
||
MainProperty.HideChannels()
|
||
else
|
||
MainProperty.ShowChannels()
|
||
end
|
||
end)
|
||
|
||
if PCShowSelectChannels then
|
||
MainProperty._channelSelect = ChatData.GetCurChannel()
|
||
local name = MainProperty._channelSelect and CHANNEL_NAME[MainProperty._channelSelect]
|
||
if name and MainProperty._ui["Text_channel"] then
|
||
GUI:Text_setString(MainProperty._ui["Text_channel"], name)
|
||
end
|
||
end
|
||
|
||
MainProperty.HideChannels()
|
||
|
||
-- 地图
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_map"], function()
|
||
if MainMiniMap.OnTabKeyExchange then
|
||
MainMiniMap.OnTabKeyExchange()
|
||
end
|
||
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_map"], "小地图(Tab)", { x = 0, y = 0 })
|
||
|
||
-- 交易
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_trade"], function(sender)
|
||
GUI:delayTouchEnabled(sender)
|
||
SL:RequestTrade()
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_trade"], "交易(T)", { x = 0, y = 0 })
|
||
|
||
-- 服务端交易开关
|
||
local tradeAble = SL:GetValue("SERVER_OPTION", SW_KEY_TRADE_DEAL) == true
|
||
GUI:setVisible(MainProperty._ui["Button_trade"], tradeAble)
|
||
if not tradeAble then
|
||
GUI:setPositionX(MainProperty._ui["Button_guild"], 41)
|
||
GUI:setPositionX(MainProperty._ui["Button_near"], 68)
|
||
GUI:setPositionX(MainProperty._ui["Button_rank"], 95)
|
||
GUI:setPositionX(MainProperty._ui["Button_private"], 122)
|
||
GUI:setPositionX(MainProperty._ui["Button_drop"], 149)
|
||
GUI:setPositionX(MainProperty._ui["btn_rein_add"], 176)
|
||
end
|
||
|
||
-- 行会
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_guild"], function()
|
||
if tonumber(SL:GetValue("GAME_DATA", "UIOpenMethod")) == 1 then
|
||
SL:CheckOpenLayer(SLDefine.HyperLinkID.Guild)
|
||
else
|
||
SL:JumpTo(SLDefine.HyperLinkID.Guild)
|
||
end
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_guild"], "行会(G)", { x = 0, y = 0 })
|
||
|
||
-- 附近
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_near"], function()
|
||
if tonumber(SL:GetValue("GAME_DATA", "UIOpenMethod")) == 1 then
|
||
SL:CheckOpenLayer(SLDefine.HyperLinkID.NearPlayer)
|
||
else
|
||
SL:JumpTo(SLDefine.HyperLinkID.NearPlayer)
|
||
end
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_near"], "附近的人", { x = 0, y = 0 })
|
||
|
||
-- 排行榜
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_rank"], function()
|
||
if tonumber(SL:GetValue("GAME_DATA", "UIOpenMethod")) == 1 then
|
||
SL:CheckOpenLayer(SLDefine.HyperLinkID.Rank)
|
||
else
|
||
SL:JumpTo(SLDefine.HyperLinkID.Rank)
|
||
end
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_rank"], "排行榜", { x = 0, y = 0 })
|
||
|
||
-- 私聊
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_private"], function()
|
||
if tonumber(SL:GetValue("GAME_DATA", "UIOpenMethod")) == 1 then
|
||
SL:CheckOpenLayer(SLDefine.HyperLinkID.PCPrivate)
|
||
else
|
||
SL:JumpTo(SLDefine.HyperLinkID.PCPrivate)
|
||
end
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_private"], "私聊记录", { x = 0, y = 0 })
|
||
|
||
-- 掉落
|
||
GUI:delayTouchEnabled(MainProperty._ui["Button_drop"])
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_drop"], function()
|
||
MainProperty.ShowDropSwitchPanel()
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_drop"], "掉落分类开关", { x = 0, y = 0 })
|
||
|
||
GUI:addOnClickEvent(MainProperty._ui["Panel_hide_drop"], function()
|
||
MainProperty.HideDropSwitchPanel()
|
||
end)
|
||
|
||
-- 小退
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_out"], function()
|
||
if tonumber(SL:GetValue("GAME_DATA", "UIOpenMethod")) == 1 then
|
||
SL:CheckOpenLayer(SLDefine.HyperLinkID.ExitToRole)
|
||
else
|
||
SL:JumpTo(SLDefine.HyperLinkID.ExitToRole)
|
||
end
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_out"], "退出角色(Alt-X)", { x = 0, y = 0 })
|
||
|
||
-- 大退
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_end"], function()
|
||
local function callback(bType, custom)
|
||
if bType == 1 then
|
||
SL:ExitGame()
|
||
end
|
||
end
|
||
local data = {}
|
||
data.str = "是否确定退出游戏"
|
||
data.btnType = 2
|
||
data.callback = callback
|
||
UIOperator:OpenCommonTipsUI(data)
|
||
SL:PlayBtnClickAudio()
|
||
end)
|
||
GUI:addMouseOverTips(MainProperty._ui["Button_end"], "退出游戏(Alt-Q)", { x = 0, y = 0 })
|
||
|
||
GUI:TextInput_setReturnType(MainProperty._ui["TextField_input"], 2)
|
||
GUI:TextInput_setInputMode(MainProperty._ui["TextField_input"], 6)
|
||
GUI:TextInput_setMaxLength(MainProperty._ui["TextField_input"], 60)
|
||
|
||
-- auto size
|
||
local minHeight = 155
|
||
local function touchCallback(sender, eventType)
|
||
local maxHeight = SL:GetValue("SCREEN_HEIGHT") - 100
|
||
if eventType == 1 then
|
||
local touchMovedPos = GUI:getTouchMovePosition(sender)
|
||
local height = touchMovedPos.y
|
||
height = math.min(maxHeight, height)
|
||
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:setPositionY(MainProperty._ui["Panel_chat_touch"], height)
|
||
GUI:setPositionY(MainProperty._ui["Panel_chat_funcs"], height - 9)
|
||
GUI:setPositionY(MainProperty._ui["Panel_exit_funcs"], height - 9)
|
||
|
||
local exContentSize = GUI:getContentSize(MainProperty._ui["ListView_chat_ex"])
|
||
local exItems = GUI:ListView_getItems(MainProperty._ui["ListView_chat_ex"])
|
||
local exHei = #exItems == 0 and 1 or exContentSize.height
|
||
local contentSize = GUI:getContentSize(MainProperty._ui["ListView_chat"])
|
||
local chatHei = height - 50 - exHei
|
||
GUI:setContentSize(MainProperty._ui["ListView_chat"], contentSize.width, chatHei)
|
||
GUI:ListView_jumpToBottom(MainProperty._ui["ListView_chat"])
|
||
|
||
GUI:setPositionY(MainProperty._ui["Panel_quick"], height - 5)
|
||
GUI:setPositionY(MainProperty._ui["ListView_chat_ex"], height - 25)
|
||
|
||
GUI:setPositionY(MainProperty._ui["Panel_auto_tips"], height + 55)
|
||
end
|
||
end
|
||
GUI:addOnTouchEvent(MainProperty._ui["Panel_chat_touch"], touchCallback)
|
||
end
|
||
|
||
-- 发送聊天数据 input:聊天内容
|
||
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 = string.trim(msg)
|
||
msg = string.gsub(msg, "[\t\n\r]", "")
|
||
|
||
GUI:Text_setString(TextField_input, "")
|
||
|
||
-- 没有输入
|
||
if string.len(msg) <= 0 then
|
||
return SL:ShowSystemTips("您还未输入任何信息!")
|
||
end
|
||
|
||
local function toSendMsg(input, risk_param, ext_param)
|
||
-- 存储到输入缓存
|
||
ChatData.AddInputCache(input)
|
||
MainProperty._inputCache = SL:CopyData(ChatData.GetInputCache())
|
||
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
|
||
}
|
||
GUIFunction:SendChatMsg(sendData)
|
||
end
|
||
|
||
local channel, content, targetName = GUIFunction:GetChannelByChatMsg(msg)
|
||
if channel then
|
||
channelID = channel
|
||
msg = content
|
||
end
|
||
|
||
-- 敏感词
|
||
if not string.find(msg, "^@.-") then
|
||
-- 后台控制不可聊天
|
||
if SL:GetValue("M2_FORBID_SAY", true) then
|
||
return false
|
||
end
|
||
|
||
local function handle_Func(state, str, risk_param, ext_param)
|
||
if not str then
|
||
return SL:ShowSystemTips("请不要包含敏感字或者特殊字符!")
|
||
end
|
||
|
||
if SL:GetValue("GAME_DATA", "OpenChatSensitiveTips") == 1 then
|
||
if not state then
|
||
SL:ShowSystemTips("请不要包含敏感字或者特殊字符!")
|
||
return
|
||
end
|
||
|
||
if risk_param and risk_param ~= 0 then
|
||
SL:ShowSystemTips("请不要包含敏感字或者特殊字符!")
|
||
return
|
||
end
|
||
|
||
if ext_param and ext_param.status and ext_param.status ~= 0 then
|
||
SL:ShowSystemTips("请不要包含敏感字或者特殊字符!")
|
||
return
|
||
end
|
||
end
|
||
|
||
if targetName then
|
||
str = string.format("/%s %s", targetName, str)
|
||
end
|
||
|
||
toSendMsg(str, risk_param, ext_param)
|
||
end
|
||
|
||
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
|
||
end
|
||
msg = content
|
||
end
|
||
if SL:GetValue("GAME_DATA", "OpenChatSensitiveTips") == 1 then
|
||
SL:RequestCheckChatIsHaveSensitive(msg, handle_Func, data)
|
||
else
|
||
SL:RequestCheckSensitiveWord(msg, 2, handle_Func, data)
|
||
end
|
||
else
|
||
toSendMsg(msg)
|
||
end
|
||
end
|
||
|
||
function MainProperty.UpdateReceiving()
|
||
local receiveChannel = ChatData.GetReceiveChannel()
|
||
-- 选中
|
||
for i = 0, 8 do
|
||
local btnChannel = MainProperty._ui["Button_channel_" .. i]
|
||
if btnChannel then
|
||
local channel = MainProperty._channelBtnTipList[i][2]
|
||
GUI:Button_setBright(btnChannel, channel ~= receiveChannel)
|
||
GUI:setTouchEnabled(btnChannel, channel ~= receiveChannel)
|
||
end
|
||
end
|
||
|
||
-- 清理
|
||
MainProperty._cache = {}
|
||
MainProperty._isScrolling = false
|
||
GUI:ListView_removeAllItems(MainProperty._ui["ListView_chat"])
|
||
|
||
-- 消息
|
||
local receiveCache = ChatData.GetPCCache()
|
||
for _, v in ipairs(receiveCache) do
|
||
MainProperty.PushChatCell(v)
|
||
end
|
||
GUI:ListView_jumpToBottom(MainProperty._ui["ListView_chat"])
|
||
end
|
||
|
||
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
|
||
GUI:ListView_removeItemByIndex(ListView_chat, 0)
|
||
end
|
||
end
|
||
|
||
function MainProperty.ShowChatCache()
|
||
-- 缓存填充
|
||
while #MainProperty._chatCellCache > 0 do
|
||
local cell = table.remove(MainProperty._chatCellCache, 1)
|
||
GUI:autoDecRef(cell)
|
||
MainProperty.PushChatCell(cell)
|
||
end
|
||
GUI:ListView_jumpToBottom(MainProperty._ui["ListView_chat"])
|
||
end
|
||
|
||
function MainProperty.SelectChannel(channel)
|
||
ChatData.SetCurChannel(channel)
|
||
MainProperty._channelSelect = channel
|
||
|
||
local target = ChatData.GetTargets()[1]
|
||
if target and ChatData.GetCurChannel() == CHANNEL.PRIVATE then
|
||
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")
|
||
local cell = GUI:getChildByName(widget, "channel_cell")
|
||
|
||
GUI:removeFromParent(cell)
|
||
return cell
|
||
end
|
||
|
||
function MainProperty.ShowChannels()
|
||
local Panel_channel_s = MainProperty._ui["Panel_channel_s"]
|
||
local p = GUI:getPosition(MainProperty._ui["Button_channel"])
|
||
GUI:setPosition(Panel_channel_s, p.x, p.y + GUI:getContentSize(MainProperty._ui["Button_channel"]).height / 2)
|
||
GUI:setVisible(Panel_channel_s, true)
|
||
|
||
local ListView_channel = MainProperty._ui["ListView_channel"]
|
||
local childs = GUI:getChildren(ListView_channel)
|
||
if #childs > 0 then
|
||
return false
|
||
end
|
||
|
||
MainProperty._channelCells = {}
|
||
local channels = { CHANNEL.NEAR }
|
||
if PCShowSelectChannels and string.len(PCShowSelectChannels) > 0 then
|
||
local list = string.split(PCShowSelectChannels, "#")
|
||
for _, index in ipairs(list) do
|
||
if index and tonumber(index) then
|
||
if tonumber(index) == CHANNEL.NEAR then
|
||
table.remove(channels, 1)
|
||
end
|
||
table.insert(channels, tonumber(index))
|
||
end
|
||
end
|
||
end
|
||
|
||
for _, id in ipairs(channels) do
|
||
while true do
|
||
if not CHANNEL_NAME[id] then
|
||
break
|
||
end
|
||
|
||
local name = CHANNEL_NAME[id]
|
||
local cell = MainProperty.CreateChannelCell(id)
|
||
GUI:Text_setString(GUI:getChildByName(cell, "Text_title"), name)
|
||
GUI:setVisible(GUI:getChildByName(cell, "Image_selected"), id == ChatData.GetCurChannel())
|
||
|
||
GUI:setTouchEnabled(cell, true)
|
||
GUI:addOnClickEvent(cell, function()
|
||
MainProperty.HideChannels()
|
||
MainProperty.SelectChannel(id)
|
||
MainProperty.OnRefreshChannelSelect()
|
||
end)
|
||
GUI:ListView_pushBackCustomItem(ListView_channel, cell)
|
||
MainProperty._channelCells[id] = cell
|
||
break
|
||
end
|
||
end
|
||
|
||
local count = #GUI:getChildren(ListView_channel)
|
||
local cellHei = count > 0 and GUI:getContentSize(GUI:getChildren(ListView_channel)[1]).height or 0
|
||
local listWid = GUI:getContentSize(ListView_channel).width
|
||
local listHei = cellHei * count
|
||
GUI:setContentSize(ListView_channel, listWid, listHei)
|
||
GUI:setContentSize(Panel_channel_s, listWid + 4, listHei + 6)
|
||
GUI:setContentSize(MainProperty._ui["Image_channel_bg"], listWid + 4, listHei + 6)
|
||
GUI:setPositionY(MainProperty._ui["Image_channel_bg"], (listHei + 6) / 2)
|
||
end
|
||
|
||
function MainProperty.HideChannels()
|
||
GUI:setVisible(MainProperty._ui["Panel_channel_s"], false)
|
||
GUI:setPositionY(MainProperty._ui["Panel_channel_s"], -300)
|
||
end
|
||
|
||
function MainProperty.OnRefreshChannelSelect()
|
||
local curChannel = ChatData.GetCurChannel()
|
||
for id, cell in pairs(MainProperty._channelCells or {}) do
|
||
GUI:setVisible(GUI:getChildByName(cell, "Image_selected"), id == curChannel)
|
||
end
|
||
|
||
local channelname = CHANNEL_NAME[curChannel]
|
||
GUI:Text_setString(MainProperty._ui["Text_channel"], channelname)
|
||
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
|
||
GUI:setContentSize(MainProperty._ui["ListView_chat_ex"], MainProperty._ChatItemWidth, exHei)
|
||
|
||
local panelHei = GUI:getContentSize(MainProperty._ui["Panel_chat"]).height
|
||
local chatHei = panelHei - 50 - exHei
|
||
GUI:setContentSize(MainProperty._ui["ListView_chat"], MainProperty._ChatItemWidth, chatHei)
|
||
GUI:ListView_jumpToBottom(MainProperty._ui["ListView_chat"])
|
||
end
|
||
|
||
function MainProperty.OnAddChatItem(cell)
|
||
-- 是否正在拖动
|
||
local listviewCells = MainProperty._ui["ListView_chat"]
|
||
if next(GUI:ListView_getItems(listviewCells)) then
|
||
local lastIdx = #GUI:ListView_getItems(listviewCells) - 1
|
||
local lastItem = GUI:ListView_getItemByIndex(listviewCells, lastIdx)
|
||
local size = GUI:getContentSize(lastItem)
|
||
local aPoint = GUI:getAnchorPoint(lastItem)
|
||
local worldPosY = GUI:getWorldPosition(lastItem).y - (size.height * aPoint.y)
|
||
local listviewY = GUI:getWorldPosition(listviewCells).y
|
||
-- 是否屏幕外
|
||
if worldPosY < listviewY then
|
||
MainProperty._isScrolling = true
|
||
end
|
||
end
|
||
|
||
if MainProperty._isScrolling then
|
||
-- 正在拖动,消息缓存
|
||
GUI:addRef(cell)
|
||
table.insert(MainProperty._chatCellCache, cell)
|
||
|
||
while #MainProperty._chatCellCache > GUIDefine.ChatConfig.LIMIT_COUNT_PC do
|
||
local cell = table.remove(MainProperty._chatCellCache, 1)
|
||
GUI:autoDecRef(cell)
|
||
end
|
||
else
|
||
MainProperty.PushChatCell(cell)
|
||
GUI:ListView_jumpToBottom(listviewCells)
|
||
end
|
||
end
|
||
|
||
function MainProperty.OnFillChatInput(str)
|
||
if str and string.len(str) > 0 then
|
||
GUI:Text_setString(MainProperty._ui["TextField_input"], str)
|
||
end
|
||
end
|
||
|
||
function MainProperty.OnPrivateChatWithTarget(data)
|
||
MainProperty.TargetData = data
|
||
GUI:Text_setString(MainProperty._ui["TextField_input"], string.format("/%s ", data.name))
|
||
end
|
||
|
||
function MainProperty.OnShowChatExNotice()
|
||
MainProperty.CheckChatExNotice()
|
||
end
|
||
|
||
function MainProperty.CheckChatExNotice()
|
||
local exList = MainProperty._ui["ListView_chat_ex"]
|
||
if not exList then
|
||
return false
|
||
end
|
||
|
||
if #GUI:ListView_getItems(exList) >= GUIDefine.ChatConfig.LIMIT_COUNT_EX then
|
||
return false
|
||
end
|
||
|
||
local chatExItems = SL:CopyData(ChatData.GetChatExItemsData())
|
||
if #chatExItems == 0 then
|
||
local oriWidth = GUI:getContentSize(exList).width
|
||
GUI:setContentSize(exList, oriWidth, 0)
|
||
return false
|
||
end
|
||
|
||
local data = chatExItems[#chatExItems]
|
||
if not data then
|
||
return false
|
||
end
|
||
|
||
data.Time = data.Time or 5
|
||
if data.Time <= 0 then
|
||
ChatData.RemoveChatExItemsData(data)
|
||
MainProperty.RefreshListView(true)
|
||
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 ""
|
||
|
||
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)
|
||
if BColorEnable then
|
||
GUI:Layout_setBackGroundColor(layout, FColorHex)
|
||
GUI:Layout_setBackGroundColorType(layout, 0)
|
||
end
|
||
GUI:ListView_pushBackCustomItem(exList, layout)
|
||
MainProperty.RefreshListView()
|
||
|
||
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 function callback()
|
||
remaining = math.min(remaining, data.Time)
|
||
ChatData.SyncChatExItemsTime(data, remaining)
|
||
|
||
local name = showName or ""
|
||
local str = name .. (hasFormat and string.format(Msg, remaining) or Msg)
|
||
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 })
|
||
GUI:setTouchEnabled(richText, true)
|
||
GUI:setAnchorPoint(richText, 0, 0.5)
|
||
GUI:RefPosByParent(richText)
|
||
if BColorEnable then
|
||
GUI:RichTextFCOLOR_setBackgroundColor(richText, BColorHex)
|
||
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 })
|
||
else
|
||
MainProperty.OnFillChatInput(string.format(data.Msg, remaining))
|
||
end
|
||
end)
|
||
|
||
if not scrollAble then
|
||
scrollSize = GUI:getContentSize(richText)
|
||
scrollAble = scrollSize.width > capacitySize.width
|
||
end
|
||
|
||
if remaining < 0 then
|
||
GUI:ListView_removeItemByIndex(exList, GUI:ListView_getItemIndex(exList, layout))
|
||
MainProperty.RefreshListView()
|
||
ChatData.RemoveChatExItemsData(data)
|
||
end
|
||
|
||
remaining = remaining - 1
|
||
end
|
||
SL:schedule(layout, callback, 1)
|
||
callback()
|
||
|
||
-- 滚动
|
||
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))))
|
||
end
|
||
end
|
||
|
||
function MainProperty.OnChatExClear()
|
||
if not MainProperty._ui or not MainProperty._ui["ListView_chat_ex"] then
|
||
return false
|
||
end
|
||
|
||
GUI:stopAllActions(MainProperty._ui["ListView_chat_ex"])
|
||
GUI:removeAllChildren(MainProperty._ui["ListView_chat_ex"])
|
||
end
|
||
|
||
function MainProperty.OnDarkStateChange()
|
||
-- 0-白天,1-黑夜,2-日出,3-傍晚
|
||
local darkState = SL:GetValue("DARK_STATE")
|
||
GUI:Image_loadTexture(MainProperty._ui["Image_time"], MainProperty._path .. MainProperty._darkImgList[darkState])
|
||
end
|
||
|
||
function MainProperty.OnRefreshPropertyShow()
|
||
--Level
|
||
local roleLevel = SL:GetValue("LEVEL")
|
||
GUI:Text_setString(MainProperty._ui["Text_level"], roleLevel)
|
||
|
||
--EXP
|
||
local curExp = SL:GetValue("EXP")
|
||
local maxExp = SL:GetValue("MAXEXP")
|
||
local expPer = curExp / maxExp * 100
|
||
GUI:LoadingBar_setPercent(MainProperty._ui["LoadingBar_exp"], expPer)
|
||
|
||
--HPMP
|
||
local curHP = SL:GetValue("HP")
|
||
local maxHP = SL:GetValue("MAXHP")
|
||
local curMP = SL:GetValue("MP")
|
||
local maxMP = SL:GetValue("MAXMP")
|
||
local hpPer = curHP / maxHP * 100
|
||
local mpPer = curMP / maxMP * 100
|
||
GUI:Text_setString(MainProperty._ui["Text_hp"], string.format("%s/%s", SL:HPUnit(curHP), SL:HPUnit(maxHP)))
|
||
GUI:Text_setString(MainProperty._ui["Text_mp"], string.format("%s/%s", SL:HPUnit(curMP), SL:HPUnit(maxMP)))
|
||
|
||
local roleJob = SL:GetValue("JOB")
|
||
if roleLevel < 28 and roleJob == 0 then -- 战士等级小于28 显示全血
|
||
GUI:setVisible(MainProperty._ui["LoadingBar_hp"], false)
|
||
GUI:setVisible(MainProperty._ui["LoadingBar_mp"], false)
|
||
GUI:setVisible(MainProperty._ui["Image_fhp_bg"], true)
|
||
GUI:setVisible(MainProperty._ui["LoadingBar_fhp"], true)
|
||
GUI:LoadingBar_setPercent(MainProperty._ui["LoadingBar_fhp"], hpPer)
|
||
else
|
||
GUI:setVisible(MainProperty._ui["LoadingBar_hp"], true)
|
||
GUI:setVisible(MainProperty._ui["LoadingBar_mp"], true)
|
||
GUI:setVisible(MainProperty._ui["Image_fhp_bg"], false)
|
||
GUI:setVisible(MainProperty._ui["LoadingBar_fhp"], false)
|
||
GUI:LoadingBar_setPercent(MainProperty._ui["LoadingBar_hp"], hpPer)
|
||
GUI:LoadingBar_setPercent(MainProperty._ui["LoadingBar_mp"], mpPer)
|
||
end
|
||
|
||
-- weight
|
||
local curWeight = SL:GetValue("BW")
|
||
local maxWeight = SL:GetValue("MAXBW")
|
||
GUI:LoadingBar_setPercent(MainProperty._ui["LoadingBar_weight"], curWeight / maxWeight * 100)
|
||
|
||
-- 刷新魔血球动画
|
||
MainProperty.RefreshSfxShowPercent()
|
||
|
||
-- 刷新内功相关显示
|
||
MainProperty.OnRefreshNGShow()
|
||
end
|
||
|
||
function MainProperty.OnChangeScene()
|
||
MainProperty.OnUpdatePlayerPosition()
|
||
MainProperty.OnDarkStateChange()
|
||
end
|
||
|
||
function MainProperty.OnUpdatePlayerPosition()
|
||
local mapName = SL:GetValue("MAP_NAME")
|
||
local mapX = SL:GetValue("X")
|
||
local mapY = SL:GetValue("Y")
|
||
if tonumber(mapX) and tonumber(mapY) then
|
||
mapX = math.ceil(mapX)
|
||
mapY = math.ceil(mapY)
|
||
GUI:Text_setString(MainProperty._ui["Text_position"], string.format("%s %s:%s", mapName, mapX, mapY))
|
||
end
|
||
end
|
||
|
||
function MainProperty.OnRefreshBubbleTips(data)
|
||
if data.status then
|
||
MainProperty.AddBubbleTips(data)
|
||
else
|
||
MainProperty.RmvBubbleTips(data)
|
||
end
|
||
end
|
||
|
||
function MainProperty.OnPlayerPKStateChange()
|
||
local pkMode = SL:GetValue("PKMODE")
|
||
|
||
GUI:Text_setString(MainProperty._ui["Text_pkmode"], MainProperty._pkModeStrList[pkMode] or "")
|
||
end
|
||
|
||
function MainProperty.OnShowOrHideAutoFightTips(status)
|
||
if status then
|
||
GUI:setVisible(MainProperty._nodeAutoMove, false)
|
||
GUI:setVisible(MainProperty._nodeAutoFight, true)
|
||
else
|
||
GUI:setVisible(MainProperty._nodeAutoFight, false)
|
||
end
|
||
end
|
||
|
||
function MainProperty.OnShowOrHideAutoMoveTips(status)
|
||
if status then
|
||
GUI:setVisible(MainProperty._nodeAutoFight, false)
|
||
GUI:setVisible(MainProperty._nodeAutoMove, true)
|
||
else
|
||
GUI:setVisible(MainProperty._nodeAutoMove, false)
|
||
end
|
||
end
|
||
|
||
function MainProperty.OnReinAttrChange()
|
||
local btnReinAdd = MainProperty._ui["btn_rein_add"]
|
||
local point = SL:GetValue("BONUS_POINT")
|
||
local isshow = point and tonumber(point) > 0 or false
|
||
GUI:setVisible(btnReinAdd, isshow)
|
||
GUI:stopAllActions(btnReinAdd)
|
||
if isshow then
|
||
local blink = false
|
||
local function playBlink()
|
||
blink = not blink
|
||
GUI:Button_loadTextureNormal(btnReinAdd, MainProperty._path .. reinAddIcons[blink and 2 or 1])
|
||
end
|
||
SL:schedule(btnReinAdd, playBlink, 0.2)
|
||
end
|
||
end
|
||
|
||
---------------------------------------------------------------------------------------------
|
||
|
||
|
||
------------------------------ 气泡栏 --------------------------------------------------------
|
||
-- 气泡cell
|
||
function MainProperty.CreateBubbleTipsCell(data)
|
||
local id = data.id
|
||
local path = data.path
|
||
|
||
local node = GUI:Node_Create(-1, "node", 0, 0)
|
||
|
||
local Panel_cell = GUI:Layout_Create(node, "Panel_cell", 0, 0, 50, 50)
|
||
GUI:setTouchEnabled(Panel_cell, true)
|
||
GUI:setAnchorPoint(Panel_cell, 0.5, 0.5)
|
||
|
||
-- 图标
|
||
local iconBtn = GUI:Button_Create(Panel_cell, "iconBtn", 25, 25, "Default/Button_Normal.png")
|
||
GUI:setAnchorPoint(iconBtn, 0.5, 0.5)
|
||
GUI:setContentSize(iconBtn, 46, 46)
|
||
|
||
-- 倒计时
|
||
local timeText = GUI:Text_Create(Panel_cell, "timeText", 25, 7, 16, "#FF0000", "10")
|
||
GUI:setAnchorPoint(timeText, 0.5, 0.5)
|
||
|
||
GUI:removeFromParent(Panel_cell)
|
||
if path and string.len(path) > 0 then
|
||
GUI:Button_loadTextureNormal(iconBtn, path)
|
||
end
|
||
GUI:setIgnoreContentAdaptWithSize(iconBtn, true)
|
||
GUI:addOnClickEvent(iconBtn, function()
|
||
if data.callback then
|
||
data.callback(Panel_cell)
|
||
end
|
||
end)
|
||
|
||
-- 时间
|
||
local function callback()
|
||
if data.endTime then
|
||
local remaining = data.endTime - SL:GetValue("SERVER_TIME")
|
||
GUI:Text_setString(timeText, remaining)
|
||
|
||
if remaining <= 0 then
|
||
GUI:stopAllActions(timeText)
|
||
GUI:Text_setString(timeText, "")
|
||
if data.timeOverCB then
|
||
data.timeOverCB()
|
||
end
|
||
end
|
||
else
|
||
GUI:Text_setString(timeText, "")
|
||
end
|
||
end
|
||
|
||
SL:schedule(timeText, callback, 1)
|
||
callback()
|
||
|
||
GUI:Timeline_Waggle(Panel_cell, 0.05, 20)
|
||
|
||
local cell = {
|
||
id = id,
|
||
layout = Panel_cell,
|
||
button = iconBtn
|
||
}
|
||
return cell
|
||
end
|
||
|
||
function MainProperty.AddBubbleTips(data)
|
||
data.endTime = data.time and data.time + SL:GetValue("SERVER_TIME")
|
||
|
||
if MainProperty._bubbleTipsDatas[data.id] then
|
||
MainProperty._bubbleTipsDatas[data.id] = data
|
||
return false
|
||
end
|
||
MainProperty._bubbleTipsDatas[data.id] = data
|
||
|
||
|
||
local tipsCell = MainProperty.CreateBubbleTipsCell(data)
|
||
MainProperty._bubbleTipsCells[data.id] = tipsCell
|
||
GUI:ListView_pushBackCustomItem(MainProperty._ui["ListView_bubble_tips"], tipsCell.layout)
|
||
|
||
SL:PlaySound(50004)
|
||
end
|
||
|
||
function MainProperty.RmvBubbleTips(data)
|
||
if not MainProperty._bubbleTipsDatas[data.id] then
|
||
return false
|
||
end
|
||
MainProperty._bubbleTipsDatas[data.id] = nil
|
||
|
||
GUI:ListView_removeChild(MainProperty._ui["ListView_bubble_tips"], MainProperty._bubbleTipsCells[data.id].layout)
|
||
MainProperty._bubbleTipsCells[data.id] = nil
|
||
end
|
||
|
||
-- 获取气泡按钮方法
|
||
function MainProperty.GetBubbleButtonByID(id)
|
||
for i, cell in pairs(MainProperty._bubbleTipsCells) do
|
||
if cell.id == id then
|
||
return cell.button
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
|
||
---------------------------------------------------------------------------------------------
|
||
|
||
------------------------------ 自动提示 ------------------------------------------------------
|
||
function MainProperty.InitAutoSFXTips()
|
||
local contentSize = GUI:getContentSize(MainProperty._ui["Panel_auto_tips"])
|
||
local posX = contentSize.width / 2
|
||
local posY = 10
|
||
|
||
-- 自动战斗
|
||
MainProperty._nodeAutoFight = GUI:Node_Create(MainProperty._ui["Panel_auto_tips"], "nodeAutoFight", posX, posY)
|
||
GUI:setVisible(MainProperty._nodeAutoFight, false)
|
||
GUI:Effect_Create(MainProperty._nodeAutoFight, "autoFightSfx", 0, 0, 0, 4009)
|
||
|
||
-- 自动寻路
|
||
MainProperty._nodeAutoMove = GUI:Node_Create(MainProperty._ui["Panel_auto_tips"], "nodeAutoMove", posX, posY)
|
||
GUI:setVisible(MainProperty._nodeAutoMove, false)
|
||
GUI:Effect_Create(MainProperty._nodeAutoMove, "autoMoveSfx", 0, 0, 0, 4010)
|
||
end
|
||
|
||
------------------------------ 自动捡物 ------------------------------------------------------
|
||
function MainProperty.InitPickButton()
|
||
GUI:setVisible(MainProperty._ui["Button_pick"], false)
|
||
GUI:addOnClickEvent(MainProperty._ui["Button_pick"], function()
|
||
if SL:GetValue("BATTLE_IS_AUTO_PICK") then
|
||
SL:SetValue("BATTLE_PICK_END")
|
||
else
|
||
SL:SetValue("BATTLE_PICK_BEGIN")
|
||
end
|
||
end)
|
||
end
|
||
|
||
function MainProperty.OnUpdatePickState()
|
||
local name = string.format("btn_zhijiemian_%02d.png", SL:GetValue("BATTLE_IS_AUTO_PICK") and 6 or 5)
|
||
GUI:Button_loadTextureNormal(MainProperty._ui["Button_pick"], MainProperty._path .. name)
|
||
end
|
||
|
||
function MainProperty.UpdatePickupVisible(visible)
|
||
GUI:setVisible(MainProperty._ui["Button_pick"], visible)
|
||
end
|
||
|
||
------------------------------ 英雄相关 -------------------------------------------------------
|
||
function MainProperty.RefAnger(value)
|
||
local size = GUI:getContentSize(MainProperty._ui["Panel_loadBar"])
|
||
GUI:setContentSize(MainProperty._ui["Panel_loadBar"], size.width, 5 + value * (MainProperty._angerHei - 5))
|
||
end
|
||
|
||
function MainProperty.OnHeroAngerChange()
|
||
if SL:GetValue("USEHERO") then
|
||
local curAnger = SL:GetValue("H.ANGER")
|
||
local maxAnger = SL:GetValue("H.MAXANGER")
|
||
if maxAnger ~= 0 then
|
||
MainProperty.RefAnger(curAnger / maxAnger)
|
||
end
|
||
|
||
local bar = MainProperty._ui["Image_loadbar2"]
|
||
if SL:GetValue("H.SHAN") then
|
||
GUI:setVisible(bar, not GUI:getVisible(bar))
|
||
else
|
||
GUI:stopAllActions(bar)
|
||
GUI:setVisible(bar, false)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 脚本添加魔血球动画
|
||
function MainProperty.OnPlayMagicBallEffect(data)
|
||
if data.type < 0 or data.type > 2 or data.count < 0 or data.interval < 0 then
|
||
return
|
||
end
|
||
local scale = data.scale == 0 and 1 or (data.scale / 100)
|
||
local timeval = data.interval / 1000
|
||
local prefix = MainProperty._mhpPrefixList[data.type + 1] or ""
|
||
|
||
local ani = GUI:Animation_Create()
|
||
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
|
||
local sp = GUI:Sprite_Create(-1, "sp", 0, 0, path)
|
||
pSize = GUI:getContentSize(sp)
|
||
GUI:Animation_addSpriteFrame(ani, GUI:Sprite_getSpriteFrame(sp))
|
||
end
|
||
end
|
||
GUI:Animation_setDelayPerUnit(ani, timeval)
|
||
GUI:Animation_setLoops(ani, 1)
|
||
GUI:Animation_setRestoreOriginalFrame(ani, true)
|
||
|
||
pSize.width = pSize.width * scale
|
||
pSize.height = pSize.height * scale
|
||
local tag = MainProperty._mhpTagList[data.type + 1]
|
||
local widget = MainProperty._ui[string.format("Panel_%ssfx", prefix)]
|
||
local sprite
|
||
if tag and widget then
|
||
MainProperty._pSize[tag] = pSize
|
||
GUI:setContentSize(widget, pSize.width, pSize.height)
|
||
if not GUI:getChildByName(widget, tag) then
|
||
sprite = GUI:Sprite_Create(widget, tag, 0, 0)
|
||
GUI:setScale(sprite, scale)
|
||
GUI:runAction(sprite, GUI:ActionRepeatForever(GUI:ActionAnimate(ani)))
|
||
end
|
||
end
|
||
|
||
if data.time ~= -1 and data.time > 0 then
|
||
SL:ScheduleOnce(
|
||
function()
|
||
if sprite and not GUI:Widget_IsNull(sprite) then
|
||
GUI:stopAllActions(sprite)
|
||
GUI:removeFromParent(sprite)
|
||
end
|
||
end,
|
||
data.time
|
||
)
|
||
end
|
||
|
||
GUI:setVisible(MainProperty._ui["Panel_hp_sfx"], data.type ~= 2)
|
||
GUI:setVisible(MainProperty._ui["Panel_mp_sfx"], data.type ~= 2)
|
||
GUI:setVisible(MainProperty._ui["Panel_fhp_sfx"], true)
|
||
|
||
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"])
|
||
local hpWidth = GUI:getContentSize(MainProperty._ui["Panel_hp_sfx"]).width
|
||
GUI:setPosition(widget, hpPosX + hpWidth + 4 + data.offsetX, 65 + data.offsetY)
|
||
elseif data.type == 2 then -- FHP
|
||
GUI:setPosition(widget, 38 + data.offsetX, 65 + data.offsetY)
|
||
end
|
||
|
||
MainProperty._drawHWay[tag] = data.drawHWay
|
||
if data.drawHWay and data.drawHWay == 1 then --按HP/MP真实高度绘制
|
||
MainProperty.RefreshSfxShowPercent()
|
||
end
|
||
end
|
||
|
||
function MainProperty.RefreshSfxShowPercent()
|
||
--HPMP
|
||
local curHP = SL:GetValue("HP")
|
||
local maxHP = SL:GetValue("MAXHP")
|
||
local curMP = SL:GetValue("MP")
|
||
local maxMP = SL:GetValue("MAXMP")
|
||
local hpPer = curHP / maxHP
|
||
local mpPer = curMP / maxMP
|
||
|
||
local roleJob = SL:GetValue("JOB")
|
||
local roleLevel = SL:GetValue("LEVEL")
|
||
if roleLevel < 28 and roleJob == 0 then -- 战士等级小于28 显示全血
|
||
if MainProperty._ui["Panel_hp_sfx"] and MainProperty._ui["Panel_mp_sfx"] then
|
||
GUI:setVisible(MainProperty._ui["Panel_hp_sfx"], false)
|
||
GUI:setVisible(MainProperty._ui["Panel_mp_sfx"], false)
|
||
GUI:setVisible(MainProperty._ui["Panel_fhp_sfx"], true)
|
||
end
|
||
else
|
||
if MainProperty._ui["Panel_hp_sfx"] and MainProperty._ui["Panel_mp_sfx"] then
|
||
GUI:setVisible(MainProperty._ui["Panel_hp_sfx"], true)
|
||
GUI:setVisible(MainProperty._ui["Panel_mp_sfx"], true)
|
||
GUI:setVisible(MainProperty._ui["Panel_fhp_sfx"], false)
|
||
end
|
||
end
|
||
|
||
for i, tag in ipairs(MainProperty._mhpTagList) do
|
||
local widget = MainProperty._ui[string.format("Panel_%ssfx", MainProperty._mhpPrefixList[i])]
|
||
if widget and GUI:getChildByName(widget, tag) then
|
||
local pSize = MainProperty._pSize[tag]
|
||
local drawHWay = MainProperty._drawHWay[tag]
|
||
if not pSize or (not drawHWay) or drawHWay ~= 1 then
|
||
return
|
||
end
|
||
local percent = tag == "MPSFX" and mpPer or hpPer
|
||
GUI:setContentSize(widget, pSize.width, pSize.height * percent)
|
||
end
|
||
end
|
||
end
|
||
|
||
---------------------------------------------------------------------------------------------
|
||
|
||
------------------------------ 内功相关 ------------------------------------------------------
|
||
function MainProperty.OnRefreshNGShow()
|
||
if SL:GetValue("GAME_DATA", "OpenNGUI") ~= 1 then
|
||
return
|
||
end
|
||
-- 斗转星移值
|
||
if not MainProperty._dzPanelHei then
|
||
MainProperty._dzPanelHei = GUI:getContentSize(MainProperty._ui["Panel_bar_dz"]).height
|
||
end
|
||
local wid = GUI:getContentSize(MainProperty._ui["Panel_bar_dz"]).width
|
||
local curDZValue = SL:GetValue("CUR_ABIL_BY_ID", GUIDefine.AttTypeTable.Internal_DZValue)
|
||
local maxDZValue = SL:GetValue("MAX_ABIL_BY_ID", GUIDefine.AttTypeTable.Internal_DZValue)
|
||
local per = 0
|
||
if curDZValue and maxDZValue and maxDZValue > 0 then
|
||
per = curDZValue / maxDZValue
|
||
end
|
||
GUI:setContentSize(MainProperty._ui["Panel_bar_dz"], wid, MainProperty._dzPanelHei * per)
|
||
|
||
-- 醉酒值
|
||
if not MainProperty._zjPanelHei then
|
||
MainProperty._zjPanelHei = GUI:getContentSize(MainProperty._ui["Panel_bar_zj"]).height
|
||
end
|
||
local wid = GUI:getContentSize(MainProperty._ui["Panel_bar_zj"]).width
|
||
local per = 0
|
||
GUI:setContentSize(MainProperty._ui["Panel_bar_zj"], wid, MainProperty._zjPanelHei * per)
|
||
|
||
MainProperty._NGShow = tonumber(SL:GetValue("GAME_DATA", "OpenNGUI")) == 1 and SL:GetValue("IS_LEARNED_INTERNAL")
|
||
MainProperty.InitNGShow()
|
||
MainProperty.OnUpdateSetComboSkill()
|
||
end
|
||
|
||
function MainProperty.OnRefreshDZShow()
|
||
local dzPanel = MainProperty._ui["Panel_dz"]
|
||
if dzPanel then
|
||
if SL:GetValue("SKILL_DATA", DZXY_SkillID) then
|
||
GUI:setVisible(dzPanel, MainProperty._NGShow and true)
|
||
else
|
||
GUI:setVisible(dzPanel, false)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 连击可释放
|
||
function MainProperty.OnRefreshComboShow(state)
|
||
GUI:stopAllActions(MainProperty._ui["Image_ng_shan"])
|
||
GUI:setVisible(MainProperty._ui["Image_ng_shan"], state)
|
||
if state then
|
||
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])
|
||
end
|
||
SL:schedule(MainProperty._ui["Image_ng_shan"], playBlink, 0.2)
|
||
end
|
||
end
|
||
|
||
function MainProperty.OnActiveComboSkill(state)
|
||
if MainProperty._NGShow then
|
||
local selectSkills = SL:GetValue("SET_COMBO_SKILLS")
|
||
if selectSkills[1] then
|
||
MainProperty.OnRefreshComboShow(state)
|
||
end
|
||
end
|
||
end
|
||
|
||
function MainProperty.OnComboSkillCDChange()
|
||
local skills = SL:GetValue("SET_COMBO_SKILLS")
|
||
local state = true
|
||
|
||
for i = 1, #skills do
|
||
local skillID = skills[i]
|
||
if skillID and skillID ~= 0 then
|
||
if SL:GetValue("SKILL_IS_CDING", skillID) then
|
||
state = false
|
||
end
|
||
end
|
||
end
|
||
|
||
SL:SetValue("COMBO_SKILL_STATE", state)
|
||
MainProperty.OnActiveComboSkill(state)
|
||
end
|
||
|
||
function MainProperty.OnUpdateSetComboSkill()
|
||
if MainProperty._NGShow then
|
||
local selectSkills = SL:GetValue("SET_COMBO_SKILLS")
|
||
if selectSkills[1] then
|
||
MainProperty.OnRefreshComboShow(true)
|
||
else
|
||
GUI:stopAllActions(MainProperty._ui["Image_ng_shan"])
|
||
GUI:setVisible(MainProperty._ui["Image_ng_shan"], false)
|
||
end
|
||
end
|
||
end
|
||
|
||
------------------------------ 掉落分类 ------------------------------------------------------
|
||
function MainProperty.CreateDropSwitchCell(id)
|
||
local widget = GUI:Widget_Create(-1, "Widget_" .. id, 0, 0, 0, 0)
|
||
GUI:LoadExport(widget, "main/drop_switch_cell_win32")
|
||
local cell = GUI:getChildByName(widget, "Panel_cell")
|
||
|
||
local checkBox = GUI:getChildByName(cell, "CheckBox_drop")
|
||
local nameText = GUI:getChildByName(cell, "Text_drop_name")
|
||
GUI:CheckBox_setZoomScale(checkBox, -0.05)
|
||
|
||
local data = {
|
||
layout = cell,
|
||
nameText = nameText,
|
||
checkBox = checkBox
|
||
}
|
||
GUI:removeFromParent(cell)
|
||
return data
|
||
end
|
||
|
||
function MainProperty.ShowDropSwitchPanel()
|
||
local num = #MainProperty._dropTypeList
|
||
if num == 0 then
|
||
return
|
||
end
|
||
local worldPos = GUI:getWorldPosition(MainProperty._ui["Button_drop"])
|
||
local nodePos = GUI:convertToNodeSpace(MainProperty._root, worldPos.x, worldPos.y)
|
||
GUI:setPosition(MainProperty._ui["Panel_drop"], nodePos.x, nodePos.y + 10)
|
||
GUI:setVisible(MainProperty._ui["Panel_drop"], true)
|
||
GUI:setVisible(MainProperty._ui["Panel_hide_drop"], true)
|
||
GUI:setTouchEnabled(MainProperty._ui["Panel_hide_drop"], true)
|
||
|
||
GUI:ListView_removeAllItems(MainProperty._ui["ListView_drop"])
|
||
|
||
local cellWid = nil
|
||
local cellHei = nil
|
||
for _, data in ipairs(MainProperty._dropTypeList) do
|
||
local id = data.id
|
||
local defaultName = nil
|
||
if string.len(data.name) == 0 then
|
||
defaultName = id == FAKE_DROP_TYPE_ID and "分类0" or ("分类" .. id)
|
||
end
|
||
local name = defaultName or data.name
|
||
local cell = MainProperty.CreateDropSwitchCell(id)
|
||
local isReceiving = ChatData.GetDropTypeSwitch(id)
|
||
GUI:CheckBox_setSelected(cell.checkBox, isReceiving == true)
|
||
GUI:Text_setString(cell.nameText, name)
|
||
local nameWid = GUI:getContentSize(cell.nameText).width
|
||
local posX = GUI:getPositionX(cell.nameText)
|
||
|
||
-- 接收开关
|
||
GUI:CheckBox_addOnEvent(cell.checkBox, function()
|
||
local isSelected = GUI:CheckBox_isSelected(cell.checkBox)
|
||
if id == DROP_TOTAL_TYPE_ID then
|
||
for channel, cell in pairs(MainProperty._dropTypeCells) do
|
||
ChatData.SetDropTypeSwitch(channel, isSelected)
|
||
end
|
||
else
|
||
ChatData.SetDropTypeSwitch(id, isSelected)
|
||
end
|
||
for channel, cell in pairs(MainProperty._dropTypeCells) do
|
||
local isReceiving = ChatData.GetDropTypeSwitch(channel)
|
||
GUI:CheckBox_setSelected(cell.checkBox, isReceiving == true)
|
||
if channel == DROP_TOTAL_TYPE_ID then
|
||
ChatData.SetReceiving(CHANNEL.DROP, isReceiving)
|
||
end
|
||
end
|
||
end)
|
||
|
||
local tempWid = posX + nameWid + 8
|
||
if not cellWid or not cellHei then
|
||
cellWid = math.max(tempWid, GUI:getContentSize(cell.layout).width)
|
||
cellHei = GUI:getContentSize(cell.layout).height
|
||
else
|
||
cellWid = math.max(tempWid, cellWid)
|
||
end
|
||
|
||
MainProperty._dropTypeCells[id] = cell
|
||
GUI:ListView_pushBackCustomItem(MainProperty._ui["ListView_drop"], cell.layout)
|
||
end
|
||
|
||
|
||
local listWid = cellWid
|
||
local listHei = cellHei * num
|
||
GUI:setContentSize(MainProperty._ui["ListView_drop"], listWid, listHei)
|
||
GUI:setContentSize(MainProperty._ui["Panel_drop"], listWid + 2, listHei + 6)
|
||
GUI:setContentSize(MainProperty._ui["Image_drop_bg"], listWid + 2, listHei + 6)
|
||
GUI:setPosition(MainProperty._ui["Image_drop_bg"], (listWid + 2) / 2, (listHei + 6) / 2)
|
||
end
|
||
|
||
function MainProperty.HideDropSwitchPanel()
|
||
GUI:setVisible(MainProperty._ui["Panel_drop"], false)
|
||
GUI:setVisible(MainProperty._ui["Panel_hide_drop"], false)
|
||
GUI:setTouchEnabled(MainProperty._ui["Panel_hide_drop"], false)
|
||
end
|
||
|
||
function MainProperty.RefreshFakeDropType()
|
||
local needRefresh = false
|
||
local hasFake = false
|
||
for i, v in ipairs(MainProperty._dropTypeList) do
|
||
if v.id == FAKE_DROP_TYPE_ID then
|
||
if ChatData.IsCloseFakeDrop() then
|
||
table.remove(MainProperty._dropTypeList, i)
|
||
needRefresh = true
|
||
end
|
||
hasFake = true
|
||
break
|
||
end
|
||
end
|
||
|
||
if not ChatData.IsCloseFakeDrop() and not hasFake then
|
||
local fakeDrop = SL:GetMetaValue("GAME_DATA", "ShowFakeDropType")
|
||
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] })
|
||
needRefresh = true
|
||
end
|
||
end
|
||
end
|
||
|
||
if needRefresh then
|
||
MainProperty.HideDropSwitchPanel()
|
||
end
|
||
end
|
||
|
||
---------------------------------------------------------------------------------------------
|
||
|
||
------------------------------ 快捷栏 --------------------------------------------------------
|
||
-- 初始化显示的快捷栏
|
||
function MainProperty.InitQuickUseShow()
|
||
local showNum = 0
|
||
-- 默认个数
|
||
if MainProperty._ui["Panel_quick"] and GUI:getVisible(MainProperty._ui["Panel_quick"]) then
|
||
for i = 1, 6 do
|
||
local layout = MainProperty._ui[string.format("Panel_quick_use_%s", i)]
|
||
if layout and GUI:getVisible(layout) then
|
||
showNum = showNum + 1
|
||
end
|
||
end
|
||
end
|
||
-- 设置快捷框个数 (最大:6)
|
||
QuickUseData.SetQuickUseSize(showNum)
|
||
end
|
||
|
||
-- 初始化显示的快捷栏
|
||
function MainProperty.InitQuickUseItems()
|
||
local regstetMouseEvent = function(widget, item, i)
|
||
local function addItemIntoBag(touchPos)
|
||
local state = SL:GetValue("ITEM_MOVE_STATE")
|
||
local canMove = item and GUI:getVisible(item)
|
||
if state and canMove then
|
||
local data = {}
|
||
data.target = GUIDefine.ItemGoTo.QUICK_USE
|
||
data.pos = touchPos
|
||
data.posInQuickUse = i
|
||
SL:ItemMoveCheck(data)
|
||
else
|
||
return -1
|
||
end
|
||
end
|
||
|
||
local function setNoSwallowMouse()
|
||
return -1
|
||
end
|
||
|
||
GUI:addMouseButtonEvent(widget, {
|
||
onRightDownFunc = setNoSwallowMouse,
|
||
onSpecialRFunc = addItemIntoBag
|
||
})
|
||
end
|
||
|
||
local showNum = 0
|
||
|
||
local Panel_quick = MainProperty._ui["Panel_quick"]
|
||
if Panel_quick and GUI:getVisible(Panel_quick) then
|
||
for i = 1, 6 do
|
||
local item = MainProperty._ui[string.format("Panel_quick_use_%s", i)]
|
||
if item and GUI:getVisible(item) then
|
||
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 Panel_touch = GUI:Layout_Create(item, "Panel_touch", 0, 0, size.width, size.height)
|
||
GUI:setTouchEnabled(Panel_touch, true)
|
||
GUI:setSwallowTouches(Panel_touch, false)
|
||
Panel_touch._noAutoRegisterMouseSwollow = true
|
||
regstetMouseEvent(Panel_touch, item, i)
|
||
end
|
||
end
|
||
end
|
||
|
||
QuickUseData.SetQuickUseSize(showNum)
|
||
|
||
MainProperty.UpdateQuickUseItem()
|
||
end
|
||
|
||
-- 快捷栏更新
|
||
function MainProperty.OnQuickUseRefresh(data)
|
||
local cell = MainProperty._quickUseCells[data.pos]
|
||
if not cell then
|
||
return false
|
||
end
|
||
GUI:ItemShow_resetMoveState(cell.item, data.state == 0)
|
||
end
|
||
|
||
-- 快捷栏变化通知
|
||
function MainProperty.OnQuickUseChange(data)
|
||
local opera = data.opera
|
||
if opera == GUIDefine.OperateType.INIT then
|
||
MainProperty.UpdateQuickUseItem()
|
||
elseif opera == GUIDefine.OperateType.ADD then
|
||
MainProperty.AddQuickUseItem(data.param)
|
||
elseif opera == GUIDefine.OperateType.DEL then
|
||
MainProperty.DelQuickUseItem(data.param)
|
||
elseif opera == GUIDefine.OperateType.CHANGE then
|
||
MainProperty.ChangeQuickUseItem(data.param)
|
||
end
|
||
end
|
||
|
||
--初始化item
|
||
function MainProperty.UpdateQuickUseItem()
|
||
for k, v in pairs(MainProperty._quickUseCells) do
|
||
GUI:removeAllChildren(v.nodeItem)
|
||
end
|
||
|
||
local quickUseData = QuickUseData.GetQuickUseData()
|
||
for k, v in pairs(quickUseData) do
|
||
MainProperty.AddQuickUseItem({ index = k, itemData = v })
|
||
end
|
||
end
|
||
|
||
-- 添加 item
|
||
function MainProperty.AddQuickUseItem(data)
|
||
local cell = MainProperty._quickUseCells[data.index]
|
||
local function dealSpecialQuickUse()
|
||
local index = data.index
|
||
local size = QuickUseData.GetQuickUseSize()
|
||
local quickUseData = QuickUseData.GetQuickUseData()
|
||
local quickUseList = QuickUseData.GetQuickUseLocalList()
|
||
|
||
local replaceCell = nil
|
||
for i = 1, size do
|
||
if not quickUseData[i] and MainProperty._quickUseCells[i] and i ~= index then
|
||
replaceCell = MainProperty._quickUseCells[i]
|
||
cell = replaceCell
|
||
quickUseData[i] = quickUseData[index]
|
||
quickUseData[index] = nil
|
||
|
||
quickUseList[i] = quickUseList[index]
|
||
quickUseList[index] = 0
|
||
break
|
||
end
|
||
end
|
||
|
||
-- 无替代则放回背包
|
||
if not replaceCell then
|
||
local item = data.itemData
|
||
BagData.AddItemData(item)
|
||
|
||
--清数据
|
||
quickUseList[index] = 0
|
||
|
||
return true
|
||
end
|
||
end
|
||
|
||
if not cell then
|
||
if dealSpecialQuickUse() then
|
||
return
|
||
end
|
||
end
|
||
|
||
local nodeItem = cell.nodeItem
|
||
|
||
GUI:removeAllChildren(nodeItem)
|
||
|
||
local function getCount(item)
|
||
if item.OverLap > 1 then
|
||
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向下取整
|
||
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 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,
|
||
})
|
||
|
||
-- 延迟0.15s显示goodsitem
|
||
GUI:setVisible(item, false)
|
||
GUI:stopAllActions(item)
|
||
SL:scheduleOnce(item, function(sender) GUI:setVisible(item, true) end, 0.15)
|
||
|
||
cell.item = item
|
||
end
|
||
|
||
-- 删除 item
|
||
function MainProperty.DelQuickUseItem(data)
|
||
local cell = MainProperty._quickUseCells[data.index]
|
||
if not cell then
|
||
return false
|
||
end
|
||
GUI:removeAllChildren(cell.nodeItem)
|
||
end
|
||
|
||
-- 修改 item
|
||
function MainProperty.ChangeQuickUseItem(data)
|
||
local cell = MainProperty._quickUseCells[data.index]
|
||
if not cell then
|
||
return false
|
||
end
|
||
local function getCount(item)
|
||
if item.OverLap > 1 then
|
||
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向下取整
|
||
end
|
||
return 0
|
||
end
|
||
GUI:ItemShow_UpdateItemCountShow(cell.item, data.itemData, getCount(data.itemData))
|
||
end
|
||
|
||
---------------------------------------------------------------------------------------------
|
||
|
||
----------------------------- 倒计时提示 -----------------------------------------------------
|
||
function MainProperty.OnAddQuitTimeTips(data)
|
||
if not data or not data.time or not data.type then
|
||
return false
|
||
end
|
||
|
||
local time
|
||
local type = data.type -- 1 小退 2 大退
|
||
|
||
local Node_quit_tip = MainProperty._ui["Node_quit_tip"]
|
||
if not Node_quit_tip then
|
||
return false
|
||
end
|
||
|
||
local function refreshTime()
|
||
time = time and time - 1 or data.time
|
||
|
||
local str = string.format(MainProperty._quitTimeTips[type], time)
|
||
|
||
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")
|
||
GUI:setAnchorPoint(richText, 0.5, 0)
|
||
end
|
||
|
||
GUI:stopAllActions(Node_quit_tip)
|
||
SL:schedule(Node_quit_tip, refreshTime, 1)
|
||
refreshTime()
|
||
end
|
||
|
||
function MainProperty.OnDelQuitTimeTips()
|
||
local Node_quit_tip = MainProperty._ui["Node_quit_tip"]
|
||
if not Node_quit_tip then
|
||
return false
|
||
end
|
||
|
||
GUI:stopAllActions(Node_quit_tip)
|
||
GUI:removeAllChildren(Node_quit_tip)
|
||
end
|
||
|
||
---------------------------------------------------------------------------------------------
|
||
|
||
---------------------------- 窗体尺寸改变 ----------------------------------------------------
|
||
function MainProperty.OnWindowChange()
|
||
MainProperty.InitAdapet()
|
||
end
|
||
|
||
---------------------------------------------------------------------------------------------
|
||
-- 更新恢复聊天框未聚焦状态: 关闭Keyboard
|
||
function MainProperty.OnCloseKeyBoard()
|
||
GUI:TextInput_closeInput(MainProperty._ui["TextField_input"])
|
||
end
|
||
|
||
---------------------------------------------------------------------------------------------
|
||
function MainProperty.handlePressedEnter()
|
||
GUI:TextInput_touchDownAction(MainProperty._ui["TextField_input"], 2)
|
||
return true
|
||
end
|
||
|
||
------------------------------ 注册事件 ------------------------------------------------------
|
||
function MainProperty.RegisterEvent()
|
||
-- 注册事件
|
||
SL:RegisterLUAEvent(LUA_EVENT_HPMP_CHANGE, "MainProperty", MainProperty.OnRefreshPropertyShow)
|
||
SL:RegisterLUAEvent(LUA_EVENT_LEVEL_CHANGE, "MainProperty", MainProperty.OnRefreshPropertyShow)
|
||
SL:RegisterLUAEvent(LUA_EVENT_EXP_CHANGE, "MainProperty", MainProperty.OnRefreshPropertyShow)
|
||
SL:RegisterLUAEvent(LUA_EVENT_ROLE_PROPERTY_CHANGE, "MainProperty", MainProperty.OnRefreshPropertyShow)
|
||
SL:RegisterLUAEvent(LUA_EVENT_WEIGHT_CHANGE, "MainProperty", MainProperty.OnRefreshPropertyShow)
|
||
-- 主玩家位置刷新
|
||
SL:RegisterLUAEvent(LUA_EVENT_BIND_MAINPLAYER, "MainProperty", MainProperty.OnUpdatePlayerPosition)
|
||
SL:RegisterLUAEvent(LUA_EVENT_CHANGESCENE, "MainProperty", MainProperty.OnChangeScene)
|
||
SL:RegisterLUAEvent(LUA_EVENT_PLAYER_MAPPOS_CHANGE, "MainProperty", MainProperty.OnUpdatePlayerPosition)
|
||
-- 脚本展示魔血球动画
|
||
SL:RegisterLUAEvent(LUA_EVENT_PLAY_MAGICBALL_EFFECT, "MainProperty", MainProperty.OnPlayMagicBallEffect)
|
||
-- 气泡相关
|
||
SL:RegisterLUAEvent(LUA_EVENT_BUBBLETIPS_STATUS_CHANGE, "MainProperty", MainProperty.OnRefreshBubbleTips)
|
||
-- 自动提示相关
|
||
SL:RegisterLUAEvent(LUA_EVENT_AUTOFIGHT_TIPS_SHOW, "MainProperty", MainProperty.OnShowOrHideAutoFightTips)
|
||
SL:RegisterLUAEvent(LUA_EVENT_AUTOMOVE_TIPS_SHOW, "MainProperty", MainProperty.OnShowOrHideAutoMoveTips)
|
||
SL:RegisterLUAEvent(LUA_EVENT_AUTOPICKBEGIN, "MainProperty", MainProperty.OnUpdatePickState)
|
||
SL:RegisterLUAEvent(LUA_EVENT_AUTOPICKEND, "MainProperty", MainProperty.OnUpdatePickState)
|
||
|
||
-- 脚本命令(AutoPickItemByBtn、StopAutoPickItemByBtn)触发
|
||
SL:RegisterLUAEvent(LUA_EVENT_MAIN_PICKUP_SHOW, "MainProperty", MainProperty.UpdatePickupVisible)
|
||
|
||
-- -- 英雄相关
|
||
SL:RegisterLUAEvent(LUA_EVENT_HERO_ANGER_CHANGE, "MainProperty", MainProperty.OnHeroAngerChange)
|
||
-- 转生点改变
|
||
SL:RegisterLUAEvent(LUA_EVENT_REIN_ATTR_CHANGE, "MainProperty", MainProperty.OnReinAttrChange)
|
||
-- PK模式改变
|
||
SL:RegisterLUAEvent(LUA_EVENT_PKMODE_CHANGE, "MainProperty", MainProperty.OnPlayerPKStateChange)
|
||
--黑夜状态改变
|
||
SL:RegisterLUAEvent(LUA_EVENT_DARK_STATE_CHANGE, "MainProperty", MainProperty.OnDarkStateChange)
|
||
--学习内功
|
||
SL:RegisterLUAEvent(LUA_EVENT_PLAYER_LEARNED_INTERNAL, "MainProperty", MainProperty.OnRefreshNGShow)
|
||
-- 斗转值改变
|
||
SL:RegisterLUAEvent(LUA_EVENT_PLAYER_INTERNAL_DZVALUE_CHANGE, "MainProperty", MainProperty.OnRefreshNGShow)
|
||
-- 技能初始化/增加/删除
|
||
SL:RegisterLUAEvent(LUA_EVENT_SKILL_INIT, "MainProperty", MainProperty.OnRefreshDZShow)
|
||
SL:RegisterLUAEvent(LUA_EVENT_SKILL_ADD, "MainProperty", MainProperty.OnRefreshDZShow)
|
||
SL:RegisterLUAEvent(LUA_EVENT_SKILL_DEL, "MainProperty", MainProperty.OnRefreshDZShow)
|
||
-- 设置连击技能刷新
|
||
SL:RegisterLUAEvent(LUA_EVENT_PLAYER_SET_COMBO_REFRESH, "MainProperty", MainProperty.OnUpdateSetComboSkill)
|
||
-- 连击技能CD状态
|
||
SL:RegisterLUAEvent(LUA_EVENT_PLAYER_COMBO_SKILLCD_STATE, "MainProperty", MainProperty.OnActiveComboSkill)
|
||
|
||
SL:RegisterLUAEvent(LUA_EVENT_COMBO_SKILL_CD_CHANGE, "MainProperty", MainProperty.OnComboSkillCDChange)
|
||
|
||
SL:RegisterLUAEvent(LUA_EVENT_CHATMINI_ITEM_ADD, "MainProperty", MainProperty.OnAddChatItem)
|
||
SL:RegisterLUAEvent(LUA_EVENT_CHAT_EX_NOTICE_ADD, "MainProperty", MainProperty.OnShowChatExNotice)
|
||
SL:RegisterLUAEvent(LUA_EVENT_PC_FILL_CHAT_INPUT, "MainProperty", MainProperty.OnFillChatInput)
|
||
SL:RegisterLUAEvent(LUA_EVENT_CHAT_PUSH_INPUT, "MainProperty", MainProperty.OnFillChatInput)
|
||
SL:RegisterLUAEvent(LUA_EVENT_CHAT_PRIVATE_TARGET, "MainProperty", MainProperty.OnPrivateChatWithTarget)
|
||
SL:RegisterLUAEvent(LUA_EVENT_MAIN_CHAT_EX_CLEAR, "MainProperty", MainProperty.OnChatExClear)
|
||
|
||
SL:RegisterLUAEvent(LUA_EVENT_QUICKUSE_DATA_OPER, "MainProperty", MainProperty.OnQuickUseChange)
|
||
SL:RegisterLUAEvent(LUA_EVENT_QUICKUSE_ITEM_REFRESH, "MainProperty", MainProperty.OnQuickUseRefresh)
|
||
|
||
SL:RegisterLUAEvent(LUA_EVENT_MAIN_ADD_QUIT_TIME_TIPS, "MainProperty", MainProperty.OnAddQuitTimeTips)
|
||
SL:RegisterLUAEvent(LUA_EVENT_MAIN_DEL_QUIT_TIME_TIPS, "MainProperty", MainProperty.OnDelQuitTimeTips)
|
||
|
||
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_CHAT_PC_AUTO_SHOUT, "MainProperty", MainProperty.OnRefreshAutoShout)
|
||
end
|
||
|
||
----------------------------------------------------------------------------------------------
|
||
|
||
MainProperty.main()
|