LUA скрипт [GS] Experience Improvements

Dancin' in September
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
26 Янв 2021
Сообщения
471
Реакции
44
В общем, меня немного достало подгружать тучу скриптов при инжекте, я решил написать скрипт, где будут всякие прикольные штучки, то есть:
- Fog override
- Sunset override
- Thirdperson override
- Aspect ratio
- Autobuy
- Viewmodel in scope
- Unlock hidden convars (спизжено)
- Viewmodel position
- Система конфигов
писал скрипт в первый раз, простите за говнокод если что, может кто то исправит что нибудь и скинет сюда... хотел еще skybox changer и custom scope добавить, но я хз как это делать сорри


Код:
Expand Collapse Copy
local client_latency, client_log, client_draw_rectangle, client_draw_circle_outline, client_userid_to_entindex, client_draw_indicator, client_draw_gradient, client_set_event_callback, client_screen_size, client_eye_position = client.latency, client.log, client.draw_rectangle, client.draw_circle_outline, client.userid_to_entindex, client.draw_indicator, client.draw_gradient, client.set_event_callback, client.screen_size, client.eye_position
local client_draw_circle, client_color_log, client_delay_call, client_draw_text, client_visible, client_exec, client_trace_line, client_set_cvar = client.draw_circle, client.color_log, client.delay_call, client.draw_text, client.visible, client.exec, client.trace_line, client.set_cvar
local client_world_to_screen, client_draw_hitboxes, client_get_cvar, client_draw_line, client_camera_angles, client_draw_debug_text, client_random_int, client_random_float = client.world_to_screen, client.draw_hitboxes, client.get_cvar, client.draw_line, client.camera_angles, client.draw_debug_text, client.random_int, client.random_float
local entity_get_local_player, entity_is_enemy, entity_hitbox_position, entity_get_player_name, entity_get_steam64, entity_get_bounding_box, entity_get_all, entity_set_prop = entity.get_local_player, entity.is_enemy, entity.hitbox_position, entity.get_player_name, entity.get_steam64, entity.get_bounding_box, entity.get_all, entity.set_prop
local entity_is_alive, entity_get_player_weapon, entity_get_prop, entity_get_players, entity_get_classname = entity.is_alive, entity.get_player_weapon, entity.get_prop, entity.get_players, entity.get_classname
local globals_realtime, globals_absoluteframetime, globals_tickcount, globals_curtime, globals_mapname, globals_tickinterval, globals_framecount, globals_frametime, globals_maxplayers = globals.realtime, globals.absoluteframetime, globals.tickcount, globals.curtime, globals.mapname, globals.tickinterval, globals.framecount, globals.frametime, globals.maxplayers
local ui_new_slider, ui_new_combobox, ui_reference, ui_set_visible, ui_is_menu_open, ui_new_color_picker, ui_set_callback, ui_set, ui_new_checkbox, ui_new_hotkey, ui_new_button, ui_new_multiselect, ui_get = ui.new_slider, ui.new_combobox, ui.reference, ui.set_visible, ui.is_menu_open, ui.new_color_picker, ui.set_callback, ui.set, ui.new_checkbox, ui.new_hotkey, ui.new_button, ui.new_multiselect, ui.get
local math_ceil, math_tan, math_log10, math_randomseed, math_cos, math_sinh, math_random, math_huge, math_pi, math_max, math_atan2, math_ldexp, math_floor, math_sqrt, math_deg, math_atan, math_fmod = math.ceil, math.tan, math.log10, math.randomseed, math.cos, math.sinh, math.random, math.huge, math.pi, math.max, math.atan2, math.ldexp, math.floor, math.sqrt, math.deg, math.atan, math.fmod
local math_acos, math_pow, math_abs, math_min, math_sin, math_frexp, math_log, math_tanh, math_exp, math_modf, math_cosh, math_asin, math_rad = math.acos, math.pow, math.abs, math.min, math.sin, math.frexp, math.log, math.tanh, math.exp, math.modf, math.cosh, math.asin, math.rad
local table_maxn, table_foreach, table_sort, table_remove, table_foreachi, table_move, table_getn, table_concat, table_insert = table.maxn, table.foreach, table.sort, table.remove, table.foreachi, table.move, table.getn, table.concat, table.insert
local string_find, string_format, string_rep, string_gsub, string_len, string_gmatch, string_dump, string_match, string_reverse, string_byte, string_char, string_upper, string_lower, string_sub = string.find, string.format, string.rep, string.gsub, string.len, string.gmatch, string.dump, string.match, string.reverse, string.byte, string.char, string.upper, string.lower, string.sub

local ffi = require('ffi')

