From 2381db8ea6752c3bb21c1cc9964ee5943cf1bbe5 Mon Sep 17 00:00:00 2001 From: 1NS Date: Mon, 30 Sep 2024 10:09:06 +0300 Subject: [PATCH] Upload v4.1 all info about changes in release notes --- moonloader/MappingToolkit.lua | 926 ++++++++++++++---- .../resource/mappingtoolkit/players.txt | 1 - 2 files changed, 761 insertions(+), 166 deletions(-) delete mode 100644 moonloader/resource/mappingtoolkit/players.txt diff --git a/moonloader/MappingToolkit.lua b/moonloader/MappingToolkit.lua index 4c8a69f..21c7dcd 100644 --- a/moonloader/MappingToolkit.lua +++ b/moonloader/MappingToolkit.lua @@ -4,7 +4,7 @@ script_description("Assistant for mappers") script_dependencies('imgui', 'lib.samp.events') script_properties("work-in-pause") script_url("https://github.com/ins1x/MappingToolkit") -script_version("4.0") +script_version("4.1") -- script_moonloader(16) moonloader v.0.26 -- tested on sa-mp client version: 0.3.7 R1 -- activaton: ALT + X (show main menu) or command /toolkit @@ -32,24 +32,24 @@ local ini = inicfg.load({ backtoworld = true, camdist = "1", cbvalautocomplete = true, + cbdefaultradius = 0.1, cbnewactivation = true, cbnewactivationitem = 31, checkupdates = true, chatfilter = true, chathidecb = false, + chathiderp = false, chatinputdrop = false, debug = false, dialogautocomplete = true, disconnecttime = 0, devmodelabeldist = 50.0, drawdist = "450", - editkey = true, editnocol = false, extendedmenues = true, fov = 70, fog = "200", flymodespeed = 0.3, - flymodeonj = false, freezechat = false, hotkeys = true, imguifont = "trebucbd", @@ -84,6 +84,15 @@ local ini = inicfg.load({ weather = 0, worldsavereminder = false, }, + hotkeyactions = { + keyJ = "/flymode", + keyK = "", + keyL = "/lock", + keyN = "", + keyZ = "", + keyI = "", + keyU = "/animlist", + }, mentions = { chatmentions = false, usecolor = false, @@ -155,7 +164,10 @@ local hiddenObjects = {} local chatbuffer = {} local chatfilter = {} local hiddenPlayerObjects = {} - +local streamedTextures = { + "","","","","","","","", + "","","","","","","","" +} -- should be global! vehiclesTotal = 0 playersTotal = 0 @@ -178,6 +190,7 @@ local dialog = { local dialoghook = { backtoworld = false, cbnewactivation = false, + suspendcbactivation = false, saveworld = false, saveworldname = false, loadworld = false, @@ -189,6 +202,10 @@ local dialoghook = { cbvalue = false, olist = false, previewdialog = false, + spcars = false, + resetguns = false, + resetvehs = false, + vkickall = false, devmenutoggle = false } @@ -219,16 +236,15 @@ local checkbox = { anticapsads = imgui.ImBool(ini.settings.anticapsads), antichatbot = imgui.ImBool(ini.settings.antichatbot), remapnum = imgui.ImBool(ini.settings.remapnum), - editkey = imgui.ImBool(ini.settings.editkey), skinid = imgui.ImInt(ini.settings.skinid), showidonhud = imgui.ImBool(ini.settings.showidonhud), skipomenu = imgui.ImBool(ini.settings.skipomenu), - flymodeonj = imgui.ImBool(ini.settings.flymodeonj), cbvalautocomplete = imgui.ImBool(ini.settings.cbvalautocomplete), cbnewactivation = imgui.ImBool(ini.settings.cbnewactivation), trailerspawnfix = imgui.ImBool(ini.settings.trailerspawnfix), skipvehnotify = imgui.ImBool(ini.settings.skipvehnotify), novehiclevisualdamage = imgui.ImBool(ini.settings.novehiclevisualdamage), + saveworldname = imgui.ImBool(ini.settings.saveworldname), showpanel = imgui.ImBool(ini.panel.showpanel), panelbackground = imgui.ImBool(ini.panel.background), @@ -295,6 +311,7 @@ local checkbox = { hidelastobject = imgui.ImBool(false), bliplastobject = imgui.ImBool(false), chatinputdrop = imgui.ImBool(false), + chathiderp = imgui.ImBool(false), test = imgui.ImBool(false) } @@ -307,6 +324,7 @@ local input = { rendselectedmodelid = imgui.ImInt(0), removetxdid = imgui.ImInt(0), reminderdelay = imgui.ImInt(ini.settings.reminderdelay), + cbdefaultradius = imgui.ImFloat(ini.settings.cbdefaultradius), colorpicker = imgui.ImFloat4(1, 0, 0, 1) } @@ -325,8 +343,9 @@ local slider = { local tabmenu = { main = 1, objects = 1, - settings = 1, + settings = 9, onlinesearch = 1, + colorformat = 1, info = 1, mp = 1, cmds = 1 @@ -335,6 +354,7 @@ local tabmenu = { local textbuffer = { vehiclename = imgui.ImBuffer(64), findplayer = imgui.ImBuffer(32), + cbdefaultradius = imgui.ImBuffer(6), objectid = imgui.ImBuffer(48), rgb = imgui.ImBuffer(256), fixcamx = imgui.ImBuffer(12), @@ -359,6 +379,16 @@ local textbuffer = { local combobox = { cbactivations = imgui.ImInt(ini.settings.cbnewactivationitem), imguitheme = imgui.ImInt(ini.settings.imguitheme), + + hotkeyJaction = imgui.ImInt(0), + hotkeyKaction = imgui.ImInt(0), + hotkeyIaction = imgui.ImInt(0), + hotkeyLaction = imgui.ImInt(0), + hotkeyRaction = imgui.ImInt(0), + hotkeyNaction = imgui.ImInt(0), + hotkeyZaction = imgui.ImInt(0), + hotkeyUaction = imgui.ImInt(0), + chatselect = imgui.ImInt(0), selecttable = imgui.ImInt(2), objects = imgui.ImInt(0), @@ -397,6 +427,7 @@ local LastRemovedObject = { local LastData = { lastWorldNumber = 0, -- is not same GetVirtualWorldId lastWorldName = "", + lastCommand = "", lastClickedTextdrawId = 0, lastDialogInput = nil, lastDialogButton = nil, @@ -410,7 +441,7 @@ local LastData = { } local imguiThemeNames = { - "Dark Night", "Grey-Blue", "Brutal" + "Dark Night", "Grey-Blue", "Brutal", "Training" } local gamestates = { @@ -439,6 +470,22 @@ local cbActivationItemsList = { u8"Клик на текстдрав",u8"Отправить сообщение",u8"Выбор объекта" } +local hotkeysActivationList = { + u8"Не использовать", u8"Прыгнуть", u8"Заспавнить себя", u8"Слапнуть себя", + u8"Взять джетпак", u8"Взять bmx", u8"Взять оружие", u8"Взять транспорт", + u8"Перейти в режим полета", u8"Спек за ближайшим игроком", + u8"Перейти в режим редактирования", u8"Выбрать объект (по клику)", + u8"Открыть меню редактирования", u8"Открыть инфо по объекту", + u8"Открыть список анимаций", u8"Создать комадный блок", + u8"Откр/Закр транспорт", u8"Починить транспорт", u8"Открыть меню транспорта", +} + +local hotkeysActivationCmds = { + "", "/jump", "/spawnme", "/slapme", "/jetpack", "/veh 481", "/weapon", + "/veh", "/flymode", "/spec", "/oedit", "/csel", "/omenu", "/oinfo", + "/animlist", "/cb", "/lock", "/fix", "/vmenu" +} + local weaponNames = { [0] = 'Fists', [1] = 'Brass Knuckles', @@ -629,6 +676,9 @@ function main() memory.setfloat(13210352, ini.settings.fog, true) textbuffer.vehiclename.v = 'bmx' + textbuffer.cbdefaultradius.v = string.format("%.1f", ini.settings.cbdefaultradius) + + hotkeyActionInit() if ini.settings.worldsavereminder then SaveReminder() @@ -766,14 +816,6 @@ function main() end end - if isTraining and ini.settings.editkey then - -- N key edit object - if isKeyJustPressed(0x4E) and not isCharInAnyCar(playerPed) and not sampIsChatInputActive() and not sampIsDialogActive() - and not isPauseMenuActive() and not isSampfuncsConsoleActive() and not dialoghook.textureslist then - if isWorldHoster then sampSendChat("/csel") end - end - end - if isTraining and ini.settings.cbvalautocomplete then -- CTRL + SHIFT + V if isKeyDown(0x11) and isKeyDown(0x10) and isKeyDown(0x56) @@ -788,13 +830,6 @@ function main() end end - if isTraining and ini.settings.flymodeonj then - if isKeyJustPressed(0x4A) and not isSampfuncsConsoleActive() -- J key - and not sampIsChatInputActive() and not isPauseMenuActive() then - sampSendChat("/flymode") - end - end - if ini.settings.hotkeys then -- In onSendEditObject copy object modelid on RMB if isKeyJustPressed(0x02) and editResponse == 2 and not sampIsChatInputActive() @@ -804,6 +839,34 @@ function main() sampAddChatMessage("[SCRIPT]: {FFFFFF} modelid скопирован в буфер обмена", 0x0FF6600) end + if not sampIsChatInputActive() and not sampIsDialogActive() + and not isPauseMenuActive() and not isSampfuncsConsoleActive() then + if isKeyJustPressed(0x4A) and ini.hotkeyactions.keyJ ~= nil and string.len(ini.hotkeyactions.keyJ) > 1 then + sampSendChat(tostring(ini.hotkeyactions.keyJ)) + end + if isKeyJustPressed(0x49) and ini.hotkeyactions.keyI ~= nil and string.len(ini.hotkeyactions.keyI) > 1 then + sampSendChat(tostring(ini.hotkeyactions.keyI)) + end + if isKeyJustPressed(0x4B) and ini.hotkeyactions.keyK ~= nil and string.len(ini.hotkeyactions.keyK) > 1 then + sampSendChat(tostring(ini.hotkeyactions.keyK)) + end + if isKeyJustPressed(0x4C) and ini.hotkeyactions.keyL ~= nil and string.len(ini.hotkeyactions.keyL) > 1 then + sampSendChat(tostring(ini.hotkeyactions.keyL)) + end + if isKeyJustPressed(0x4E) and ini.hotkeyactions.keyN ~= nil and string.len(ini.hotkeyactions.keyN) > 1 then + sampSendChat(tostring(ini.hotkeyactions.keyN)) + end + if isKeyJustPressed(0x52) and ini.hotkeyactions.keyR ~= nil and string.len(ini.hotkeyactions.keyR) > 1 then + sampSendChat(tostring(ini.hotkeyactions.keyR)) + end + if isKeyJustPressed(0x5A) and ini.hotkeyactions.keyZ ~= nil and string.len(ini.hotkeyactions.keyZ) > 1 then + sampSendChat(tostring(ini.hotkeyactions.keyZ)) + end + if isKeyJustPressed(0x55) and ini.hotkeyactions.keyU ~= nil and string.len(ini.hotkeyactions.keyU) > 1 then + sampSendChat(tostring(ini.hotkeyactions.keyU)) + end + end + if isTraining and ini.settings.remapnum then -- PageUP <-- Num4 (and editMode == 4) if isKeyDown(0x21) and not sampIsChatInputActive() @@ -847,11 +910,11 @@ function main() if isTraining then -- bind car lock/unlock on L key - if isKeyJustPressed(0x4C) and not sampIsChatInputActive() - and not sampIsDialogActive() and not isPauseMenuActive() - and not isSampfuncsConsoleActive() then - sampSendChat("/lock") - end + -- if isKeyJustPressed(0x4C) and not sampIsChatInputActive() + -- and not sampIsDialogActive() and not isPauseMenuActive() + -- and not isSampfuncsConsoleActive() then + -- sampSendChat("/lock") + -- end -- Backspace reset texturelist to 0 page if editMode == 4 and dialoghook.textureslist then @@ -1292,7 +1355,7 @@ function imgui.OnDrawFrame() zone = getZoneName(positionX, positionY, positionZ) if zone then - imgui.TextColoredRGB(string.format("Район: {696969}%s", zone)) + imgui.TextColoredRGB(string.format("Вы находитесь в районе: {696969}%s", zone)) if string.len(LastData.lastWorldName) > 1 then imgui.TextColoredRGB("Мир: "..LastData.lastWorldName) end @@ -1404,6 +1467,16 @@ function imgui.OnDrawFrame() if imgui.Button(u8"Заспавнить себя", imgui.ImVec2(200, 25)) then sampSendChat("/spawnme") end + + if imgui.Button(u8"Выбрать интерьер", imgui.ImVec2(200, 25)) then + sampSendChat("/int") + dialog.main.v = false + end + imgui.SameLine() + if imgui.Button(u8"Выбрать спавн", imgui.ImVec2(200, 25)) then + sampSendChat("/team") + dialog.main.v = false + end end imgui.Spacing() @@ -2446,7 +2519,35 @@ function imgui.OnDrawFrame() local id = getLocalPlayerId() local score = sampGetPlayerScore(id) local ip, port = sampGetCurrentServerAddress() - + local major, minor, majorRev, minorRev, game, region, steam, cracked = getGameVersion() + + local scriptParams = thisScript() + imgui.Text(u8"Script: "..scriptParams.name.." version "..scriptParams.version) + imgui.Text(u8"path: "..scriptParams.path) + imgui.Text(u8"directory: "..scriptParams.directory) + imgui.Text(u8"filename: "..scriptParams.filename) + imgui.Text(u8"scriptid: "..scriptParams.id.." dead: "..tostring(scriptParams.dead).." frozen: "..tostring(scriptParams.frozen)) + local pos_x, pos_y = getScreenResolution() + imgui.Text(u8"resolution: "..pos_x.."x"..pos_y) + + if not isGameVersionOriginal() then + imgui.TextColoredRGB(string.format("{FF0000}Not original game version %s.%s.%s.%s", major, minor, majorRev, minorRev)) + end + if steam then + imgui.TextColoredRGB(string.format("{FF0000}Steam game version %s.%s.%s.%s", major, minor, majorRev, minorRev)) + end + + if imgui.CollapsingHeader(u8"Загруженные скрипты:") then + --local major, minor, majorRev, minorRev, game, region, steam, cracked = getGameVersion() + imgui.Text("Loaded scripts:") + for _, s in pairs(script.list()) do + if string.len(s.version) > 1 then + imgui.Selectable(string.format("- %s v%s", s.name, s.version)) + else + imgui.Selectable(string.format("- %s", s.name)) + end + end + end if imgui.CollapsingHeader(u8"Состояние:") then imgui.Text(u8'Текущий Gamestate: '..gamestates[sampGetGamestate() + 1]) @@ -2667,47 +2768,6 @@ function imgui.OnDrawFrame() end end end - if imgui.CollapsingHeader(u8"Скрипт:") then - - local scriptParams = thisScript() - imgui.Text(u8"Script: "..scriptParams.name.." version: "..scriptParams.version) - imgui.Text(u8"path: "..scriptParams.path) - imgui.Text(u8"directory: "..scriptParams.directory) - imgui.Text(u8"filename: "..scriptParams.filename) - imgui.Text(u8"scriptid: "..scriptParams.id.." dead: "..tostring(scriptParams.dead).." frozen: "..tostring(scriptParams.frozen)) - local pos_x, pos_y = getScreenResolution() - imgui.Text(u8"resolution: "..pos_x.."x"..pos_y) - - if imgui.Button(u8"Перегрузить скрипт",imgui.ImVec2(170, 25)) then - sampAddChatMessage("{696969}Mapping Toolkit{FFFFFF} перезагружается.", -1) - sampAddChatMessage("Для перезапуска можно использовтаь комбинацию клавиш {696969}CTRL + R.", -1) - thisScript():unload() - end - imgui.SameLine() - if imgui.Button(u8"Выгрузить скрипт",imgui.ImVec2(170, 25)) then - sampAddChatMessage("{696969}Mapping Toolkit{FFFFFF} успешно выгружен.", -1) - sampAddChatMessage("Для повторного запуска используйте комбинацию клавиш {696969}CTRL + R.", -1) - thisScript():unload() - end - - if imgui.Button(u8"Проверить обновления",imgui.ImVec2(170, 25)) then - if not checkScriptUpdates() then - sampAddChatMessage("{696969}Mapping Toolkit {FFFFFF}Установлена актуальная версия {696969}"..thisScript().version, -1) - --os.execute('explorer https://github.com/ins1x/MappingToolkit/releases') - end - end - imgui.SameLine() - if imgui.Button(u8"Сбросить настройки",imgui.ImVec2(170, 25)) then - os.rename(getGameDirectory().."//moonloader//config//mappingtoolkit.ini", getGameDirectory().."//moonloader//config//backup_mappingtoolkit.ini") - sampAddChatMessage("Настройки были сброшены на стандартные. Скрипт автоматически перезагрузится.",-1) - sampAddChatMessage("Резервную копию ваших предыдущих настроек можно найти в moonloader/config.",-1) - reloadScripts() - end - if imgui.Checkbox(u8("Проверять обновления автоматически (без загрузки)"), checkbox.checkupdates) then - ini.settings.checkupdates = checkbox.checkupdates.v - inicfg.save(ini, configIni) - end - end elseif tabmenu.settings == 8 then @@ -2750,6 +2810,11 @@ function imgui.OnDrawFrame() inicfg.save(ini, configIni) end + if imgui.Checkbox(u8("Скрывать отыгровки (/me, /do, /ame ..)"), checkbox.chathiderp) then + ini.settings.chathiderp = checkbox.chathiderp.v + inicfg.save(ini, configIni) + end + if isTraining then if imgui.Checkbox(u8("Скрывать приставку [CB] в чате"), checkbox.chathidecb) then ini.settings.chathidecb = checkbox.chathidecb.v @@ -3196,6 +3261,14 @@ function imgui.OnDrawFrame() end if imgui.CollapsingHeader(u8"Автодополнение:") then + + if imgui.Checkbox(u8'Автодополнение имени мира (при сохранении)', checkbox.saveworldname) then + ini.settings.saveworldname = checkbox.saveworldname.v + inicfg.save(ini, configIni) + end + imgui.SameLine() + imgui.TextQuestion("( ? )", u8"При сохранении мира поставит в поле ввода предыдущее имя (только для TRAINING)") + if imgui.Checkbox(u8'Автодополнение в диалогах КБ', checkbox.cbvalautocomplete) then ini.settings.cbvalautocomplete = checkbox.cbvalautocomplete.v inicfg.save(ini, configIni) @@ -3219,6 +3292,18 @@ function imgui.OnDrawFrame() imgui.PopItemWidth() end + imgui.Text(u8"Радиус активации КБ по-умолчанию:") + imgui.SameLine() + imgui.PushItemWidth(60) + --if imgui.InputFloat("##inputcbdefaultradius", input.cbdefaultradius, 0.1, 9999, '%.2f') then + if imgui.InputText("##Buffercbdefaultradius", textbuffer.cbdefaultradius, imgui.InputTextFlags.CharsDecimal) then + ini.settings.cbdefaultradius = string.format("%.1f", textbuffer.cbdefaultradius.v) + inicfg.save(ini, configIni) + end + imgui.PopItemWidth() + imgui.SameLine() + imgui.TextQuestion("( ? )", u8"При создании КБ изменяет радиус активации (Принимает значения от 0.1 до 9999)") + if imgui.Checkbox(u8'Скипать меню выбора объектов при отмене в /omenu', checkbox.skipomenu) then ini.settings.skipomenu = checkbox.skipomenu.v inicfg.save(ini, configIni) @@ -3235,7 +3320,7 @@ function imgui.OnDrawFrame() imgui.SameLine() imgui.TextQuestion("( ? )", u8"При посадке в транспорт автоматически заводит двигатель") - if imgui.Checkbox(u8'Не спавнить игрока внутри трейлеров и спец.транспорта', checkbox.trailerspawnfix) then + if imgui.Checkbox(u8'Не спавниться внутри трейлеров и спец.транспорта', checkbox.trailerspawnfix) then ini.settings.trailerspawnfix = checkbox.trailerspawnfix.v inicfg.save(ini, configIni) end @@ -3291,33 +3376,124 @@ function imgui.OnDrawFrame() imgui.SameLine() imgui.TextQuestion("( ? )", u8"Активировать дополнительные горячие клавиши") - if imgui.Checkbox(u8'Переходить в режим редактирования на клавишу N', checkbox.editkey) then - ini.settings.editkey = checkbox.editkey.v + if imgui.Checkbox(u8'Переключение текстур на PgUp и PgDown', checkbox.remapnum) then + ini.settings.remapnum = checkbox.remapnum.v inicfg.save(ini, configIni) end imgui.SameLine() - imgui.TextQuestion("( ? )", u8"Будет включать режим редактирования при нажатии на N") + imgui.TextQuestion("( ? )", u8"Заменить переключение текстур с Numpad на PgUp и PgDown (Для ноутбуков)") - if imgui.Checkbox(u8'Переключение текстур на PgUp и PgDown', checkbox.remapnum) then - ini.settings.remapnum = checkbox.remapnum.v + imgui.PushItemWidth(270) + imgui.PushStyleVar(imgui.StyleVar.ItemSpacing, imgui.ImVec2(16, 4)) + imgui.Text(u8"Клавиша J: ") + imgui.SameLine() + if imgui.Combo(u8'##ComboBoxhotkeyJaction', combobox.hotkeyJaction, + hotkeysActivationList, #hotkeysActivationList) then + ini.hotkeyactions.keyJ = tostring(hotkeysActivationCmds[combobox.hotkeyJaction.v+1]) inicfg.save(ini, configIni) + sampAddChatMessage("[SCRIPT]: {FFFFFF} Выбрано действие - ".. + u8:decode(tostring(hotkeysActivationList[combobox.hotkeyJaction.v+1])), 0x0FF6600) end + + imgui.Text(u8"Клавиша I: ") imgui.SameLine() - imgui.TextQuestion("( ? )", u8"Заменить переключение текстур с Numpad на PgUp и PgDown (Для ноутбуков)") + if imgui.Combo(u8'##ComboBoxhotkeyIaction', combobox.hotkeyIaction, + hotkeysActivationList, #hotkeysActivationList) then + ini.hotkeyactions.keyI = tostring(hotkeysActivationCmds[combobox.hotkeyIaction.v+1]) + inicfg.save(ini, configIni) + sampAddChatMessage("[SCRIPT]: {FFFFFF} Выбрано действие - ".. + u8:decode(tostring(hotkeysActivationList[combobox.hotkeyIaction.v+1])), 0x0FF6600) + end + + imgui.Text(u8"Клавиша K: ") + imgui.SameLine() + if imgui.Combo(u8'##ComboBoxhotkeyKaction', combobox.hotkeyKaction, + hotkeysActivationList, #hotkeysActivationList) then + ini.hotkeyactions.keyK = tostring(hotkeysActivationCmds[combobox.hotkeyKaction.v+1]) + inicfg.save(ini, configIni) + sampAddChatMessage("[SCRIPT]: {FFFFFF} Выбрано действие - ".. + u8:decode(tostring(hotkeysActivationList[combobox.hotkeyKaction.v+1])), 0x0FF6600) + end + + imgui.Text(u8"Клавиша L: ") + imgui.SameLine() + if imgui.Combo(u8'##ComboBoxhotkeyLaction', combobox.hotkeyLaction, + hotkeysActivationList, #hotkeysActivationList) then + ini.hotkeyactions.keyL = tostring(hotkeysActivationCmds[combobox.hotkeyLaction.v+1]) + inicfg.save(ini, configIni) + sampAddChatMessage("[SCRIPT]: {FFFFFF} Выбрано действие - ".. + u8:decode(tostring(hotkeysActivationList[combobox.hotkeyLaction.v+1])), 0x0FF6600) + end - if imgui.Checkbox(u8'Переход в режим полета на J', checkbox.flymodeonj) then - ini.settings.flymodeonj = checkbox.flymodeonj.v + imgui.Text(u8"Клавиша N: ") + imgui.SameLine() + if imgui.Combo(u8'##ComboBoxhotkeyNaction', combobox.hotkeyNaction, + hotkeysActivationList, #hotkeysActivationList) then + ini.hotkeyactions.keyN = tostring(hotkeysActivationCmds[combobox.hotkeyNaction.v+1]) inicfg.save(ini, configIni) + sampAddChatMessage("[SCRIPT]: {FFFFFF} Выбрано действие - ".. + u8:decode(tostring(hotkeysActivationList[combobox.hotkeyNaction.v+1])), 0x0FF6600) end + + imgui.Text(u8"Клавиша R: ") imgui.SameLine() - imgui.TextQuestion("( ? )", u8"Переключает режим полета на клавишу J (Доступно только для хостеров мира)") - + if imgui.Combo(u8'##ComboBoxhotkeyRaction', combobox.hotkeyRaction, + hotkeysActivationList, #hotkeysActivationList) then + ini.hotkeyactions.keyR = tostring(hotkeysActivationCmds[combobox.hotkeyRaction.v+1]) + inicfg.save(ini, configIni) + sampAddChatMessage("[SCRIPT]: {FFFFFF} Выбрано действие - ".. + u8:decode(tostring(hotkeysActivationList[combobox.hotkeyRaction.v+1])), 0x0FF6600) + end + + imgui.Text(u8"Клавиша Z: ") + imgui.SameLine() + if imgui.Combo(u8'##ComboBoxhotkeyZaction', combobox.hotkeyZaction, + hotkeysActivationList, #hotkeysActivationList) then + ini.hotkeyactions.keyZ = tostring(hotkeysActivationCmds[combobox.hotkeyZaction.v+1]) + inicfg.save(ini, configIni) + sampAddChatMessage("[SCRIPT]: {FFFFFF} Выбрано действие - ".. + u8:decode(tostring(hotkeysActivationList[combobox.hotkeyZaction.v+1])), 0x0FF6600) + end + + imgui.Text(u8"Клавиша U: ") + imgui.SameLine() + if imgui.Combo(u8'##ComboBoxhotkeyUaction', combobox.hotkeyUaction, + hotkeysActivationList, #hotkeysActivationList) then + ini.hotkeyactions.keyU = tostring(hotkeysActivationCmds[combobox.hotkeyUaction.v+1]) + inicfg.save(ini, configIni) + sampAddChatMessage("[SCRIPT]: {FFFFFF} Выбрано действие - ".. + u8:decode(tostring(hotkeysActivationList[combobox.hotkeyUaction.v+1])), 0x0FF6600) + end + imgui.PopStyleVar() + imgui.PopItemWidth() + + if imgui.Button(u8"Вернуть на стандартные",imgui.ImVec2(200, 25)) then + ini.hotkeyactions.keyJ = "/flymode" + ini.hotkeyactions.keyI = "" + ini.hotkeyactions.keyK = "" + ini.hotkeyactions.keyL = "/lock" + ini.hotkeyactions.keyN = "" + ini.hotkeyactions.keyR = "" + ini.hotkeyactions.keyZ = "" + ini.hotkeyactions.keyU = "/animlist" + inicfg.save(ini, configIni) + sampAddChatMessage("[SCRIPT]: {FFFFFF} Восстановлены стандартные значения", 0x0FF6600) + end + imgui.TextColoredRGB("{696969}Ознакомиться со списком всех горячих клавиш возможно в разделе: ") - imgui.TextColoredRGB("{696969}Информация - Горячие клавиши.") + imgui.TextColoredRGB("{696969}Информация - Команды - Горячие клавиши.") end end -- end tabmenu.settings imgui.NextColumn() + if tabmenu.settings == 9 then + imgui.PushStyleColor(imgui.Col.Button, imgui.GetStyle().Colors[imgui.Col.ButtonHovered]) + if imgui.Button(u8"Персональное",imgui.ImVec2(105, 30)) then tabmenu.settings = 9 end + imgui.PopStyleColor() + else + if imgui.Button(u8"Персональное",imgui.ImVec2(105, 30)) then tabmenu.settings = 9 end + end + if tabmenu.settings == 1 then imgui.PushStyleColor(imgui.Col.Button, imgui.GetStyle().Colors[imgui.Col.ButtonHovered]) if imgui.Button(u8"Координаты",imgui.ImVec2(105, 30)) then tabmenu.settings = 1 end @@ -3367,14 +3543,6 @@ function imgui.OnDrawFrame() if imgui.Button(u8"Чатик",imgui.ImVec2(105, 30)) then tabmenu.settings = 8 end end - if tabmenu.settings == 9 then - imgui.PushStyleColor(imgui.Col.Button, imgui.GetStyle().Colors[imgui.Col.ButtonHovered]) - if imgui.Button(u8"Персональное",imgui.ImVec2(105, 30)) then tabmenu.settings = 9 end - imgui.PopStyleColor() - else - if imgui.Button(u8"Персональное",imgui.ImVec2(105, 30)) then tabmenu.settings = 9 end - end - if ini.settings.debug then if tabmenu.settings == 7 then imgui.PushStyleColor(imgui.Col.Button, imgui.GetStyle().Colors[imgui.Col.ButtonHovered]) @@ -3417,7 +3585,7 @@ function imgui.OnDrawFrame() imgui.SameLine() imgui.PushItemWidth(120) local selecttableitems = { - u8'Игроки', u8'Транспорт', u8'Объекты' + u8'Игроки', u8'Транспорт', u8'Объекты', u8'Текстуры' } imgui.Combo(u8'##ComboBoxSelecttable', combobox.selecttable, selecttableitems, #selecttableitems) @@ -3707,6 +3875,52 @@ function imgui.OnDrawFrame() end end imgui.Text(u8"Всего объектов в таблице: ".. objectsInTable) + elseif combobox.selecttable.v == 3 then + imgui.Separator() + imgui.Columns(6) + imgui.TextQuestion("ID", u8"Внутренний ID объекта (/ctd)") + imgui.SetColumnWidth(-1, 40) + imgui.NextColumn() + imgui.Text("Slot") + imgui.SetColumnWidth(-1, 40) + imgui.NextColumn() + imgui.Text("Modelid") + imgui.SetColumnWidth(-1, 80) + imgui.NextColumn() + imgui.Text("TxdName") + imgui.SetColumnWidth(-1, 150) + imgui.NextColumn() + imgui.Text("TxdLib") + imgui.SetColumnWidth(-1, 150) + imgui.NextColumn() + imgui.TextQuestion("TxdColor", u8"Цвет указан в формате RRGGBBAA") + imgui.NextColumn() + imgui.Columns(1) + imgui.Separator() + + for k, v in ipairs(streamedTextures) do + if string.len(v) > 1 then + imgui.Columns(6) + for element in string.gmatch(v, "[^,]+") do + local result = string.match(element, "%D") + if result then + if imgui.Selectable(" "..element) then + setClipboardText(element) + sampAddChatMessage("{696969}"..element.." {FFFFFF}скопирован в буффер обмена", -1) + end + else + imgui.TextColoredRGB("{696969}"..element) + if imgui.IsItemClicked() then + setClipboardText(element) + sampAddChatMessage("{696969}"..element.." {FFFFFF}скопирован в буффер обмена", -1) + end + end + imgui.NextColumn() + end + imgui.Columns(1) + imgui.Separator() + end + end end elseif tabmenu.main == 3 then @@ -3884,13 +4098,15 @@ function imgui.OnDrawFrame() imgui.Link("https://gtamods.com/wiki/SA_Limit_Adjuster", "https://gtamods.com/wiki/SA_Limit_Adjuster") elseif tabmenu.info == 3 then - + + imgui.PushStyleVar(imgui.StyleVar.ItemSpacing, imgui.ImVec2(2, 2)) if isTraining then imgui.Text(u8"На TRAINING используется ARGB формат цвета 0xAARRGGBB") end imgui.Text(u8"RR - красная часть цвета, GG - зеленая, BB - синяя,") imgui.SameLine() imgui.Text(u8"AA - альфа") + imgui.PopStyleVar() if imgui.IsItemHovered() then imgui.BeginTooltip() imgui.PushTextWrapPos(600) @@ -3899,9 +4115,14 @@ function imgui.OnDrawFrame() imgui.EndTooltip() end - imgui.PushItemWidth(175) - imgui.ColorPicker4("##ColorPicker4", input.colorpicker) + if tabmenu.colorformat == 1 then + imgui.ColorPicker4("##ColorPicker4", input.colorpicker, imgui.ColorEditFlags.HEX) + elseif tabmenu.colorformat == 2 then + imgui.ColorPicker4("##ColorPicker4", input.colorpicker, imgui.ColorEditFlags.RGB) + else + imgui.ColorPicker4("##ColorPicker4", input.colorpicker, imgui.ColorEditFlags.NoInputs) + end imgui.SameLine() local hexcolor = tostring(intToHex(join_argb(input.colorpicker.v[4] * 255, input.colorpicker.v[1] * 255, input.colorpicker.v[2] * 255, input.colorpicker.v[3] * 255))) @@ -3912,13 +4133,100 @@ function imgui.OnDrawFrame() imgui.SameLine() imgui.TextQuestion("( ? )", u8"Нажмите чтобы скопировать цвет в буфер обмена") imgui.PopItemWidth() - + + if tabmenu.colorformat == 3 then + imgui.Button(string.format("A:%i", input.colorpicker.v[4]*255)) + imgui.SameLine() + imgui.Button(string.format("R:%i", input.colorpicker.v[1]*255)) + imgui.SameLine() + imgui.Button(string.format("G:%i", input.colorpicker.v[2]*255)) + imgui.SameLine() + imgui.Button(string.format("B:%i", input.colorpicker.v[3]*255)) + elseif tabmenu.colorformat == 4 then + imgui.Button(string.format("R:%.2f", input.colorpicker.v[1])) + imgui.SameLine() + imgui.Button(string.format("G:%.2f", input.colorpicker.v[2])) + imgui.SameLine() + imgui.Button(string.format("B:%.2f", input.colorpicker.v[3])) + imgui.SameLine() + imgui.Button(string.format("A:%.2f", input.colorpicker.v[4])) + end + + if tabmenu.colorformat == 1 then + imgui.PushStyleColor(imgui.Col.Button, imgui.GetStyle().Colors[imgui.Col.ButtonHovered]) + if imgui.Button(u8"HEX", imgui.ImVec2(55, 25)) then tabmenu.colorformat = 1 end + imgui.PopStyleColor() + else + if imgui.Button(u8"HEX", imgui.ImVec2(55, 25)) then tabmenu.colorformat = 1 end + end + imgui.SameLine() + if tabmenu.colorformat == 2 then + imgui.PushStyleColor(imgui.Col.Button, imgui.GetStyle().Colors[imgui.Col.ButtonHovered]) + if imgui.Button(u8"RGBA", imgui.ImVec2(55, 25)) then tabmenu.colorformat = 2 end + imgui.PopStyleColor() + else + if imgui.Button(u8"RGBA", imgui.ImVec2(55, 25)) then tabmenu.colorformat = 2 end + end + imgui.SameLine() + if tabmenu.colorformat == 3 then + imgui.PushStyleColor(imgui.Col.Button, imgui.GetStyle().Colors[imgui.Col.ButtonHovered]) + if imgui.Button(u8"ARGB", imgui.ImVec2(55, 25)) then tabmenu.colorformat = 3 end + imgui.PopStyleColor() + else + if imgui.Button(u8"ARGB", imgui.ImVec2(55, 25)) then tabmenu.colorformat = 3 end + end + imgui.SameLine() + if tabmenu.colorformat == 4 then + imgui.PushStyleColor(imgui.Col.Button, imgui.GetStyle().Colors[imgui.Col.ButtonHovered]) + if imgui.Button(u8"Float", imgui.ImVec2(55, 25)) then tabmenu.colorformat = 4 end + imgui.PopStyleColor() + else + if imgui.Button(u8"Float", imgui.ImVec2(55, 25)) then tabmenu.colorformat = 4 end + end + + if imgui.TooltipButton(u8"Скопировать", imgui.ImVec2(115, 25), u8"Скопировать цвет в буффер обмена") then + local color = "" + if tabmenu.colorformat == 1 then + local hexcolor = tostring(intToHex(join_argb(input.colorpicker.v[4] * 255, + input.colorpicker.v[1] * 255, input.colorpicker.v[2] * 255, input.colorpicker.v[3] * 255))) + color = string.upper(hexcolor) + elseif tabmenu.colorformat == 2 then + color = string.format("%i %i %i %.i", + input.colorpicker.v[1]*255, input.colorpicker.v[2]*255, + input.colorpicker.v[3]*255, input.colorpicker.v[4]*255) + elseif tabmenu.colorformat == 3 then + color = string.format("%i %i %i %.i", + input.colorpicker.v[4]*255, input.colorpicker.v[1]*255, + input.colorpicker.v[2]*255, input.colorpicker.v[3]*255) + elseif tabmenu.colorformat == 4 then + color = string.format("%.2f %.2f %.2f %.2f", + input.colorpicker.v[1], input.colorpicker.v[2], + input.colorpicker.v[3], input.colorpicker.v[4]) + end + setClipboardText(color) + sampAddChatMessage("Цвет скопирован в буфер обмена", -1) + end + imgui.SameLine() + if imgui.TooltipButton(u8"Онлайн инфо", imgui.ImVec2(115, 25), + u8"Покажет полную информацию по цвету через сайт encycolorpedia.ru") then + local color = tostring(intToHex(join_argb(input.colorpicker.v[4] * 255, + input.colorpicker.v[1] * 255, input.colorpicker.v[2] * 255, input.colorpicker.v[3] * 255))) + color = string.upper(hexcolor) + color = color:gsub("{","") + color = color:gsub("}","") + local link = 'explorer "https://encycolorpedia.ru/'..color..'"' + os.execute(link) + end + imgui.Spacing() if imgui.CollapsingHeader(u8"Стандартные RGB цвета") then + imgui.PushStyleVar(imgui.StyleVar.ItemSpacing, imgui.ImVec2(1, 1)) + imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(1.0, 0.0, 0.0, 1.0)) if imgui.Button("{FF0000} RED ", imgui.ImVec2(120, 24)) then setClipboardText("{FF0000}") sampAddChatMessage("Цвет {FF0000}RED{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(1.0, 0.0, 0.0, 1.0) end imgui.PopStyleColor() @@ -3927,6 +4235,7 @@ function imgui.OnDrawFrame() if imgui.Button("{008000} GREEN ", imgui.ImVec2(120, 24)) then setClipboardText("{008000}") sampAddChatMessage("Цвет {008000}GREEN{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.0, 0.5, 0.0, 1.0) end imgui.PopStyleColor() @@ -3935,6 +4244,7 @@ function imgui.OnDrawFrame() if imgui.Button("{0000FF} BLUE ", imgui.ImVec2(120, 24)) then setClipboardText("{0000FF}") sampAddChatMessage("Цвет {0000FF}BLUE{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.0, 0.0, 1.0, 1.0) end imgui.PopStyleColor() @@ -3944,6 +4254,7 @@ function imgui.OnDrawFrame() if imgui.Button("{FFFF00} YELLOW", imgui.ImVec2(120, 24)) then setClipboardText("{FFFF00}") sampAddChatMessage("Цвет {FFFF00}YELLOW{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(1.0, 1.0, 0.0, 1.0) end imgui.PopStyleColor() @@ -3952,6 +4263,7 @@ function imgui.OnDrawFrame() if imgui.Button("{FF00FF} PINK ", imgui.ImVec2(120, 24)) then setClipboardText("{FF00FF}") sampAddChatMessage("Цвет {FF00FF}PINK{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(1.0, 0.0, 1.0, 1.0) end imgui.PopStyleColor() @@ -3960,6 +4272,7 @@ function imgui.OnDrawFrame() if imgui.Button("{00FFFF} AQUA ", imgui.ImVec2(120, 24)) then setClipboardText("{00FFFF}") sampAddChatMessage("Цвет {00FFFF}AQUA{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.0, 1.0, 1.0, 1.0) end imgui.PopStyleColor() @@ -3969,6 +4282,7 @@ function imgui.OnDrawFrame() if imgui.Button("{00FF00} LIME ", imgui.ImVec2(120, 24)) then setClipboardText("{00FF00}") sampAddChatMessage("Цвет {00FF00}LIME{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.0, 1.0, 0.0, 1.0) end imgui.PopStyleColor() @@ -3977,6 +4291,7 @@ function imgui.OnDrawFrame() if imgui.Button("{800080} PURPLE", imgui.ImVec2(120, 24)) then setClipboardText("{800080}") sampAddChatMessage("Цвет {800080}PURPLE{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.5, 0.0, 0.5, 1.0) end imgui.PopStyleColor() @@ -3985,6 +4300,7 @@ function imgui.OnDrawFrame() if imgui.Button("{800000} MAROON", imgui.ImVec2(120, 24)) then setClipboardText("{800000}") sampAddChatMessage("Цвет {800000}MAROON{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.5, 0.0, 0.0, 1.0) end imgui.PopStyleColor() @@ -3994,6 +4310,7 @@ function imgui.OnDrawFrame() if imgui.Button("{808000} OLIVE ", imgui.ImVec2(120, 24)) then setClipboardText("{808000}") sampAddChatMessage("Цвет {808000}OLIVE{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.5, 0.5, 0.0, 1.0) end imgui.PopStyleColor() @@ -4002,6 +4319,7 @@ function imgui.OnDrawFrame() if imgui.Button("{008080} TEAL ", imgui.ImVec2(120, 24)) then setClipboardText("{008080}") sampAddChatMessage("Цвет {008080}TEAL{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.0, 0.5, 0.5, 1.0) end imgui.PopStyleColor() @@ -4010,6 +4328,7 @@ function imgui.OnDrawFrame() if imgui.Button("{FF9900} ORANGE", imgui.ImVec2(120, 24)) then setClipboardText("{FF9900}") sampAddChatMessage("Цвет {FF9900}ORANGE{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(1.0, 0.6, 0.0, 1.0) end imgui.PopStyleColor() @@ -4019,6 +4338,7 @@ function imgui.OnDrawFrame() if imgui.Button("{FFFFFF} WHITE ", imgui.ImVec2(120, 24)) then setClipboardText("{FFFFFF}") sampAddChatMessage("Цвет WHITE скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(1.0, 1.0, 1.0, 1.0) end imgui.PopStyleColor() @@ -4027,6 +4347,7 @@ function imgui.OnDrawFrame() if imgui.Button("{808080} GREY ", imgui.ImVec2(120, 24)) then setClipboardText("{808080}") sampAddChatMessage("Цвет {808080}GREY{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.5, 0.5, 0.5, 1.0) end imgui.PopStyleColor() @@ -4035,10 +4356,11 @@ function imgui.OnDrawFrame() if imgui.Button("{000000} BLACK ", imgui.ImVec2(120, 24)) then setClipboardText("{000000}") sampAddChatMessage("Цвет {000000}BLACK{FFFFFF} скопирован в буфер обмена", -1) + input.colorpicker = imgui.ImFloat4(0.0, 0.0, 0.0, 1.0) end + imgui.PopStyleVar() imgui.PopStyleColor() end - if imgui.CollapsingHeader(u8"Тест RGB текста") then imgui.Text(u8"Тест RGB текста, например введите: {00FF00}Текст") @@ -4164,6 +4486,7 @@ function imgui.OnDrawFrame() imgui.TextColoredRGB("Найти нужную текстуру можно командой: {696969}/tsearch ") end imgui.TextColoredRGB("Посмотреть индексы(слои): {696969}/sindex") + imgui.TextColoredRGB("Покрасить каждый слой объекта отдельным цветом: {696969}/cindex") imgui.TextColoredRGB("Показать использованные за сеанс текстуры: {696969}/tlist") imgui.Spacing() end @@ -4509,6 +4832,7 @@ function imgui.OnDrawFrame() imgui.TextColoredRGB("{FFD700}/nearest{FFFFFF} - найти ближайший объект") imgui.TextColoredRGB("{FFD700}/odist{FFFFFF} - рисует линию к центру объекта с отображением дистанции") imgui.TextColoredRGB("{FFD700}/collision{FFFFFF} - вкл-откл коллизию для объектов") + imgui.TextColoredRGB("{FFD700}/cindex{FFFFFF} - показать каждый слой объекта отдельным цветом (Визуально)") imgui.TextColoredRGB("{FFD700}/oalpha{FFFFFF} - сделать объект полупрозрачным (Визуально)") imgui.TextColoredRGB("{FFD700}/showtext3d /hidetext3d{FFFFFF} - показать id объектов (CTRL + O)") imgui.TextColoredRGB("{FFD700}/csel /editobject{FFFFFF} - включить режим выбора объекта") @@ -4543,17 +4867,23 @@ function imgui.OnDrawFrame() imgui.TextColoredRGB("{FF6600}/rsethp {FFFFFF} - выдать HP и ARMOUR в радиусе") imgui.TextColoredRGB("{FF6600}/ress {FFFFFF} - воскресить игрока в RP стадии") imgui.TextColoredRGB("{FF6600}/ressall{FFFFFF} - воскресить всех игроков в RP стадии") + imgui.TextColoredRGB("{FF6600}/rpdeath{FFFFFF} - переключить режим RP смерти") imgui.TextColoredRGB("{FF6600}/vkick <*reason>{FFFFFF} - исключить игрока из мира") imgui.TextColoredRGB("{FF6600}/vmute