---@class EPCFastKeyCodeType EPCFastKeyCodeType = { UIOpen = 1,---开启界面 SetTurn = 2,---开关控制 } ---@class PCFastKey PCFastKey=class() local this = PCFastKey local KeyCode=CS.UnityEngine.KeyCode local ACStr local CheckCtrl=false local KeyTb={ ['B']=KeyCode.B, ['C']=KeyCode.C, ['E']=KeyCode.E, ['G']=KeyCode.G, ['I']=KeyCode.I, ['J']=KeyCode.J, ['O']=KeyCode.O, ['M']=KeyCode.M, ['U']=KeyCode.U, ['V']=KeyCode.V, ['E']=KeyCode.E, ['H']=KeyCode.H, ['K']=KeyCode.K, ['M']=KeyCode.M, ['P']=KeyCode.P, ['Q']=KeyCode.Q, ['R']=KeyCode.R, ['S'] =KeyCode.S, ['T']=KeyCode.T, ['W']=KeyCode.W, ['X']=KeyCode.X, ['Z']=KeyCode.Z, ['Alpha1']= KeyCode.Alpha1, ['Alpha2']= KeyCode.Alpha2, ['Alpha3']= KeyCode.Alpha3, ['Alpha4']= KeyCode.Alpha4, ['Alpha5']= KeyCode.Alpha5, ['F1']=KeyCode.F1, ['F7']=KeyCode.F7, ['F8']=KeyCode.F8, ['F9']=KeyCode.F9, ['F10']=KeyCode.F10, ['F11']=KeyCode.F11, ['F12']=KeyCode.F12, ['Up']=KeyCode.UpArrow, ['Down']=KeyCode.DownArrow, ['ESC']=KeyCode.Escape, ['Tab']=KeyCode.Tab, ['Pause']=KeyCode.Pause, ['LeftShift']=KeyCode.LeftShift, ['RightShift']=KeyCode.RightShift, ['Enter']=KeyCode.Return, } function PCFastKey.Init() PCFastKey.GetCfgKeyCode() PCFastKey.KeyEvent = { --['E']=PCFastKey.OpenEmail,--打开邮件 -- ['M']=PCFastKey.OpenBigMap,--显示自动寻路窗口 --['R']=PCFastKey.OpenRank,--打开排行榜 --['P']=PCFastKey.OpenMarry,--打开婚姻界面 --['T']=PCFastKey.SendTrade,--发送交易请求 --['X']=PCFastKey.JoinSociaty,--加入行会 --['Z']=PCFastKey.SelectSociaty,--打开行会选择 ['Q']=PCFastKey.FastUseItemQ,--快捷使用Q ['W']=PCFastKey.FastUseItemW,--快捷使用W ['E']=PCFastKey.FastUseItemE,--快捷使用E ['R']=PCFastKey.FastUseItemR,--快捷使用R --['V']=PCFastKey.OpenBag,--打开背包 ['F7']=PCFastKey.OpenHookSetting,--打开挂机设置 ['F8']=PCFastKey.TurnAutoFight,--切换自动挂机 ['Tab']=PCFastKey.OpenBigMap,--打开大地图 ['Enter']=PCFastKey.OpenChatUI,--打开聊天 ['ESC']=PCFastKey.CheckNeedOpenSet,--是否需要打开设置 ['LeftShift']=PCFastKey.ChangeMoveState,--切换禁止移动 ['RightShift']=PCFastKey.ChangeMoveState,--切换禁止移动 --['F10']=PCFastKey.OpenPlayer,--打开角色窗口 --['F11']=PCFastKey.OpenSkill,--打开技能窗口 --['F12']=PCFastKey.OpenSup,--打开辅助窗口 -- -- --['Pause']=PCFastKey.Screenshots,--截图 --['CtrlB']=PCFastKey.OpenShop,--打开商铺 --['CtrlE']=PCFastKey.ChangeState,--切换状态 --['CtrlH']=PCFastKey.ChangeAtk,--选择攻击模式 --['CtrlQ']=PCFastKey.ChangeDef,--开启关闭守护状态 --['CtrlS']=PCFastKey.UseTeamSkill,--使用合击技能 --['CtrlM']=PCFastKey.RideHorse,--上马 --['CtrlZ']=PCFastKey.ShowGoodNames,--显示物品名称 -- --['AltQ']=PCFastKey.QuitGame,--退出游戏 --['AltR']=PCFastKey.RefuseBag,--刷新背包 --['AltW']=PCFastKey.QuikTeam,--快速组队 --['AltX']=PCFastKey.BackToChoose,--返回角色选择界面 -- ['Alpha1']=PCFastKey.ChangeEquipSkill1,--将已装备的技能设置为1 ['Alpha2']=PCFastKey.ChangeEquipSkill2,--将已装备的技能设置为1 ['Alpha3']=PCFastKey.ChangeEquipSkill3,--将已装备的技能设置为1 ['Alpha4']=PCFastKey.ChangeEquipSkill4,--将已装备的技能设置为1 ['Alpha5']=PCFastKey.ChangeEquipSkill5,--将已装备的技能设置为1 ['CtrlAlpha1']=PCFastKey.ChangeSkill1,--更换技能1 ['CtrlAlpha2']=PCFastKey.ChangeSkill2,--更换技能2 ['CtrlAlpha3']=PCFastKey.ChangeSkill3,--更换技能3 ['CtrlAlpha4']=PCFastKey.ChangeSkill4,--更换技能4 ['CtrlAlpha5']=PCFastKey.ChangeSkill5,--更换技能5 } PCFastKey.InputKeyEvent={ ['Up']=PCFastKey.LookUpMessage, ['Down']=PCFastKey.LookDownMessage, } --this.OneKey() end ---获取配表的按键列表 function PCFastKey.GetCfgKeyCode() ---操作ui面板的快捷键 PCFastKey.CfgUIKeyCodeList={} ---ESC按钮,特殊key PCFastKey.escSystemKey=0 ---其他功能的快捷键 --PCFastKey.CfgTurnKeyCodeList={} --KeyTb={} if SL:GetConfigTable("cfg_shortcutKey") then ---@param v cfg_shortcutKey_column for i, v in ipairs(SL:GetConfigTable("cfg_shortcutKey")) do if v.shortcutKey=="ESC" then PCFastKey.escSystemKey=v.system end ---多键 if string.contains(v.shortcutKey,"#") then local keyList=string.split(v.shortcutKey,"#") for index = 1, table.count(keyList) do --KeyTb[keyList[index]]= System.Enum.Parse(typeof(KeyCode), keyList[index].ToString()) if v.type==EPCFastKeyCodeType.UIOpen then PCFastKey.CfgUIKeyCodeList[keyList[index]]=v.system end end else ---单键 --KeyTb[v.shortcutKey]= System.Enum.Parse(typeof(KeyCode), keyList[index].ToString()) if v.type==EPCFastKeyCodeType.UIOpen then PCFastKey.CfgUIKeyCodeList[v.shortcutKey]=v.system end end end end end function PCFastKey.Update() if not PCSkillInfoMgr.mainUIShow then return end PCFastKey.CheckInput() end function PCFastKey.CheckInput() if Input.GetKey(KeyCode.LeftControl) or Input.GetKey(KeyCode.RightControl) then ACStr='Ctrl' CheckCtrl=true elseif Input.GetKey(KeyCode.LeftAlt) or Input.GetKey(KeyCode.RightAlt) then ACStr='Alt' CheckCtrl=true else CheckCtrl=false end if CheckCtrl then PCFastKey.TwoKey() else PCFastKey.OneKey() end end function PCFastKey.OneKey() for i,v in pairs(KeyTb) do if Input.GetKeyDown(v) then if PCFastKey.KeyEvent[tostring(i)] or PCFastKey.CfgUIKeyCodeList[tostring(i)] then if Misc.IsFocusOnInputText()==false then if PCFastKey.CfgUIKeyCodeList[tostring(i)] then local isOpenUI= PCFastKey.OpenSystemUI(PCFastKey.CfgUIKeyCodeList[tostring(i)]); if isOpenUI then return end end PCFastKey.KeyEvent[tostring(i)]() end --elseif Misc.IsFocusOnInputText() then -- if PCFastKey.InputKeyEvent[tostring(i)] then -- PCFastKey.InputKeyEvent[tostring(i)]() -- end end end end end function PCFastKey.TwoKey() for i,v in pairs(KeyTb) do if Input.GetKeyDown(v) then if DebugFlag.LogEnable then log(ACStr..tostring(i)) end if PCFastKey.KeyEvent[ACStr..tostring(i)] then if Misc.IsFocusOnInputText()==false then PCFastKey.KeyEvent[ACStr..tostring(i)]() end end end end end ---切换是否可移动状态 function this.ChangeMoveState() if SL:GetMetaValue(EMetaVarGetKey.GET_CLICK_FLOOR_IS_SELECT) == EScreen.True then SL:SetMetaValue(EMetaVarSetKey.SET_IS_CLICK_FLOOR_MOVE,EScreen.False) else SL:SetMetaValue(EMetaVarSetKey.SET_IS_CLICK_FLOOR_MOVE,EScreen.True) end end ---打开挂机设置 function this.OpenHookSetting() if not GUI:GetUI("dev/ui/Setting/Panel/KLHook/KLHookPanel") then -- GUI:UIPanel_Open("dev/ui/Setting/Panel/KLHook/KLHookPanel") KmlManager.HideAllKmlPanel() SL:OpenSettingPanel( ESettingType.OnHookTog) --SL:HideBigMap() SL.HideMainPanel() else --SL:ShowBigMap() GUI:UIPanel_Close("dev/ui/Setting/Panel/KLSettingToggle/KLSettingTogglePanel") GUI:UIPanel_Close("dev/ui/Setting/Panel/KLHook/KLHookPanel") end end ---快捷使用 function this.FastUseItem(key) SL:onLUAEvent(LUA_EVENT_FastUseItem,{key=key}) end function this.FastUseItemQ() this.FastUseItem(1) end function this.FastUseItemW() this.FastUseItem(2) end function this.FastUseItemE() this.FastUseItem(3) end function this.FastUseItemR() this.FastUseItem(4) end ---设置鼠标右键装备技能 function this.ChangeEquipSkill(skillGrid) local skillId=0 ---获取对应格子上的技能 ---变身走另一套逻辑 if InfoManager.shapeShiftCardInfo:isShiftMonster() then local shiftMonsterGroup = InfoManager.shapeShiftCardInfo.shiftMonsterGroup local shiftSkill = InfoManager.shapeShiftCardInfo.shiftSkill ---@type number[] local skills = shiftSkill[shiftMonsterGroup].unlockSkill local lockSkills = shiftSkill[shiftMonsterGroup].lockSkill local showSkills = {} local showSkillsLevel = {} for i, v in pairs(skills) do ---@type cfg_skill_column local skill = SL:GetConfig("cfg_skill", i) if skill.type == ECfgSkillType.Normal and skill.group == ESkillGroup.normal then showSkills[#showSkills + 1] = i showSkillsLevel[#showSkillsLevel + 1] = false end end for i, v in pairs(lockSkills) do ---@type cfg_skill_column local skill = SL:GetConfig("cfg_skill", i) if skill.type == ECfgSkillType.Normal and skill.group == ESkillGroup.normal then showSkills[#showSkills + 1] = i showSkillsLevel[#showSkillsLevel + 1] = true end end if showSkills[skillGrid] and showSkillsLevel[skillGrid] then skillId=showSkills[skillGrid] end else local showSkills = SL:GetMetaValue(EMetaVarGetKey.SKILL_SHOW_LIST) skillId=showSkills[skillGrid] end ---空技能点击无反应 if skillId == 0 then return end ---点击之后将右键技能设置为该技能 LoginManager.selectSkillId:Set(skillId) ---抛出技能改变事件,用于刷新 SL:onLUAEvent(LUA_EVENT_SelectSkill_Change) end function this.ChangeEquipSkill1() this.ChangeEquipSkill(1) end function this.ChangeEquipSkill2() this.ChangeEquipSkill(2) end function this.ChangeEquipSkill3() this.ChangeEquipSkill(3) end function this.ChangeEquipSkill4() this.ChangeEquipSkill(4) end function this.ChangeEquipSkill5() this.ChangeEquipSkill(5) end ---切换设置快捷技能 function this.ChangeSkill1() this.ChangeSkill(1) end function this.ChangeSkill2() this.ChangeSkill(2) end function this.ChangeSkill3() this.ChangeSkill(3) end function this.ChangeSkill4() this.ChangeSkill(4) end function this.ChangeSkill5() this.ChangeSkill(5) end function this.CheckNeedOpenSet() if SL.GetIsShowMainUI() then if ConfigManager.Exsit_cfg_system_switch( PCFastKey.escSystemKey) then local systemData=ConfigManager.Get_cfg_system_switch( PCFastKey.escSystemKey) local isMeet = SL:GetMetaValue(EMetaVarGetKey.IS_OPEN_SYSTEMFUNCTION,systemData.systemName) if isMeet then KmlManager.HideAllKmlPanel() EventManager.Dispatch(LUA_EVENT_OPENMAINSYSTEMFUNCTION,systemData.systemName) --GUI:UIPanel_Open("dev/ui/Bag/Panel/KLUIBag/KLUIBagPanel") else SL:TipMessage( "功能未开启", 1, NoticeType.NoticeMid ) end end else KmlManager.HideAllKmlPanel() SL.ShowMainPanel() end end function this.ChangeSkill(gridNum) local showSkills = SL:GetMetaValue(EMetaVarGetKey.SKILL_SHOW_LIST) if PCSkillInfoMgr.nowKeyId ~= 0 and showSkills[gridNum] ~= PCSkillInfoMgr.nowKeyId and SL:GetMetaValue(EMetaVarGetKey.SKILL_CHECK_IS_LEARNED,PCSkillInfoMgr.nowKeyId) then showSkills[gridNum] = PCSkillInfoMgr.nowKeyId for i = 1, 8 do if i ~=gridNum and showSkills[i] ==PCSkillInfoMgr.nowKeyId then showSkills[i] = 0 end end SL:SetMetaValue(EMetaVarSetKey.SKILL_SHOW_LIST, showSkills) --sl --self:ShowSkillIcon() SL:onLUAEvent(LUA_EVENT_REFRESH_ATTACK_SKILL) end end function PCFastKey.OpenBigMap() if GUI:GetUI("dev/ui/Map/Panel/KLBigMap/KLBigMapPanel") then SL:HideBigMap() --SL.ShowMainPanel() else KmlManager.HideAllKmlPanel() SL:ShowBigMap() end end function PCFastKey.OpenChatUI() if GUI:GetUI("dev/ui/Chat/Panel/KLUIChatPanel/KLUIChatPanel") then SL:CloseChatUI() SL.ShowMainPanel() else KmlManager.HideAllKmlPanel() SL:OpenChatUI() end end ---切换自动挂机 function PCFastKey.TurnAutoFight() local onHookState = SL:GetMetaValue(EMetaVarGetKey.GET_ONHOOK_STATE) if onHookState == EAutoOnHookStatus.PauseOnHook then SL:StopOnHook(true) elseif onHookState == EAutoOnHookStatus.StopOnHook then SL:StartOnHook(true,true) elseif onHookState == EAutoOnHookStatus.OnHooking then SL:StopOnHook(true) end end ---@param systemId number @cfg_system表id function PCFastKey.OpenSystemUI(systemId) if ConfigManager.Exsit_cfg_system_switch(systemId) then local systemData=ConfigManager.Get_cfg_system_switch(systemId) local isMeet = SL:GetMetaValue(EMetaVarGetKey.IS_OPEN_SYSTEMFUNCTION,systemData.systemName) if isMeet then local tbl = cfg_MainPanelUI_post.GetSystemInfoBySystemId(systemData.systemName) if tbl and not string.isNullOrEmpty(tbl.command)then ---如果界面开着直接return if GUI:GetUI(tbl.command) then KmlManager.HideAllKmlPanel() return true end end KmlManager.HideAllKmlPanel() EventManager.Dispatch(LUA_EVENT_OPENMAINSYSTEMFUNCTION,systemData.systemName) --GUI:UIPanel_Open("dev/ui/Bag/Panel/KLUIBag/KLUIBagPanel") else SL:TipMessage( "功能未开启", 1, NoticeType.NoticeMid ) end return true --return isMeet end return false --return false end --查看上一条消息 function PCFastKey.LookUpMessage() if DebugFlag.LogEnable then log("查看上一条") end EventManager.Dispatch(Event.UpOrDownBtn,true) end --查看下一条消息 function PCFastKey.LookDownMessage() if DebugFlag.LogEnable then log("查看下一条") end EventManager.Dispatch(Event.UpOrDownBtn,false) end --打开背包 function PCFastKey.OpenBag() end --打开角色窗口 function PCFastKey.OpenPlayer() end --打开技能窗口 function PCFastKey.OpenSkill() end --打开辅助窗口 function PCFastKey.OpenSup() PCFastKey.Command("!!退出行会") end --返回角色选择界面 function PCFastKey.BackToChoose() PopUpWindowManager.CreateMessageTemplate({ { type = MessageUIControlType.Text, text = "你想退出到选择角色界面吗?"}, { type = MessageUIControlType.Button, text = "确定", callback = LoginManager.LeaveGameToCreateRolePanel }, { type = MessageUIControlType.Button, position = MessageUIControlPosition.LeftBottom, text = "取消", callback = nil} }) end --退出游戏 function PCFastKey.QuitGame() PopUpWindowManager.CreateMessageTemplate({ { type = MessageUIControlType.Text, text = "你想退出游戏吗?" }, { type = MessageUIControlType.Button, text = "确定", callback = LoginManager.LeaveGame }, { type = MessageUIControlType.Button, position = MessageUIControlPosition.LeftBottom, text = "取消", callback = nil} }) end --截图 function PCFastKey.Screenshots() end --打开婚姻 function PCFastKey.OpenMarry() end --打开商铺 function PCFastKey.OpenShop() end --上马 function PCFastKey.RideHorse() end --选择攻击模式 function PCFastKey.ChangeAtk() EventManager.Dispatch(Event.UI_ChangeAtk,nil) end --切换状态 function PCFastKey.ChangeState() end --开启关闭守护状态 function PCFastKey.ChangeDef() end --打开邮件 function PCFastKey.OpenEmail() UIShowPanelByMessage:Show(SL.ReqGetMailListMessage,nil,MessageDef.ResMailListMessage,"UIEMailPanel") end --使用合击技能 function PCFastKey.UseTeamSkill() end --打开排行榜 function PCFastKey.OpenRank() end --显示自动寻路窗口 function PCFastKey.ShowRoad() end --发送交易请求 function PCFastKey.SendTrade() --发送交易请求 SL:ReqTradeMessage(RoleManager.meData.id) end --加入行会 function PCFastKey.JoinSociaty() end --打开行会选择界面 function PCFastKey.SelectSociaty() end ---@type string function PCFastKey.Command(date) if date==nil then if DebugFlag.LogEnable then log(date) end return date end if PCFastKey.JudgeStrEqul(date,ShieldTypeString[ShieldType.PrivateChat]) then if DebugFlag.LogEnable then log(string.gsub(date,ShieldTypeString[ShieldType.PrivateChat],"[私聊]")) end return string.gsub(date,ShieldTypeString[ShieldType.PrivateChat],"[私聊]") elseif PCFastKey.JudgeStrEqul(date,ShieldTypeString[ShieldType.Propaganda]) then if string.sub(date,1,2)~=nil then if string.sub(date,1,2) ==ShieldTypeString[ShieldType.TeamChat] then if DebugFlag.LogEnable then log(string.gsub(date,ShieldTypeString[ShieldType.TeamChat],"[组队]")) end return string.gsub(date,ShieldTypeString[ShieldType.TeamChat],"[组队]") --return ShieldType.TeamChat elseif string.sub(date,1,2)== ShieldTypeString[ShieldType.UnionChat] then if DebugFlag.LogEnable then log(string.gsub(date,ShieldTypeString[ShieldType.UnionChat],"[行会]")) end return string.gsub(date,ShieldTypeString[ShieldType.UnionChat],"[行会]") --return ShieldType.UnionChat else if DebugFlag.LogEnable then log(string.gsub(date,ShieldTypeString[ShieldType.Propaganda],"[喊话]")) end return string.gsub(date,ShieldTypeString[ShieldType.Propaganda],"[喊话]") --return ShieldType.Propaganda end else if DebugFlag.LogEnable then log(string.gsub(date,ShieldTypeString[ShieldType.Propaganda],"[喊话]")) end return string.gsub(date,ShieldTypeString[ShieldType.Propaganda],"[喊话]") --return ShieldType.Propaganda end else if DebugFlag.LogEnable then log(date) end return date end end function PCFastKey.JudgeStrEqul(a,b) if #a<#b then return false end for i = 1, #b do if string.sub(a,1,i)~=string.sub(b,1,i) then return false end end return true end