ffi.cdef([[
    typedef struct c_con_command_base {
        void *vtable;
        void *next;
        bool registered;
        const char *name;
        const char *help_string;
        int flags;
        void *s_cmd_base;
        void *accessor;
    } c_con_command_base;
]]) -- credits to https://yougame.biz/threads/341933/
local main = {
    misc_tab = {
        thirdperson = {},
        aspect_ratio = {},
        autobuy = {
            primary_weapons = {
                "None",
                "AWP",
                "SCAR-20 / G3SG1",
                "Scout",
                "M4A4 / AK-47",
                "FAMAS / Galil",
                "AUG / SG553",
                "M249 / Negev",
                "MAG7 / Sawed-Off",
                "Nova",
                "XM1014",
                "MP9 / Mac10",
                "UMP-45",
                "PP Bizon",
                "MP7"
            },
            secondary_weapons = {
                "None",
                "CZ-75 / Tec-9 / FiveSeven",
                "P250",
                "Deagle / R8",
                "Dualies"
            },
            grenades = {
                "HE Grenade",
                "Molotov",
                "Smoke",
                "Flash",
                "Flash",
                "Decoy",
            },
            utilities = {
                "Armor",
                "Helmet",
                "Zeus",
                "Defuser"
            },
            commands = {
                ["AWP"] = "buy awp",
                ["SCAR-20 / G3SG1"] = "buy scar20",
                ["Scout"] = "buy ssg08",
                ["M4A4 / AK-47"] = "buy m4a1",
                ["FAMAS / Galil"] = "buy famas",
                ["AUG / SG553"] = "buy aug",
                ["M249"] = "buy m249",
                ["Negev"] = "buy negev",
                ["MAG7 / Sawed-Off"] = "buy mag7",
                ["Nova"] = "buy nova",
                ["XM1014"] = "buy xm1014",
                ["MP9 / Mac10"] = "buy mp9",
                ["UMP-45"] = "buy ump45",
                ["PP Bizon"] = "buy bizon",
                ["MP7"] = "buy mp7",
                ["CZ-75 / Tec-9 / FiveSeven"] = "buy tec9",
                ["P250"] = "buy p250",
                ["Deagle / R8"] = "buy deagle",
                ["Dualies"] = "buy elite",
                ["HE Grenade"] = "buy hegrenade",
                ["Molotov"] = "buy molotov",
                ["Smoke"] = "buy smokegrenade",
                ["Flash"] = "buy flashbang",
                ["Decoy"] = "buy decoy",
                ["Armor"] = "buy vest",
                ["Helmet"] = "buy vesthelm",
                ["Zeus"] = "buy taser 34",
                ["Defuser"] = "buy defuser"
            },
        },
        viewmodel_in_scope = {},
        unlock_hidden_cvars = {
            hidden_cvars = {},
            original_flags = {}
        },
        viewmodel_changer = {}
    },
    world_tab = {
        fog = {},
        sunset = {}
    },
    tabs = {
        "HOME",
        "WORLD",
        "MISC",
        "CONFIGS"
    },
    ui = {},
    current_tab = "HOME"
}
local lua_tabs = {"LUA", "A"}


local function setup_vars_for_hidden_cvars()

    -- credits to https://yougame.biz/threads/341933/
    main.misc_tab.unlock_hidden_cvars.v_engine_cvar = client.create_interface('vstdlib.dll', 'VEngineCvar007')
    main.misc_tab.unlock_hidden_cvars.con_command_base = ffi.cast('c_con_command_base ***', ffi.cast('uint32_t', main.misc_tab.unlock_hidden_cvars.v_engine_cvar) + 0x34)[0][0]
    main.misc_tab.unlock_hidden_cvars.cmd = ffi.cast('c_con_command_base *', main.misc_tab.unlock_hidden_cvars.con_command_base.next)

    while ffi.cast('uint32_t', main.misc_tab.unlock_hidden_cvars.cmd) ~= 0 do
        if bit.band(main.misc_tab.unlock_hidden_cvars.cmd.flags, 18) then
            table_insert(main.misc_tab.unlock_hidden_cvars.hidden_cvars, main.misc_tab.unlock_hidden_cvars.cmd)
            table_insert(main.misc_tab.unlock_hidden_cvars.original_flags, main.misc_tab.unlock_hidden_cvars.cmd.flags)
        end
        main.misc_tab.unlock_hidden_cvars.cmd = ffi.cast('c_con_command_base *', main.misc_tab.unlock_hidden_cvars.cmd.next)
  end

end

local function save_default_viewmodel_settings()
    main.misc_tab.viewmodel_changer.default_x = client.get_cvar('viewmodel_offset_x')
    main.misc_tab.viewmodel_changer.default_y = client.get_cvar('viewmodel_offset_y')
    main.misc_tab.viewmodel_changer.default_z = client.get_cvar('viewmodel_offset_z')
    main.misc_tab.viewmodel_changer.default_fov = client.get_cvar('viewmodel_fov')
end

local function goto_home()
    if main.current_tab ~= "HOME" then
        main.current_tab = "HOME"
    end
    ui.set_visible(main.ui.button_home, false)
    ui.set_visible(main.ui.button_misc, true)
    ui.set_visible(main.ui.button_world, true)
    ui.set_visible(main.ui.button_configs, true)
    ui.set_visible(main.ui.save_config_button, false)
    ui.set_visible(main.ui.load_config_button, false)
    force_call()
