local Setting_Model = {} local private = { SettingStateTab = {}, cacheSetSkillList = {} } local nextCanUseTime = nil local EventSystem = require('Event/EventSystem') local JSON = require("cjson") local stringKeyValue = "stringKeyValue" local intKeyValue = "intKeyValue" local boolKeyValue = "boolKeyValue" local tableKeyValue = 4 local SETTINGS_PERSISTENT_KEY = "SETTINGS_PERSISTENT_KEY" -- 这里的key与LuaConst.SettingKeyEnum一一对应 local keyFunctionEnum = { ["JWS2_LANGUAGE"] = stringKeyValue, -- 多语言 ["KEY_SETTING_BossViewLock"] = boolKeyValue, -- BOSS视角锁定 ["KEY_SETTING_Vibrate"] = boolKeyValue, -- 震动 ["KEY_SETTING_SkillCameraShake"] = boolKeyValue, -- 玩家技能震动 ["JWS2_SkillInterCutEnum"] = intKeyValue, -- 播小黑屋的类型(每次,每日首次,从不) ["JWS2_SkillInterCutHeroList"] = stringKeyValue, -- 每日首次播过小黑屋的武将列表 ["KEY_SETTING_PassTimeLine"] = boolKeyValue, -- 跳过精英/噩梦难度剧情 ["KEY_SETTING_Adaptive"] = boolKeyValue, -- 画质自适应开关 ["SettingQuality"] = intKeyValue, -- 画质等级 ["KEY_SETTING_Recommend"] = intKeyValue, -- 推荐 ["KEY_SETTING_ScreenResolution"] = intKeyValue, -- 分辨率 ["KEY_SETTING_ShaderQuality"] = intKeyValue, -- 材质效果 ["KEY_SETTING_ParticleQuality"] = intKeyValue, -- 特效等级 ["KEY_SETTING_AA"] = intKeyValue, -- 抗锯齿 ["KEY_SETTING_ShadowQuality"] = intKeyValue, -- 阴影 ["KEY_SETTING_Bloom"] = intKeyValue, -- 辉光 ["KEY_SETTING_VisualCulling"] = intKeyValue, -- 同屏人数 ["KEY_SETTING_FrameLimitation"] = intKeyValue, -- 帧率 ["KEY_SETTING_BgmState"] = boolKeyValue, -- 背景音开关 ["KEY_SETTING_BgmProgress"] = intKeyValue, -- 背景音音量 ["KEY_SETTING_SoundState"] = boolKeyValue, -- 音效开关 ["KEY_SETTING_SoundProgress"] = intKeyValue, -- 音效音量 ["KEY_SETTING_DubState"] = boolKeyValue, -- 配音开关 ["KEY_SETTING_DubProgress"] = intKeyValue, -- 配音音量 ["KEY_SETTING_DubVoice"] = stringKeyValue, -- 配音语言 ["KEY_SETTING_EnvironmentalState"] = boolKeyValue, -- 音效开关 ["KEY_SETTING_EnvironmentalProgress"] = intKeyValue, -- 音效音量 ["KEY_SETTING_LastLoginTime"] = intKeyValue, -- 上次登录时间戳 ["KEY_SETTING_KeyMap"] = tableKeyValue, -- PC版快捷键 } Setting_Model.SwitchLodType = { ReadSave=-1, --读取保存的 Manual=0, --玩家手动设置 Auto=1, --自动降低设置 } Setting_Model.curOpenView = 0 function Setting_Model.OnStartup() --TODO 重置一次画质档位到默认值,以便自适应画质机制生效,一段时间后可以移除该代码 if not UNITY_EDITOR and not LuaExt.FileExists("adaptive_quality_settings_has_reset") then local data = PersistentData.DeviceData:Get(SETTINGS_PERSISTENT_KEY) if data ~= nil then data[LuaConst.SettingKeyEnum.SettingQuality] = nil data[LuaConst.SettingKeyEnum.ScreenResolution] = nil data[LuaConst.SettingKeyEnum.ShaderQuality] = nil data[LuaConst.SettingKeyEnum.ParticleQuality] = nil data[LuaConst.SettingKeyEnum.AA] = nil data[LuaConst.SettingKeyEnum.ShadowQuality] = nil data[LuaConst.SettingKeyEnum.Bloom] = nil data[LuaConst.SettingKeyEnum.FrameLimitation] = nil PersistentData.DeviceData:Set(SETTINGS_PERSISTENT_KEY, data, true) LuaExt.FileWriteText("adaptive_quality_settings_has_reset", "") end end private.InitKeyPosition() NetManager.RegisterMsgCB(MessageEnums.MessageBreakAwayEntangle, private.OnOutOfStuckResp) NetManager.RegisterMsgCB(MessageEnums.MessagePlayerSetting, private.PlayerSettingResp) NetManager.RegisterMsgCB(MessageEnums.MessageChangeLanguage, private.OnPlayerChangeLanguageResp) EventSystem.Regist(EventID.New_Day_Refresh, private.ReSetSkillInterCutHeroList) EventSystem.Regist(EventID.Level_InitLevel, private.OnInitLevel) EventSystem.Regist(EventID.UIBattle_Level_CreateEntityByData, private.AfterCreatePlayersByArmyData) EventSystem.Regist(EventID.Entity_AfterAttackQuit, private.AfterAttackQuit) EventSystem.Regist(EventID.Entity_RecoverModel, private.OnChangeModel_Recover) --PC包做一下快捷键存档升级 if GameAppInfo.IsPCOrMacPackage() or UNITY_EDITOR then local savedKeyMap = Setting_Model.GetKeyValue(LuaConst.SettingKeyEnum.PCKeyMapSetting) --查询不到就初始化键位 if savedKeyMap then local hasKeyChanged = false if not savedKeyMap[LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_5] then savedKeyMap[LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_5] = 109 hasKeyChanged = true end if not savedKeyMap[LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_FAXIANG] then savedKeyMap[LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_FAXIANG] = 114 savedKeyMap[LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_STRATAGEM] = 102 hasKeyChanged = true end if not savedKeyMap[LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_GODBEAST] then savedKeyMap[LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_GODBEAST] = 118 hasKeyChanged = true end if hasKeyChanged then Setting_Model.SetPCKeyMap(savedKeyMap) end end end end --region ****多语言**** --客户端切语言的时候必定会进行下线逻辑,所以这个协议其实没啥用,服务器建议留着 function Setting_Model.SendSetLanguage(language) local msg = NetManager.GetPB("multilingual_pb").ChangeLanguageReq() msg.Language = Localization.GetLanguage2Server() NetManager.SendMessage(MessageEnums.MessageChangeLanguage,msg) end function private.OnPlayerChangeLanguageResp(msgResp) if msgResp.Resp.Code == 0 then end end --endregion ****多语言**** --region ****是否播小黑屋**** --每日5点后清掉本地存的“每日首次施放无双技能”的武将ID列表 function private.ReSetSkillInterCutHeroList() Setting_Model.SetKeyValue(LuaConst.SettingKeyEnum.SkillInterCutHeroList, "") end function Setting_Model.GetSkillInterCutType() local type = Setting_Model.GetKeyValue(LuaConst.SettingKeyEnum.SkillInterCutEnum) if type == nil or type < 1 then type = LuaConst.SkillInterCutEnum.Every end return type end -- 保存无双技能演出的次数状态 function Setting_Model.SetSkillInterCutType(type) if type > 0 and type <= 3 then Setting_Model.SetKeyValue(LuaConst.SettingKeyEnum.SkillInterCutEnum, type) end end --endregion ****是否播小黑屋**** function Setting_Model.SendOutOfStuck() if BattleDataGetter.IsTownLevel() then if nextCanUseTime then local value = nextCanUseTime - UTL.Time.GetServerTimestamp() if value > 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_system_escapeCD"],value) return end end local msg = NetManager.GetPB("goto_scene_pb").BreakAwayEntangleReq() local pos = BattleDataGetter.GetMainPlayerLastLogicPos() local x,z = FP.tonumberV2(pos) msg.Coordinate = string.format("%s|%s",x,z) NetManager.SendMessage(MessageEnums.MessageBreakAwayEntangle,msg) else CTL.Tips.AddTipsMsg(Const_IDS["IDS_system_escapeforbid"]) end end function private.OnOutOfStuckResp(resp) if resp.Resp.Code == 0 then nextCanUseTime = UTL.Time.GetServerTimestamp() + DataSheetManager.ConstData:GetDataByID("EscapeCD").IntValue UIManager.CloseView(Const_UI_Lua.UIEnum.UISettingMainPanel) end end --设置状态存到服务器 function Setting_Model.SendPlayerSetting() local hasSetting = false for k,v in pairs(private.SettingStateTab) do hasSetting = true break end if not hasSetting then return end local msg = NetManager.GetPB("setting_info_pb").PlayerSettingReq() for k,v in pairs(private.SettingStateTab) do local info = NetManager.GetPB("common_pb").SettingInfo() info.settingId = k info.state = v --传数组必须用insert,用下标会报错 table.insert(msg.settingInfo, info) end NetManager.SendMessage(MessageEnums.MessagePlayerSetting, msg) end function private.PlayerSettingResp(msgResp) if msgResp.Resp.Code == 0 then for _,v in ipairs(msgResp.settingInfo) do Setting_Model.PrepareSetSettingState(v.settingId, v.state) end end end --enterworld同步设置状态 function Setting_Model.SyncSettingInfo(infos) if infos then for _,v in ipairs(infos) do Setting_Model.PrepareSetSettingState(v.settingId, v.state) end end --坐骑自动骑乘默认需要开启,如果服务器返了空字段,需要手动设置为true if private.SettingStateTab[LuaConst.BattleSettingEnum.AutoRide] == nil then Setting_Model.PrepareSetSettingState(LuaConst.BattleSettingEnum.AutoRide,true) Setting_Model.SendPlayerSetting() end if Setting_Model.HasKey(LuaConst.SettingKeyEnum.LastLoginTime) then local lastTime = Setting_Model.GetKeyValue(LuaConst.SettingKeyEnum.LastLoginTime) if not UTL.Time.IsTimestampSameDay(lastTime) then private.ReSetSkillInterCutHeroList() else local time = UTL.Time.OsDateOriginal("%H", lastTime) if tonumber(time) < 5 then private.ReSetSkillInterCutHeroList() end end end Setting_Model.SetKeyValue(LuaConst.SettingKeyEnum.LastLoginTime, UTL.Time.GetServerTimestamp()) end function Setting_Model.ClearSettingStateTab() if private.SettingStateTab ~= nil then table.clear(private.SettingStateTab) end end function Setting_Model.PrepareSetSettingState(id,value) private.SettingStateTab[id] = value end function Setting_Model.GetSettingRideState() return Setting_Model.GetState(LuaConst.BattleSettingEnum.AutoRide) end function Setting_Model.GetSettingAutoMusouState() return Setting_Model.GetState(LuaConst.BattleSettingEnum.AutoMusou) end function Setting_Model.GetSettingAutoAdjutantSkillState() return Setting_Model.GetState(LuaConst.BattleSettingEnum.AutoAdjutantSkill) end function Setting_Model.GetSettingAutoPetAttackState() return Setting_Model.GetState(LuaConst.BattleSettingEnum.NotAutoPetAttack) end function Setting_Model.GetSettingAdjutantAttackDirState() return Setting_Model.GetState(LuaConst.BattleSettingEnum.AdjutantLockAttackDir) end function Setting_Model.GetState(battleSettingEnumValue) if private.SettingStateTab[battleSettingEnumValue] ~= nil then return private.SettingStateTab[battleSettingEnumValue] else return LuaConst.EDefaultPlayerSetting[battleSettingEnumValue] end end --- heroId对应的角色今天是否播放过无双技能演出 function Setting_Model.HasPlayedMusouShowToday(heroId) local heroIdList = Setting_Model.GetKeyValue(LuaConst.SettingKeyEnum.SkillInterCutHeroList) return string.find(heroIdList, tostring(heroId)) end function Setting_Model.SetSkillInterCutHeroList(heroId) local heroIdList = Setting_Model.GetKeyValue(LuaConst.SettingKeyEnum.SkillInterCutHeroList)..heroId.."," Setting_Model.SetKeyValue(LuaConst.SettingKeyEnum.SkillInterCutHeroList, heroIdList) end function private.OnInitLevel() private.cacheSetSkillList = {} private.TrySetMusouShowBySetting() end function private.AfterCreatePlayersByArmyData() private.TrySetMusouShowBySetting() end function private.TrySetMusouShowBySetting() if not BattleDataGetter.ShouldKeepSyncLevel() then local army if BattleDataGetter.IsOriginalArmy() then army = BattleDataGetter.GetMyPlayerArmy() else army = BattleDataGetter.GetSwitchArmyData().ArmyData_Table end --仅单机关卡 --↓↓↓↓↓↓↓↓单机关卡Init时,设置一下是否要开启无双技能演出 local showType = Setting_Model.GetSkillInterCutType() if showType == LuaConst.SkillInterCutEnum.Every then --每次无双技能释放 都 开启 无双技能演出 NotSyncBattleSetter.OpenMusouShow() elseif showType == LuaConst.SkillInterCutEnum.DayFirst then --每个英雄每天第1次释放无双时才显示技能演出 if army then local heroId for i,data in ipairs(army) do heroId = data.HeroID or data.HeroId or data.HeroDataID --这里是因为之前老代码很坑,命名在主城和战斗关卡居然不一样,所以写出这样奇怪的代码防止错误 if Setting_Model.HasPlayedMusouShowToday(heroId) then NotSyncBattleSetter.CloseMusouShowOfHero(heroId) end end end elseif showType == LuaConst.SkillInterCutEnum.Never then --从不显示无双技能演出 NotSyncBattleSetter.CloseMusouShow() end end end function private.AfterAttackQuit(entity) if not BattleDataGetter.ShouldKeepSyncLevel() then if entity:IsHero() then local curSkillData = entity.components.skillBase.CurSkillData if curSkillData ~= nil and curSkillData.AutoNextID == 0 then local belongToSkillData = entity:GetSkillData(curSkillData.BelongTo) if belongToSkillData.Type == LuaConst.SkillType.MusouAttack and belongToSkillData.KeyPosition == LuaConst.ESkillKeyPosition.MusouNormal and belongToSkillData.SceneReplace == LuaConst.SkillSceneReplaceType.None and not Setting_Model.HasPlayedMusouShowToday(entity:GetCharacterID()) then if Setting_Model.GetSkillInterCutType() == LuaConst.SkillInterCutEnum.DayFirst then if entity._logicInitData._modelData == entity.components.base.CurModelData then--没发生变身时才能换技能 NotSyncBattleSetter.CloseMusouShowOfHero(entity:GetCharacterID()) else private.cacheSetSkillList[entity.EntityID] = true end end Setting_Model.SetSkillInterCutHeroList(entity:GetCharacterID()) end end end end end function private.OnChangeModel_Recover(entity) if private.cacheSetSkillList[entity.EntityID] then private.cacheSetSkillList[entity.EntityID] = nil NotSyncBattleSetter.CloseMusouShowOfHero(entity:GetCharacterID()) end end --region ---------PersistentData.DeviceData---------- function Setting_Model.HasKey(key) local settingDatas = PersistentData.DeviceData:Get(SETTINGS_PERSISTENT_KEY) if not settingDatas then return false end return settingDatas[key] ~= nil end function Setting_Model.SetKeyValue(key, value) local keyValueType = keyFunctionEnum[key] if keyValueType == nil then logging.error(LTAG.ERROR, " 设置里没有保存这个keyValueType :", keyValueType) else local tb = PersistentData.DeviceData:Get(SETTINGS_PERSISTENT_KEY) if tb == nil then tb = { [key] = value } else tb[key] = value end PersistentData.DeviceData:Set(SETTINGS_PERSISTENT_KEY, tb, true) end end function Setting_Model.GetKeyValue(key) local keyValueType = keyFunctionEnum[key] if keyValueType == nil then logging.error(LTAG.ERROR, " 设置里没有保存这个key :", key) return nil else local settingDatas = PersistentData.DeviceData:Get(SETTINGS_PERSISTENT_KEY) if settingDatas and settingDatas[key] then return settingDatas[key] else return private.GetDefaultValue(keyValueType) end end end function private.GetDefaultValue(keyValueType) if keyValueType == stringKeyValue then return "" elseif keyValueType == intKeyValue then return 0 elseif keyValueType == boolKeyValue then return false elseif keyValueType == tableKeyValue then return nil end end --endregion ---------PersistentData.DeviceData---------- --region ---------网络 电量 电池状态---------- function Setting_Model.SetBatteryLevel(batteryLevel) private.batteryLevel = batteryLevel EventSystem.Dispatch(EventID.BatteryLevelChange, batteryLevel) end function Setting_Model.GetBatteryLevel() return private.batteryLevel end function Setting_Model.SetBatteryStatus(batteryStatus) private.batteryStatus = batteryStatus EventSystem.Dispatch(EventID.BatteryStatusChange, batteryStatus) end function Setting_Model.GetBatteryStatus() return private.batteryStatus end function Setting_Model.SetNetworkState(networkState) private.networkState = networkState EventSystem.Dispatch(EventID.NetworkStateChange, networkState) end function Setting_Model.GetNetworkState() return private.networkState end --endregion ---------网络 电量 电池状态---------- --region ---------PC版快捷键设置--------- function Setting_Model.SetPCKeyMap(keyMap) Setting_Model.SetKeyValue(LuaConst.SettingKeyEnum.PCKeyMapSetting,keyMap) end function Setting_Model.GetPCKeyMap() local savedKeyMap = Setting_Model.GetKeyValue(LuaConst.SettingKeyEnum.PCKeyMapSetting) --查询不到就初始化键位 if savedKeyMap == nil then --value对应KeyCode.cs savedKeyMap = Setting_Model.ResetKeyMap() end local copyKeyMap = {} for i,v in pairs(savedKeyMap) do copyKeyMap[i] = v end return copyKeyMap end function Setting_Model.ApplyPCKeyMapToCSharp() local keyMap = Setting_Model.GetPCKeyMap() AuxUtil.ApplyKeyMap(keyMap) AuxUtil.ApplyValidKeyArray(DataSheetManager.ConstData:GetDataByID("PcClientKey").IntListValue) end function Setting_Model.ResetKeyMap() local savedKeyMap = { [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_NORMAL] = 32, --space [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_1] = 106, --J [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_2] = 107, --K [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_3] = 108, --L [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_4] = 59, --; [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_5] = 109, --M; [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_STRATAGEM] = 102, -- F [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_FAXIANG] = 114, -- R [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_GODBEAST] = 118, -- R [LuaConst.KeyMapEnum.EW_KEYMAP_SKILL_BTN_DODGE] = 304, --shift [LuaConst.KeyMapEnum.EW_KEYMAP_MOVE_FORWARD] = 119, --W [LuaConst.KeyMapEnum.EW_KEYMAP_MOVE_BACK] = 115, --S [LuaConst.KeyMapEnum.EW_KEYMAP_MOVE_LEFT] = 97, --A [LuaConst.KeyMapEnum.EW_KEYMAP_MOVE_RIGHT] = 100, --D [LuaConst.KeyMapEnum.EW_KEYMAP_TEAM_MIDDLE] = 50, --2 [LuaConst.KeyMapEnum.EW_KEYMAP_TEAM_REAR] = 51, --3 [LuaConst.KeyMapEnum.EW_KEYMAP_SETTINGS] = 282, --F1 [LuaConst.KeyMapEnum.EW_KEYMAP_ENTER] = 13, --Enter } --todo 等mac分支回来这里加上pc和mac判断 if UNITY_EDITOR or GameAppInfo.IsPCOrMacPackage() then savedKeyMap[LuaConst.KeyMapEnum.EW_KEYMAP_ROTATECAMERA_LEFT] = 113 savedKeyMap[LuaConst.KeyMapEnum.EW_KEYMAP_ROTATECAMERA_RIGHT] = 101 end Setting_Model.SetPCKeyMap(savedKeyMap) return savedKeyMap end function Setting_Model.GetKeyPositionByKeyCode(keycode) local tb = private.keyPosition[keycode] return tb[1],tb[2] end function Setting_Model.GetKeyStrByKeyCode(keycode) local tb = private.keyPosition[keycode] if tb == nil then logging.error(LTAG.ERROR, "ConstData表里的PcClientKey:", keycode, " 没有找到对应的按键位置!") end return tb[3] end function private.InitKeyPosition() if GameAppInfo.IsPCOrMacPackage() then -- key 是 keycode -- value 是 对应键盘上的XY坐标值 和 对应的字符串值 private.keyPosition = { [0] = {-10000,-10000,""},-- 0代表没有设置键位 [27] = {-704,204,"Esc"}, [282] = {-544,204,"F1"}, [283] = {-462,204,"F2"}, [284] = {-380,204,"F3"}, [285] = {-298,204,"F4"}, [286] = {-176,204,"F5"}, [287] = {-94,204,"F6"}, [288] = {-12,204,"F7"}, [289] = {70 ,204,"F8"}, [290] = {192,204,"F9"}, [291] = {274,204,"F10"}, [292] = {356,204,"F11"}, [293] = {438,204,"F12"}, [316] = {540,204,"Print"}, [302] = {622,204,"ScrollLock"}, [318] = {704,204,"PauseBreak"}, [96] = {-704,91,"`"}, [49] = {-621,91,"1"}, [50] = {-539,91,"2"}, [51] = {-457,91,"3"}, [52] = {-375,91,"4"}, [53] = {-293,91,"5"}, [54] = {-211,91,"6"}, [55] = {-128,91,"7"}, [56] = {-46,91,"8"}, [57] = {36,91,"9"}, [48] = {118,91,"0"}, [45] = {200,91,"-"}, [61] = {282,91,"="}, [8] = {402,91,"Backspace"}, [277] = {540,91,"Insert"}, [278] = {622,91,"Home"}, [280] = {704,91,"PageUp"}, [9] = {-682,7,"Tab"}, [113] = {-578,7,"Q"}, [119] = {-496,7,"W"}, [101] = {-414,7,"E"}, [114] = {-332,7,"R"}, [116] = {-250,7,"T"}, [121] = {-167,7,"Y"}, [117] = {-85,7,"U"}, [105] = {-3,7,"I"}, [111] = {79,7,"O"}, [112] = {161,7,"P"}, [91] = {243,7,"["}, [93] = {325,7,"]"}, [92] = {423,7,"|"}, [127] = {540,7,"Delete"}, [279] = {622,7,"End"}, [281] = {704,7,"PageDown"}, [301] = {-670,-77,"CapsLock"}, [97] = {-555,-77,"A"}, [115] = {-473,-77,"S"}, [100] = {-391,-77,"D"}, [102] = {-308,-77,"F"}, [103] = {-226,-77,"G"}, [104] = {-144,-77,"H"}, [106] = {-62,-77,"J"}, [107] = {20,-77,"K"}, [108] = {103,-77,"L"}, [59] = {185,-77,";"}, [39] = {266,-77,"'"}, [13] = {393,-77,"Enter"}, [304] = {-655,-162,"LeftShift"}, [122] = {-525,-162,"Z"}, [120] = {-442,-162,"X"}, [99] = {-360,-162,"C"}, [118] = {-278,-162,"V"}, [98] = {-196,-162,"B"}, [110] = {-114,-162,"N"}, [109] = {-31,-162,"M"}, [44] = {51,-162,","}, [46] = {133,-162,"."}, [47] = {215,-162,"/"}, [303] = {367,-162,"RightShift"}, [273] = {622,-162,"↑"}, [306] = {-682,-245,"LeftCtrl"}, [311] = {-578,-245,"LeftWin"}, [308] = {-495,-245,"LeftAlt"}, [32] = {-159,-245,"Space"}, [307] = {176,-245,"RightAlt"}, [312] = {258,-245,"RightWin"}, [305] = {431,-245,"RightCtrl"}, [276] = {540,-245,"←"}, [274] = {622,-245,"↓"}, [275] = {704,-245,"→"}, } end end --endregion ---------PC版快捷键设置--------- return Setting_Model