end

local function goto_world()
    if main.current_tab ~= "WORLD" then
        main.current_tab = "WORLD"
    end
    ui.set_visible(main.ui.button_home, true)
    ui.set_visible(main.ui.button_world, false)
    ui.set_visible(main.ui.button_misc, false)
    ui.set_visible(main.ui.button_configs, false)
    ui.set_visible(main.ui.save_config_button, false)
    ui.set_visible(main.ui.load_config_button, false)
    force_call()
end

local function goto_misc()
    if main.current_tab ~= "MISC" then
        main.current_tab = "MISC"
    end
    ui.set_visible(main.ui.button_home, true)
    ui.set_visible(main.ui.button_world, false)
    ui.set_visible(main.ui.button_misc, false)
    ui.set_visible(main.ui.button_configs, false)
    ui.set_visible(main.ui.save_config_button, false)
    ui.set_visible(main.ui.load_config_button, false)
    force_call()
end

local function goto_configs()
    if main.current_tab ~= "CONFIGS" then
        main.current_tab = "CONFIGS"
    end
    ui.set_visible(main.ui.button_home, true)
    ui.set_visible(main.ui.button_world, false)
    ui.set_visible(main.ui.button_misc, false)
    ui.set_visible(main.ui.button_configs, false)

    force_call()
end

local function update_configs_list(configs)
    local config_names = {}
    for name, _ in pairs(configs) do
        table_insert(config_names, name)
    end
    main.ui.config_names = config_names
    ui.update(main.ui.configs_list, config_names)
end

local function save_config()
    local config_name = ui.get(main.ui.config_name_input) or 'default'
    if config_name == '' then
        config_name = 'default'
    end
    local config = {
        thirdperson = ui.get(main.misc_tab.thirdperson.thirdperson_override),
        thirdperson_distance = ui.get(main.misc_tab.thirdperson.thirdperson_distance),
        fog_override = ui.get(main.world_tab.fog.fog_override),
        fog_color = {ui.get(main.world_tab.fog.color)},
        fog_start = ui.get(main.world_tab.fog.start),
        fog_end = ui.get(main.world_tab.fog.end_),
        fog_density = ui.get(main.world_tab.fog.density),
        aspect_ratio_override = ui.get(main.misc_tab.aspect_ratio.aspect_ratio_override),
        aspect_ratio_value = ui.get(main.misc_tab.aspect_ratio.aspect_ratio_value),
        sunset_override = ui.get(main.world_tab.sunset.sunset_override),
        sunset_x_rotation = ui.get(main.world_tab.sunset.x_rotation),
        sunset_y_rotation = ui.get(main.world_tab.sunset.y_rotation),
        autobuy_enable = ui.get(main.misc_tab.autobuy.enable_autobuy),
        autobuy_disable_pistol_round = ui.get(main.misc_tab.autobuy.disable_on_pistol_round),
        autobuy_primary = ui.get(main.misc_tab.autobuy.primary_weapons_cb),
        autobuy_secondary = ui.get(main.misc_tab.autobuy.secondary_weapons_cb),
        autobuy_grenades = ui.get(main.misc_tab.autobuy.grenades_cb),
        autobuy_utilities = ui.get(main.misc_tab.autobuy.utilities_cb),
        viewmodel_in_scope = ui.get(main.misc_tab.viewmodel_in_scope.viewmodel_in_scope_enable),
        unlock_hidden_cvars = ui.get(main.misc_tab.unlock_hidden_cvars.enable_hidden_cvars),
        viewmodel_changer_enable = ui.get(main.misc_tab.viewmodel_changer.enable_viewmodel_changer),
        viewmodel_x = ui.get(main.misc_tab.viewmodel_changer.viewmodel_x_pos),
        viewmodel_y = ui.get(main.misc_tab.viewmodel_changer.viewmodel_y_pos),
        viewmodel_z = ui.get(main.misc_tab.viewmodel_changer.viewmodel_z_pos),
        viewmodel_fov = ui.get(main.misc_tab.viewmodel_changer.viewmodel_fov_changer)
    }
    local configs = database.read('all_world_improvements_configs') or {}
    configs[config_name] = config
    database.write('all_world_improvements_configs', configs)
    update_configs_list(configs)
    client.log('Saved as ' .. config_name)
end

local function load_config()
    local idx = ui.get(main.ui.configs_list)
    local config_name = main.ui.config_names[idx + 1]
    if not config_name then
        client.log('Choose the cfg first')
        return
    end
    local configs = database.read('all_world_improvements_configs') or {}
    local config = configs[config_name]
    if config then
        ui.set(main.misc_tab.thirdperson.thirdperson_override, config.thirdperson)
        ui.set(main.misc_tab.thirdperson.thirdperson_distance, config.thirdperson_distance)
        ui.set(main.world_tab.fog.fog_override, config.fog_override)
        ui.set(main.world_tab.fog.color, unpack(config.fog_color))
        ui.set(main.world_tab.fog.start, config.fog_start)
        ui.set(main.world_tab.fog.end_, config.fog_end)
        ui.set(main.world_tab.fog.density, config.fog_density)
        ui.set(main.misc_tab.aspect_ratio.aspect_ratio_override, config.aspect_ratio_override)
        ui.set(main.misc_tab.aspect_ratio.aspect_ratio_value, config.aspect_ratio_value)
        ui.set(main.world_tab.sunset.sunset_override, config.sunset_override)
        ui.set(main.world_tab.sunset.x_rotation, config.sunset_x_rotation)
        ui.set(main.world_tab.sunset.y_rotation, config.sunset_y_rotation)
        ui.set(main.misc_tab.autobuy.enable_autobuy, config.autobuy_enable)
        ui.set(main.misc_tab.autobuy.disable_on_pistol_round, config.autobuy_disable_pistol_round)
        ui.set(main.misc_tab.autobuy.primary_weapons_cb, config.autobuy_primary)
        ui.set(main.misc_tab.autobuy.secondary_weapons_cb, config.autobuy_secondary)
        ui.set(main.misc_tab.autobuy.grenades_cb, config.autobuy_grenades)
        ui.set(main.misc_tab.autobuy.utilities_cb, config.autobuy_utilities)
        ui.set(main.misc_tab.viewmodel_in_scope.viewmodel_in_scope_enable, config.viewmodel_in_scope)
        ui.set(main.misc_tab.unlock_hidden_cvars.enable_hidden_cvars, config.unlock_hidden_cvars)
        ui.set(main.misc_tab.viewmodel_changer.enable_viewmodel_changer, config.viewmodel_changer_enable)
        ui.set(main.misc_tab.viewmodel_changer.viewmodel_x_pos, config.viewmodel_x)
        ui.set(main.misc_tab.viewmodel_changer.viewmodel_y_pos, config.viewmodel_y)
        ui.set(main.misc_tab.viewmodel_changer.viewmodel_z_pos, config.viewmodel_z)
        ui.set(main.misc_tab.viewmodel_changer.viewmodel_fov_changer, config.viewmodel_fov)
        client.log('Config ' .. config_name .. ' loaded')
        force_update()
    else
        client.log('Couldnt find the ' .. config_name .. ' config')
    end
end

local function delete_config()
    local idx = ui.get(main.ui.configs_list)
    local config_name = main.ui.config_names[idx + 1]
    if not config_name then
        client.log('Choose the config first')
        return
    end
    local configs = database.read('all_world_improvements_configs') or {}
    if configs[config_name] then
        configs[config_name] = nil
        database.write('all_world_improvements_configs', configs)
        update_configs_list(configs)
        client.log('Deleted ' .. config_name)
    else
        client.log('Couldnt find the ' .. config_name .. ' config')
    end
end

local function setup()

    main.ui.button_world = ui.new_button(lua_tabs[1], lua_tabs[2], "WORLD", goto_world)
    main.ui.button_misc = ui.new_button(lua_tabs[1], lua_tabs[2], "MISC", goto_misc)
    main.ui.button_home = ui.new_button(lua_tabs[1], lua_tabs[2], "HOME", goto_home)
    main.ui.button_configs = ui.new_button(lua_tabs[1], lua_tabs[2], "CONFIGS", goto_configs)
    ui.set_visible(main.ui.button_home, false)

    main.misc_tab.thirdperson.thirdperson_override = ui.new_checkbox(lua_tabs[1], lua_tabs[2], "Thirdperson override")
    main.misc_tab.thirdperson.thirdperson_distance = ui.new_slider(lua_tabs[1], lua_tabs[2], "Thirdperson distance", 0, 200, 150)
    main.misc_tab.thirdperson.previous_tp_distance = cvar.cam_idealdist:get_int()

    main.world_tab.fog.fog_override = ui.new_checkbox(lua_tabs[1], lua_tabs[2], "Fog override")
    main.world_tab.fog.color = ui.new_color_picker(lua_tabs[1], lua_tabs[2], "Fog color", 255, 255, 255, 0)
    main.world_tab.fog.start = ui.new_slider(lua_tabs[1], lua_tabs[2], "Fog start", 0, 2500, 400)
    main.world_tab.fog.end_ = ui.new_slider(lua_tabs[1], lua_tabs[2], "Fog end", 0, 2500, 1500)
    main.world_tab.fog.density = ui.new_slider(lua_tabs[1], lua_tabs[2], "Fog density", 0, 100, 30)

    main.misc_tab.aspect_ratio.aspect_ratio_override = ui.new_checkbox(lua_tabs[1], lua_tabs[2], "Aspect ratio override")
    main.misc_tab.aspect_ratio.aspect_ratio_value = ui.new_slider(lua_tabs[1], lua_tabs[2], "Aspect ratio", 0, 200, 100, true, "", 0.01, main.misc_tab.aspect_ratio.tooltips)

    main.world_tab.sunset.sunset_override = ui.new_checkbox(lua_tabs[1], lua_tabs[2], "Sunset override")
    main.world_tab.sunset.x_rotation = ui.new_slider(lua_tabs[1], lua_tabs[2], "X rotation", -180, 180, 0, true, "°")
    main.world_tab.sunset.y_rotation = ui.new_slider(lua_tabs[1], lua_tabs[2], "Y rotation", -180, 180, 0, true, "°")

    main.misc_tab.autobuy.enable_autobuy = ui.new_checkbox(lua_tabs[1], lua_tabs[2], "Autobuy")
    main.misc_tab.autobuy.disable_on_pistol_round = ui.new_checkbox(lua_tabs[1], lua_tabs[2], "Disable on pistol round")
    main.misc_tab.autobuy.primary_weapons_cb = ui.new_combobox(lua_tabs[1], lua_tabs[2], "Primary Weapons", main.misc_tab.autobuy.primary_weapons)
    main.misc_tab.autobuy.secondary_weapons_cb = ui.new_combobox(lua_tabs[1], lua_tabs[2], "Secondary Weapons", main.misc_tab.autobuy.secondary_weapons)
    main.misc_tab.autobuy.grenades_cb = ui.new_multiselect(lua_tabs[1], lua_tabs[2], "Grenades", main.misc_tab.autobuy.grenades)
    main.misc_tab.autobuy.utilities_cb = ui.new_multiselect(lua_tabs[1], lua_tabs[2], "Utilities", main.misc_tab.autobuy.utilities)

    main.misc_tab.viewmodel_in_scope.viewmodel_in_scope_enable = ui.new_checkbox(lua_tabs[1], lua_tabs[2], "Viewmodel in scope")

   
    main.misc_tab.unlock_hidden_cvars.enable_hidden_cvars = ui.new_checkbox(lua_tabs[1], lua_tabs[2], "Unlock hidden cvars")
    setup_vars_for_hidden_cvars()
    print("by mioxive")
    save_default_viewmodel_settings()
    main.misc_tab.viewmodel_changer.enable_viewmodel_changer = ui.new_checkbox(lua_tabs[1], lua_tabs[2], "Viewmodel position override")
    main.misc_tab.viewmodel_changer.viewmodel_x_pos = ui.new_slider(lua_tabs[1], lua_tabs[2], "Viewmodel offset X", -30, 30, main.misc_tab.viewmodel_changer.default_x)
    main.misc_tab.viewmodel_changer.viewmodel_y_pos = ui.new_slider(lua_tabs[1], lua_tabs[2], "Viewmodel offset Y", -100, 100, main.misc_tab.viewmodel_changer.default_y)
    main.misc_tab.viewmodel_changer.viewmodel_z_pos = ui.new_slider(lua_tabs[1], lua_tabs[2], "Viewmodel offset Z", -30, 30, main.misc_tab.viewmodel_changer.default_z)
    main.misc_tab.viewmodel_changer.viewmodel_fov_changer = ui.new_slider(lua_tabs[1], lua_tabs[2], "Viewmodel FOV", -60, 100, main.misc_tab.viewmodel_changer.default_fov)

    main.ui.config_name_input = ui.new_textbox(lua_tabs[1], lua_tabs[2], 'Config name')
    main.ui.save_config_button = ui.new_button(lua_tabs[1], lua_tabs[2], 'Save config', save_config)
    main.ui.load_config_button = ui.new_button(lua_tabs[1], lua_tabs[2], 'Load config', load_config)
    main.ui.delete_config_button = ui.new_button(lua_tabs[1], lua_tabs[2], 'Delete config', delete_config)
    main.ui.configs_list = ui.new_listbox(lua_tabs[1], lua_tabs[2], 'Configs', {})

end

local function update_thirdperson()
    if ui.get(main.misc_tab.thirdperson.thirdperson_override) then
        cvar.cam_idealdist:set_int(ui.get(main.misc_tab.thirdperson.thirdperson_distance))
    end
end

local function update_fog()
    if ui_get(main.world_tab.fog.fog_override) then
        cvar.fog_color:set_string(string.format('%s %s %s', ui_get(main.world_tab.fog.color)))
        cvar.fog_start:set_int(ui_get(main.world_tab.fog.start))
        cvar.fog_end:set_int(ui_get(main.world_tab.fog.end_))
        cvar.fog_maxdensity:set_float(ui_get(main.world_tab.fog.density) / 100)
    end
end

local function update_aspect_ratio()
    if ui.get(main.misc_tab.aspect_ratio.aspect_ratio_override) then
        local value = 2 - ui.get(main.misc_tab.aspect_ratio.aspect_ratio_value) / 100
        local screen_width, screen_height = client_screen_size()

        value = (screen_width * value) / screen_height

        if aspect_ratio_multiplier == 1 then
            value = 0
        end
        cvar.r_aspectratio:set_float(value)
    end
end

local function update_sunset()
    if ui_get(main.world_tab.sunset.sunset_override) then
        cvar.cl_csm_rot_x:set_int(ui_get(main.world_tab.sunset.x_rotation))
        cvar.cl_csm_rot_y:set_int(ui_get(main.world_tab.sunset.y_rotation))
    end
end

local function update_hidden_cvars(is_enabled)
    -- credits to https://yougame.biz/threads/341933/
    for i = 1, #main.misc_tab.unlock_hidden_cvars.hidden_cvars do
        if is_enabled then
            main.misc_tab.unlock_hidden_cvars.hidden_cvars[i].flags = bit.band(main.misc_tab.unlock_hidden_cvars.hidden_cvars[i].flags, -19)
        else -- fix
            main.misc_tab.unlock_hidden_cvars.hidden_cvars[i].flags = main.misc_tab.unlock_hidden_cvars.original_flags[i]
        end
  end
end

local function update_viewmodel_position()
    if ui.get(main.misc_tab.viewmodel_changer.enable_viewmodel_changer) then
        local x = ui.get(main.misc_tab.viewmodel_changer.viewmodel_x_pos)
        local y = ui.get(main.misc_tab.viewmodel_changer.viewmodel_y_pos)
        local z = ui.get(main.misc_tab.viewmodel_changer.viewmodel_z_pos)
        local fov = ui.get(main.misc_tab.viewmodel_changer.viewmodel_fov_changer)
        client.set_cvar('viewmodel_offset_x', x)
        client.set_cvar('viewmodel_offset_y', y)
        client.set_cvar('viewmodel_offset_z', z)
        client.set_cvar('viewmodel_fov', fov)
    end
end

local function reset_viewmodel_position()
    local x = main.misc_tab.viewmodel_changer.default_x
    local y = main.misc_tab.viewmodel_changer.default_y
    local z = main.misc_tab.viewmodel_changer.default_z
    local fov = main.misc_tab.viewmodel_changer.default_fov
    client.set_cvar('viewmodel_offset_x', x)
    client.set_cvar('viewmodel_offset_y', y)
    client.set_cvar('viewmodel_offset_z', z)
    client.set_cvar('viewmodel_fov', fov)
end

local function execute_autobuy()
    if ui.get(main.misc_tab.autobuy.disable_on_pistol_round) then
        local current_round = entity.get_prop(game_rules, "m_totalRoundsPlayed")
        local max_rounds = entity.get_prop(game_rules, "m_nRoundsMax") or 30 -- ???
        if current_round == 0 or current_round == (max_rounds / 2 - 1) then
            return
        end
    end

    if ui.get(main.misc_tab.autobuy.enable_autobuy) then
        client.exec(main.misc_tab.autobuy.commands[ui.get(main.misc_tab.autobuy.primary_weapons_cb)])
        client.exec(main.misc_tab.autobuy.commands[ui.get(main.misc_tab.autobuy.secondary_weapons_cb)])

        local grenades_to_purchase = ui.get(main.misc_tab.autobuy.grenades_cb)
        local utilities_to_purchase = ui.get(main.misc_tab.autobuy.utilities_cb)

        for i = 1, #utilities_to_purchase do
            local utility = utilities_to_purchase[i]
            client.exec(main.misc_tab.autobuy.commands[utility])
        end

        for i = 1, #grenades_to_purchase do
            local grenade = grenades_to_purchase[i]
            client.exec(main.misc_tab.autobuy.commands[grenade])
        end
    end
end

-- Callbacks


local fog_override_callback = function()
    ui.set_visible(main.world_tab.fog.fog_override, main.current_tab == "WORLD")
    if main.current_tab ~= "WORLD" then
        ui.set_visible(main.world_tab.fog.color, false)
        ui.set_visible(main.world_tab.fog.start, false)
        ui.set_visible(main.world_tab.fog.end_, false)
        ui.set_visible(main.world_tab.fog.density, false)
        return
    end

    local is_enabled = ui.get(main.world_tab.fog.fog_override)

    ui.set_visible(main.world_tab.fog.color, is_enabled)
    ui.set_visible(main.world_tab.fog.start, is_enabled)
    ui.set_visible(main.world_tab.fog.end_, is_enabled)
    ui.set_visible(main.world_tab.fog.density, is_enabled)
   
    if is_enabled then
        client.set_cvar('fog_override', 1)
    else
        client.set_cvar('fog_override', 0)
    end
   
end

local tp_override_callback = function()
    ui.set_visible(main.misc_tab.thirdperson.thirdperson_override, main.current_tab == "MISC")

    if main.current_tab ~= "MISC" then
        ui.set_visible(main.misc_tab.thirdperson.thirdperson_distance, false)
        return
    end
   
    local is_enabled = ui.get(main.misc_tab.thirdperson.thirdperson_override)
   
    ui.set_visible(main.misc_tab.thirdperson.thirdperson_distance, is_enabled)
end

local aspect_ratio_override_callback = function()
    ui.set_visible(main.misc_tab.aspect_ratio.aspect_ratio_override, main.current_tab == "MISC")

    if main.current_tab ~= "MISC" then
        ui.set_visible(main.misc_tab.aspect_ratio.aspect_ratio_value, false)
        return
    end

    local is_enabled = ui.get(main.misc_tab.aspect_ratio.aspect_ratio_override)
    if not is_enabled then
        client.set_cvar('r_aspectratio', 0)
    end
    ui.set_visible(main.misc_tab.aspect_ratio.aspect_ratio_value, is_enabled)
end

local sunset_override_callback = function()
    ui.set_visible(main.world_tab.sunset.sunset_override, main.current_tab == "WORLD")

    if main.current_tab ~= "WORLD" then
        ui.set_visible(main.world_tab.sunset.x_rotation, false)
        ui.set_visible(main.world_tab.sunset.y_rotation, false)
        return
    end

    local is_enabled = ui.get(main.world_tab.sunset.sunset_override)

    if not is_enabled then
        client.set_cvar('cl_csm_rot_override', 0)
    else
        client.set_cvar('cl_csm_rot_override', 1)
    end

    ui.set_visible(main.world_tab.sunset.x_rotation, is_enabled)
    ui.set_visible(main.world_tab.sunset.y_rotation, is_enabled)
end

local autobuy_callback = function()
    ui.set_visible(main.misc_tab.autobuy.enable_autobuy, main.current_tab == "MISC")

    if main.current_tab ~= "MISC" then
        ui.set_visible(main.misc_tab.autobuy.disable_on_pistol_round, false)
        ui.set_visible(main.misc_tab.autobuy.primary_weapons_cb, false)
        ui.set_visible(main.misc_tab.autobuy.secondary_weapons_cb, false)
        ui.set_visible(main.misc_tab.autobuy.grenades_cb, false)
        ui.set_visible(main.misc_tab.autobuy.utilities_cb, false)
       
        return
    end

    local is_enabled = ui.get(main.misc_tab.autobuy.enable_autobuy)

    ui.set_visible(main.misc_tab.autobuy.disable_on_pistol_round, is_enabled)
    ui.set_visible(main.misc_tab.autobuy.primary_weapons_cb, is_enabled)
    ui.set_visible(main.misc_tab.autobuy.secondary_weapons_cb, is_enabled)
    ui.set_visible(main.misc_tab.autobuy.grenades_cb, is_enabled)
    ui.set_visible(main.misc_tab.autobuy.utilities_cb, is_enabled)
end

local viewmodel_in_scope_callback = function()
    ui.set_visible(main.misc_tab.viewmodel_in_scope.viewmodel_in_scope_enable, main.current_tab == "MISC")

    if main.current_tab ~= "MISC" then
        return
    end
    -- local fov = ui.reference("MISC", "Miscellaneous", "Override FOV")
    -- local zoom_fov = ui.reference("MISC", "Miscellaneous", "Override zoom FOV")
    local is_enabled = ui.get(main.misc_tab.viewmodel_in_scope.viewmodel_in_scope_enable)

    if is_enabled then
        client.set_cvar('fov_cs_debug', 90)
    else
        client.set_cvar('fov_cs_debug', 0)
    end
end

local unlock_hidden_cvars_callback = function()
    ui.set_visible(main.misc_tab.unlock_hidden_cvars.enable_hidden_cvars, main.current_tab == "MISC")

    if main.current_tab ~= "MISC" then
        return
    end

    local is_enabled = ui.get(main.misc_tab.unlock_hidden_cvars.enable_hidden_cvars)

    update_hidden_cvars(is_enabled)
end

local viewmodel_changer_callback = function()
    ui.set_visible(main.misc_tab.viewmodel_changer.enable_viewmodel_changer, main.current_tab == "MISC")

    if main.current_tab ~= "MISC" then
        ui.set_visible(main.misc_tab.viewmodel_changer.viewmodel_x_pos, false)
        ui.set_visible(main.misc_tab.viewmodel_changer.viewmodel_y_pos, false)
        ui.set_visible(main.misc_tab.viewmodel_changer.viewmodel_z_pos, false)
        ui.set_visible(main.misc_tab.viewmodel_changer.viewmodel_fov_changer, false)
        return
    end

    local is_enabled = ui.get(main.misc_tab.viewmodel_changer.enable_viewmodel_changer)

    if not is_enabled then
        reset_viewmodel_position()
    end

    ui.set_visible(main.misc_tab.viewmodel_changer.viewmodel_x_pos, is_enabled)
    ui.set_visible(main.misc_tab.viewmodel_changer.viewmodel_y_pos, is_enabled)
    ui.set_visible(main.misc_tab.viewmodel_changer.viewmodel_z_pos, is_enabled)
    ui.set_visible(main.misc_tab.viewmodel_changer.viewmodel_fov_changer, is_enabled)
end

local configs_callback = function()
    if main.current_tab ~= 'CONFIGS' then
        ui.set_visible(main.ui.config_name_input, false)
        ui.set_visible(main.ui.save_config_button, false)
        ui.set_visible(main.ui.load_config_button, false)
        ui.set_visible(main.ui.delete_config_button, false)
        ui.set_visible(main.ui.configs_list, false)
       
        return
    end
    ui.set_visible(main.ui.config_name_input, true)
    ui.set_visible(main.ui.save_config_button, true)
    ui.set_visible(main.ui.load_config_button, true)
    ui.set_visible(main.ui.delete_config_button, true)
    ui.set_visible(main.ui.configs_list, true)
    local configs = database.read('all_world_improvements_configs') or {}
    update_configs_list(configs)
end

local pick_config = function()
    local idx = ui.get(main.ui.configs_list)
    local name = main.ui.config_names[idx + 1]
    if name then
        ui.set(main.ui.config_name_input, name)
    end
end

function load_script_callback()
    setup()

    force_call()

    ui.set_callback(main.misc_tab.thirdperson.thirdperson_override, tp_override_callback)
    ui.set_callback(main.world_tab.fog.fog_override, fog_override_callback)
    ui.set_callback(main.misc_tab.aspect_ratio.aspect_ratio_override, aspect_ratio_override_callback)
    ui.set_callback(main.world_tab.sunset.sunset_override, sunset_override_callback)
    ui.set_callback(main.misc_tab.autobuy.enable_autobuy, autobuy_callback)
    ui.set_callback(main.misc_tab.viewmodel_in_scope.viewmodel_in_scope_enable, viewmodel_in_scope_callback)
    ui.set_callback(main.misc_tab.unlock_hidden_cvars.enable_hidden_cvars, unlock_hidden_cvars_callback)
    ui.set_callback(main.misc_tab.viewmodel_changer.enable_viewmodel_changer, viewmodel_changer_callback)
    ui.set_callback(main.ui.configs_list, pick_config)

    ui.set_callback(main.world_tab.fog.color, update_fog)
    ui.set_callback(main.world_tab.fog.start, update_fog)
    ui.set_callback(main.world_tab.fog.end_, update_fog)
    ui.set_callback(main.world_tab.fog.density, update_fog)

    ui.set_callback(main.misc_tab.thirdperson.thirdperson_distance, update_thirdperson)
   
    ui.set_callback(main.misc_tab.aspect_ratio.aspect_ratio_value, update_aspect_ratio)

    ui.set_callback(main.world_tab.sunset.x_rotation, update_sunset)
    ui.set_callback(main.world_tab.sunset.y_rotation, update_sunset)

    ui.set_callback(main.misc_tab.viewmodel_changer.viewmodel_x_pos, update_viewmodel_position)
    ui.set_callback(main.misc_tab.viewmodel_changer.viewmodel_y_pos, update_viewmodel_position)
    ui.set_callback(main.misc_tab.viewmodel_changer.viewmodel_z_pos, update_viewmodel_position)
    ui.set_callback(main.misc_tab.viewmodel_changer.viewmodel_fov_changer, update_viewmodel_position)
end

function force_call()
    tp_override_callback()
    fog_override_callback()
    aspect_ratio_override_callback()
    sunset_override_callback()
    autobuy_callback()
    viewmodel_in_scope_callback()
    unlock_hidden_cvars_callback()
    viewmodel_changer_callback()
    configs_callback()
end

function force_update()
    update_aspect_ratio()

    if ui_get(main.world_tab.fog.fog_override) then
        client.set_cvar('fog_override', 1)
        update_fog()
    else
        client.set_cvar('fog_override', 0)
    end

    if ui_get(main.world_tab.sunset.sunset_override) then
        client.set_cvar('cl_csm_rot_override', 1)
        update_sunset()
    else
        client.set_cvar('cl_csm_rot_override', 0)
    end
   
    update_thirdperson()
end

client.set_event_callback('shutdown', function()
    client.set_cvar('fog_override', 0)
    client.set_cvar('r_aspectratio', 0)
    client.set_cvar('cl_csm_rot_override', 0)
    client.set_cvar('fov_cs_debug', 0)
    update_hidden_cvars(false)
    reset_viewmodel_position()
end)

client.set_event_callback('round_prestart', function()
    execute_autobuy()
end)

client.set_event_callback('level_init', function()
    force_update()
end)

client.set_event_callback('player_connect', function()
    force_update()
end)

load_script_callback()
 
1748683821844.png

Хз за че хейт, для первого скрипта вполне нормально. Удачи!
 
слепить миллиард скриптов это сильно конечно :roflanEbalo:
 
ну всмысле слепить, я прост написал че мне надо для визуала и все, а то постоянно подгружать неудобно же
реверс скит.длл и фикс автолоад: ноа
писать луашку которая не отличается от тысячи таких же: иес
 
Всем здравстуйте, дабы использовать скрипт не обязательно ставить графику на максимум, просто вырубить все скины
 
Назад
Сверху Снизу