Вопросы по Lua скриптингу

Общая тема для вопросов по разработке скриптов на языке программирования Lua, в частности под MoonLoader.
  • Задавая вопрос, убедитесь, что его нет в списке частых вопросов и что на него ещё не отвечали (воспользуйтесь поиском).
  • Поищите ответ в теме посвященной разработке Lua скриптов в MoonLoader
  • Отвечая, убедитесь, что ваш ответ корректен.
  • Старайтесь как можно точнее выразить мысль, а если проблема связана с кодом, то обязательно прикрепите его к сообщению, используя блок [code=lua]здесь мог бы быть ваш код[/code].
  • Если вопрос связан с MoonLoader-ом первым делом желательно поискать решение на wiki.

Частые вопросы

Как научиться писать скрипты? С чего начать?
Информация - Гайд - Всё о Lua скриптинге для MoonLoader(https://blast.hk/threads/22707/)
Как вывести текст на русском? Вместо русского текста у меня какие-то каракули.
Изменить кодировку файла скрипта на Windows-1251. В Atom: комбинация клавиш Ctrl+Shift+U, в Notepad++: меню Кодировки -> Кодировки -> Кириллица -> Windows-1251.
Как получить транспорт, в котором сидит игрок?
Lua:
local veh = storeCarCharIsInNoSave(PLAYER_PED)
Как получить свой id или id другого игрока?
Lua:
local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
local _, id = sampGetPlayerIdByCharHandle(ped) -- получить ид другого игрока. ped - это хендл персонажа
Как проверить, что строка содержит какой-то текст?
Lua:
if string.find(str, 'текст', 1, true) then
-- строка str содержит "текст"
end
Как эмулировать нажатие игровой клавиши?
Lua:
local game_keys = require 'game.keys' -- где-нибудь в начале скрипта вне функции main

setGameKeyState(game_keys.player.FIREWEAPON, -1) -- будет сэмулировано нажатие клавиши атаки
Все иды клавиш находятся в файле moonloader/lib/game/keys.lua.
Подробнее о функции setGameKeyState здесь: lua - setgamekeystate | BlastHack — DEV_WIKI(https://www.blast.hk/wiki/lua:setgamekeystate)
Как получить id другого игрока, в которого целюсь я?
Lua:
local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE) -- получить хендл персонажа, в которого целится игрок
if valid and doesCharExist(ped) then -- если цель есть и персонаж существует
  local result, id = sampGetPlayerIdByCharHandle(ped) -- получить samp-ид игрока по хендлу персонажа
  if result then -- проверить, прошло ли получение ида успешно
    -- здесь любые действия с полученным идом игрока
  end
end
Как зарегистрировать команду чата SAMP?
Lua:
-- До бесконечного цикла/задержки
sampRegisterChatCommand("mycommand", function (param)
     -- param будет содержать весь текст введенный после команды, чтобы разделить его на аргументы используйте string.match()
    sampAddChatMessage("MyCMD", -1)
end)
Крашит игру при вызове sampSendChat. Как это исправить?
Это происходит из-за бага в SAMPFUNCS, когда производится попытка отправки пакета определенными функциями изнутри события исходящих RPC и пакетов. Исправления для этого бага нет, но есть способ не провоцировать его. Вызов sampSendChat изнутри обработчика исходящих RPC/пакетов нужно обернуть в скриптовый поток с нулевой задержкой:
Lua:
function onSendRpc(id)
  -- крашит:
  -- sampSendChat('Send RPC: ' .. id)

  -- норм:
  lua_thread.create(function()
    wait(0)
    sampSendChat('Send RPC: ' .. id)
  end)
end
 
Последнее редактирование:

MrBidloKoder

Известный
423
249
Как вариант -
Lua:
while true do
    wait(0)
    if text1 == "Привет" or text2 == "Привет" then -- условия для выключения
        print(text1) -- Любой код для выполнения
        break
    end
end
это называется костыли. Я конкретно хочу узнать про метод с "for pairs k, v" или как там. Up
 

meowprd

Тот самый Котовский
Проверенный
1,277
716
это называется костыли. Я конкретно хочу узнать про метод с "for pairs k, v" или как там. Up
так ты бы сразу написал что ты имеешь на входе
таблица, массив, просто кучу переменных, с чем ты работать то собираешься?
 

Hatiko

Известный
Проверенный
1,514
632
Парс используется только с таблицами, если хочешь с парсом поиграться, то тебе нужно переменные text1, text2 и т..п засунуть в таблицу.
ipairs используется с таблицами, у которых индексы являются целочисленными, твой пример:
Lua:
var = {
    "Пример", -- каждому значению присваивается порядковый номер индекса.
    "Не привет",
    "Привет"
}

for i,v in ipairs(var) do
    if v == "Привет" then
        -- Выполняется код какой-то. i циклично присваивается порядковые номера элементов.
    end
end

pairs используется для перебора любых типов таблиц,те. индексы которых могут быть представлены не только в виде числа, но и строки или таблицы.
Пример:

Lua:
var = {
    text1 = "Привет",
    text2 = "Не привет",
    text3 = "Привет"
}

for k,v in pairs(var) do
    if v == "Привет" then
        -- выполняется код какой-то. ключу k циклично присваивается text1, text2 и т.п., а v соответственно значение данного ключа
    end
end
 
  • Нравится
Реакции: MrBidloKoder

JustFedot

Известный
339
353
Я почти уверен что это невозможно, ибо не нашел инфы, но всётаки я у вас спрошу.
Есть ли возможность покрасить сам текст в imgui.Selectable и imgui.Button и тд, подойдет как и НЕХ так и RGBA (( ImVec4 )).
По идее можно в стиле поколупаться, но мне нужно на каждый Selectable свой цвет.
 

Quasper

Известный
835
354
Я почти уверен что это невозможно, ибо не нашел инфы, но всётаки я у вас спрошу.
Есть ли возможность покрасить сам текст в imgui.Selectable и imgui.Button и тд, подойдет как и НЕХ так и RGBA (( ImVec4 )).
По идее можно в стиле поколупаться, но мне нужно на каждый Selectable свой цвет.
Попробуй так

Lua:
imgui.PushStyleColor(imgui.Col.Text, imgui.ImVec4(1, 1, 1, 1))
imgui.Selectable(...)
imgui.PopStyleColor()
Как получить цвет игрока(sampGetPlayerColor) в формате RGB/imgui.ImVec?
Функция
Применение:
local a, r, g, b = explode_argb(sampGetPlayerColor(ID))
Дабы работать с ImVec4 нужно поделить каждое возвращаемое значение на 255
Пример:
local color = imgui.ImVec4(r / 255, g / 255, b / 255, a / 255)
 
Последнее редактирование:
  • Влюблен
Реакции: JustFedot и S-Sirius

oBrabo

Участник
46
3
Guys, first I'm sorry for using English in a Russian forum.

In short, I need everyone around me to practice the same animation for a long time, and I need to be able to turn this function on / off. I have already researched about it, I have seen onApplyAnimation and onClearAnimation but I was unable to proceed.

I also created another mod that adds everyone around me, but I can't get them back, does anyone know why? Code I used:

Код:
require "lib.moonloader"
function delplayers()

    for _, handle in ipairs(getAllChars()) do

      if doesCharExist(handle) then

        local _, id = sampGetPlayerIdByCharHandle(handle)

            if id ~= myid then
                emul_rpc('onPlayerStreamOut', { id })
            end

      end

      end

end

function main()

    if not isSampLoaded() then return end

    while not isSampAvailable() do wait(0) end

    sampRegisterChatCommand("delplayers", delplayers)

    wait(-1)

end



function emul_rpc(hook, parameters)

    local bs_io = require 'samp.events.bitstream_io'

    local handler = require 'samp.events.handlers'

    local extra_types = require 'samp.events.extra_types'

    local hooks = {



        --[[ Outgoing rpcs

        ['onSendEnterVehicle'] = { 'int16', 'bool8', 26 },

        ['onSendClickPlayer'] = { 'int16', 'int8', 23 },

        ['onSendClientJoin'] = { 'int32', 'int8', 'string8', 'int32', 'string8', 'string8', 'int32', 25 },

        ['onSendEnterEditObject'] = { 'int32', 'int16', 'int32', 'vector3d', 27 },

        ['onSendCommand'] = { 'string32', 50 },

        ['onSendSpawn'] = { 52 },

        ['onSendDeathNotification'] = { 'int8', 'int16', 53 },

        ['onSendDialogResponse'] = { 'int16', 'int8', 'int16', 'string8', 62 },

        ['onSendClickTextDraw'] = { 'int16', 83 },

        ['onSendVehicleTuningNotification'] = { 'int32', 'int32', 'int32', 'int32', 96 },

        ['onSendChat'] = { 'string8', 101 },

        ['onSendClientCheckResponse'] = { 'int8', 'int32', 'int8', 103 },

        ['onSendVehicleDamaged'] = { 'int16', 'int32', 'int32', 'int8', 'int8', 106 },

        ['onSendEditAttachedObject'] = { 'int32', 'int32', 'int32', 'int32', 'vector3d', 'vector3d', 'vector3d', 'int32', 'int32', 116 },

        ['onSendEditObject'] = { 'bool', 'int16', 'int32', 'vector3d', 'vector3d', 117 },

        ['onSendInteriorChangeNotification'] = { 'int8', 118 },

        ['onSendMapMarker'] = { 'vector3d', 119 },

        ['onSendRequestClass'] = { 'int32', 128 },

        ['onSendRequestSpawn'] = { 129 },

        ['onSendPickedUpPickup'] = { 'int32', 131 },

        ['onSendMenuSelect'] = { 'int8', 132 },

        ['onSendVehicleDestroyed'] = { 'int16', 136 },

        ['onSendQuitMenu'] = { 140 },

        ['onSendExitVehicle'] = { 'int16', 154 },

        ['onSendUpdateScoresAndPings'] = { 155 },

        ['onSendGiveDamage'] = { 'int16', 'float', 'int32', 'int32', 115 },

        ['onSendTakeDamage'] = { 'int16', 'float', 'int32', 'int32', 115 },]]



        -- Incoming rpcs

        ['onInitGame'] = { 139 },

        ['onPlayerJoin'] = { 'int16', 'int32', 'bool8', 'string8', 137 },

        ['onPlayerQuit'] = { 'int16', 'int8', 138 },

        ['onRequestClassResponse'] = { 'bool8', 'int8', 'int32', 'int8', 'vector3d', 'float', 'Int32Array3', 'Int32Array3', 128 },

        ['onRequestSpawnResponse'] = { 'bool8', 129 },

        ['onSetPlayerName'] = { 'int16', 'string8', 'bool8', 11 },

        ['onSetPlayerPos'] = { 'vector3d', 12 },

        ['onSetPlayerPosFindZ'] = { 'vector3d', 13 },

        ['onSetPlayerHealth'] = { 'float', 14 },

        ['onTogglePlayerControllable'] = { 'bool8', 15 },

        ['onPlaySound'] = { 'int32', 'vector3d', 16 },

        ['onSetWorldBounds'] = { 'float', 'float', 'float', 'float', 17 },

        ['onGivePlayerMoney'] = { 'int32', 18 },

        ['onSetPlayerFacingAngle'] = { 'float', 19 },

        --['onResetPlayerMoney'] = { 20 },

        --['onResetPlayerWeapons'] = { 21 },

        ['onGivePlayerWeapon'] = { 'int32', 'int32', 22 },

        --['onCancelEdit'] = { 28 },

        ['onSetPlayerTime'] = { 'int8', 'int8', 29 },

        ['onSetToggleClock'] = { 'bool8', 30 },

        ['onPlayerStreamIn'] = { 'int16', 'int8', 'int32', 'vector3d', 'float', 'int32', 'int8', 32 },

        ['onSetShopName'] = { 'string256', 33 },

        ['onSetPlayerSkillLevel'] = { 'int16', 'int32', 'int16', 34 },

        ['onSetPlayerDrunk'] = { 'int32', 35 },

        ['onCreate3DText'] = { 'int16', 'int32', 'vector3d', 'float', 'bool8', 'int16', 'int16', 'encodedString4096', 36 },

        --['onDisableCheckpoint'] = { 37 },

        ['onSetRaceCheckpoint'] = { 'int8', 'vector3d', 'vector3d', 'float', 38 },

        --['onDisableRaceCheckpoint'] = { 39 },

        --['onGamemodeRestart'] = { 40 },

        ['onPlayAudioStream'] = { 'string8', 'vector3d', 'float', 'bool8', 41 },

        --['onStopAudioStream'] = { 42 },

        ['onRemoveBuilding'] = { 'int32', 'vector3d', 'float', 43 },

        ['onCreateObject'] = { 44 },

        ['onSetObjectPosition'] = { 'int16', 'vector3d', 45 },

        ['onSetObjectRotation'] = { 'int16', 'vector3d', 46 },

        ['onDestroyObject'] = { 'int16', 47 },

        ['onPlayerDeathNotification'] = { 'int16', 'int16', 'int8', 55 },

        ['onSetMapIcon'] = { 'int8', 'vector3d', 'int8', 'int32', 'int8', 56 },

        ['onRemoveVehicleComponent'] = { 'int16', 'int16', 57 },

        ['onRemove3DTextLabel'] = { 'int16', 58 },

        ['onPlayerChatBubble'] = { 'int16', 'int32', 'float', 'int32', 'string8', 59 },

        ['onUpdateGlobalTimer'] = { 'int32', 60 },

        ['onShowDialog'] = { 'int16', 'int8', 'string8', 'string8', 'string8', 'encodedString4096', 61 },

        ['onDestroyPickup'] = { 'int32', 63 },

        ['onLinkVehicleToInterior'] = { 'int16', 'int8', 65 },

        ['onSetPlayerArmour'] = { 'float', 66 },

        ['onSetPlayerArmedWeapon'] = { 'int32', 67 },

        ['onSetSpawnInfo'] = { 'int8', 'int32', 'int8', 'vector3d', 'float', 'Int32Array3', 'Int32Array3', 68 },

        ['onSetPlayerTeam'] = { 'int16', 'int8', 69 },

        ['onPutPlayerInVehicle'] = { 'int16', 'int8', 70 },

        --['onRemovePlayerFromVehicle'] = { 71 },

        ['onSetPlayerColor'] = { 'int16', 'int32', 72 },

        ['onDisplayGameText'] = { 'int32', 'int32', 'string32', 73 },

        --['onForceClassSelection'] = { 74 },

        ['onAttachObjectToPlayer'] = { 'int16', 'int16', 'vector3d', 'vector3d', 75 },

        ['onInitMenu'] = { 76 },

        ['onShowMenu'] = { 'int8', 77 },

        ['onHideMenu'] = { 'int8', 78 },

        ['onCreateExplosion'] = { 'vector3d', 'int32', 'float', 79 },

        ['onShowPlayerNameTag'] = { 'int16', 'bool8', 80 },

        ['onAttachCameraToObject'] = { 'int16', 81 },

        ['onInterpolateCamera'] = { 'bool', 'vector3d', 'vector3d', 'int32', 'int8', 82 },

        ['onGangZoneStopFlash'] = { 'int16', 85 },

        ['onApplyPlayerAnimation'] = { 'int16', 'string8', 'string8', 'bool', 'bool', 'bool', 'bool', 'int32', 86 },

        ['onClearPlayerAnimation'] = { 'int16', 87 },

        ['onSetPlayerSpecialAction'] = { 'int8', 88 },

        ['onSetPlayerFightingStyle'] = { 'int16', 'int8', 89 },

        ['onSetPlayerVelocity'] = { 'vector3d', 90 },

        ['onSetVehicleVelocity'] = { 'bool8', 'vector3d', 91 },

        ['onServerMessage'] = { 'int32', 'string32', 93 },

        ['onSetWorldTime'] = { 'int8', 94 },

        ['onCreatePickup'] = { 'int32', 'int32', 'int32', 'vector3d', 95 },

        ['onMoveObject'] = { 'int16', 'vector3d', 'vector3d', 'float', 'vector3d', 99 },

        ['onEnableStuntBonus'] = { 'bool', 104 },

        ['onTextDrawSetString'] = { 'int16', 'string16', 105 },

        ['onSetCheckpoint'] = { 'vector3d', 'float', 107 },

        ['onCreateGangZone'] = { 'int16', 'vector2d', 'vector2d', 'int32', 108 },

        ['onPlayCrimeReport'] = { 'int16', 'int32', 'int32', 'int32', 'int32', 'vector3d', 112 },

        ['onGangZoneDestroy'] = { 'int16', 120 },

        ['onGangZoneFlash'] = { 'int16', 'int32', 121 },

        ['onStopObject'] = { 'int16', 122 },

        ['onSetVehicleNumberPlate'] = { 'int16', 'string8', 123 },

        ['onTogglePlayerSpectating'] = { 'bool32', 124 },

        ['onSpectatePlayer'] = { 'int16', 'int8', 126 },

        ['onSpectateVehicle'] = { 'int16', 'int8', 127 },

        ['onShowTextDraw'] = { 134 },

        ['onSetPlayerWantedLevel'] = { 'int8', 133 },

        ['onTextDrawHide'] = { 'int16', 135 },

        ['onRemoveMapIcon'] = { 'int8', 144 },

        ['onSetWeaponAmmo'] = { 'int8', 'int16', 145 },

        ['onSetGravity'] = { 'float', 146 },

        ['onSetVehicleHealth'] = { 'int16', 'float', 147 },

        ['onAttachTrailerToVehicle'] = { 'int16', 'int16', 148 },

        ['onDetachTrailerFromVehicle'] = { 'int16', 149 },

        ['onSetWeather'] = { 'int8', 152 },

        ['onSetPlayerSkin'] = { 'int32', 'int32', 153 },

        ['onSetInterior'] = { 'int8', 156 },

        ['onSetCameraPosition'] = { 'vector3d', 157 },

        ['onSetCameraLookAt'] = { 'vector3d', 'int8', 158 },

        ['onSetVehiclePosition'] = { 'int16', 'vector3d', 159 },

        ['onSetVehicleAngle'] = { 'int16', 'float', 160 },

        ['onSetVehicleParams'] = { 'int16', 'int16', 'bool8', 161 },

        --['onSetCameraBehind'] = { 162 },

        ['onChatMessage'] = { 'int16', 'string8', 101 },

        ['onConnectionRejected'] = { 'int8', 130 },

        ['onPlayerStreamOut'] = { 'int16', 163 },

        ['onVehicleStreamIn'] = { 164 },

        ['onVehicleStreamOut'] = { 'int16', 165 },

        ['onPlayerDeath'] = { 'int16', 166 },

        ['onPlayerEnterVehicle'] = { 'int16', 'int16', 'bool8', 26 },

        ['onUpdateScoresAndPings'] = { 'PlayerScorePingMap', 155 },

        ['onSetObjectMaterial'] = { 84 },

        ['onSetObjectMaterialText'] = { 84 },

        ['onSetVehicleParamsEx'] = { 'int16', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 'int8', 24 },

        ['onSetPlayerAttachedObject'] = { 'int16', 'int32', 'bool', 'int32', 'int32', 'vector3d', 'vector3d', 'vector3d', 'int32', 'int32', 113 }



    }

    local handler_hook = {

        ['onInitGame'] = true,

        ['onCreateObject'] = true,

        ['onInitMenu'] = true,

        ['onShowTextDraw'] = true,

        ['onVehicleStreamIn'] = true,

        ['onSetObjectMaterial'] = true,

        ['onSetObjectMaterialText'] = true

    }

    local extra = {

        ['PlayerScorePingMap'] = true,

        ['Int32Array3'] = true

    }

    local hook_table = hooks[hook]

    if hook_table then

        local bs = raknetNewBitStream()

        if not handler_hook[hook] then

            local max = #hook_table-1

            if max > 0 then

                for i = 1, max do

                    local p = hook_table[i]

                    if extra[p] then extra_types[p]['write'](bs, parameters[i])

                    else bs_io[p]['write'](bs, parameters[i]) end

                end

            end

        else

            if hook == 'onInitGame' then handler.on_init_game_writer(bs, parameters)

            elseif hook == 'onCreateObject' then handler.on_create_object_writer(bs, parameters)

            elseif hook == 'onInitMenu' then handler.on_init_menu_writer(bs, parameters)

            elseif hook == 'onShowTextDraw' then handler.on_show_textdraw_writer(bs, parameters)

            elseif hook == 'onVehicleStreamIn' then handler.on_vehicle_stream_in_writer(bs, parameters)

            elseif hook == 'onSetObjectMaterial' then handler.on_set_object_material_writer(bs, parameters, 1)

            elseif hook == 'onSetObjectMaterialText' then handler.on_set_object_material_writer(bs, parameters, 2) end

        end

        raknetEmulRpcReceiveBitStream(hook_table[#hook_table], bs)

        raknetDeleteBitStream(bs)

    end

end
 

chockscrot

Участник
42
1
как мне визуально заставить всех игроков вокруг меня воспроизводить одну и ту же анимацию? и я могу активировать и деактивировать

enabled = все с одинаковой анимацией
отключено = вернуться к исходной анимации
 

GAuditore

Активный
131
29
Кто сможет изменить творения luajit-decomp026 в более читабельный код? (Получение ближайшего человека в авто (водитель))
Lua:
            --jump to 0014 (if previous if statement is false) --0014 JMP-JMP
            var_3_0 = 0 --var_3_0 NUMBER-NUMBER
            var_3_2 = true --var_3_2 PRIMITIVE-PRIMITIVE
            var_3_1 = sampGetMaxPlayerId(var_3_2)
            var_3_2 = 1 --var_3_2 NUMBER-NUMBER
            for var_3_3 = var_3_0,var_3_1,var_3_2 do --location 0041, loop ends at 0132-1
                var_3_5 = var_3_3
                var_3_4, var_3_5 = sampGetCharHandleBySampPlayerId(var_3_5)
                playerhandle = var_3_5
                flag = var_3_4
                if flag then
                    --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                    var_3_4 = doesCharExist(playerhandle)
                    if var_3_4 then
                        --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                        var_3_4 = isCharSittingInAnyCar(playerhandle)
                        if var_3_4 then
                            --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                            var_3_4, var_3_5, var_3_6 = getCharCoordinates(PLAYER_PED)
                            myZ = var_3_6
                            myY = var_3_5
                            myX = var_3_4
                            var_3_4, var_3_5, var_3_6 = getCharCoordinates(playerhandle)
                            plZ = var_3_6
                            plY = var_3_5
                            plX = var_3_4
                            var_3_4 = getDistanceBetweenCoords3d(myX, myY, myZ, plX, plY, plZ)
                            var_3_5 = 10 --var_3_5 NUMBER-NUMBER
                            if var_3_4 <= var_3_5 then
                                --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                if OnOff.v then
                                    --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                    var_3_6 = uget_3_1.config.Press_hotkey
                                    var_3_5 = uget_3_1.config.Press_hotkey.gsub(var_3_6, "%[", "")
                                    var_3_6 = var_3_5
                                    var_3_4 = isKeyJustPressed( var_3_5.gsub(var_3_6, "%]", "") )
                                    if var_3_4 then
                                        --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                        var_3_4 = sampIsChatInputActive()
                                        if not var_3_4 then
                                            --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                            var_3_4 = storeCarCharIsInNoSave(playerhandle)
                                            carhandle = var_3_4
                                            var_3_4 = getDriverOfCar(carhandle)
                                            driverhandle = var_3_4
                                            if playerhandle == driverhandle then
                                                --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                                var_3_5 = 0 --var_3_5 NUMBER-NUMBER
                                                wait(var_3_5)
                                                var_3_6 = var_3_3
                                                var_3_5 =  "/repare " .. var_3_6 .. " " .. price.v
                                                sampSendChat(var_3_5)
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
 

Myradov|

Известный
361
106
Кто сможет изменить творения luajit-decomp026 в более читабельный код? (Получение ближайшего человека в авто (водитель))
Lua:
            --jump to 0014 (if previous if statement is false) --0014 JMP-JMP
            var_3_0 = 0 --var_3_0 NUMBER-NUMBER
            var_3_2 = true --var_3_2 PRIMITIVE-PRIMITIVE
            var_3_1 = sampGetMaxPlayerId(var_3_2)
            var_3_2 = 1 --var_3_2 NUMBER-NUMBER
            for var_3_3 = var_3_0,var_3_1,var_3_2 do --location 0041, loop ends at 0132-1
                var_3_5 = var_3_3
                var_3_4, var_3_5 = sampGetCharHandleBySampPlayerId(var_3_5)
                playerhandle = var_3_5
                flag = var_3_4
                if flag then
                    --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                    var_3_4 = doesCharExist(playerhandle)
                    if var_3_4 then
                        --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                        var_3_4 = isCharSittingInAnyCar(playerhandle)
                        if var_3_4 then
                            --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                            var_3_4, var_3_5, var_3_6 = getCharCoordinates(PLAYER_PED)
                            myZ = var_3_6
                            myY = var_3_5
                            myX = var_3_4
                            var_3_4, var_3_5, var_3_6 = getCharCoordinates(playerhandle)
                            plZ = var_3_6
                            plY = var_3_5
                            plX = var_3_4
                            var_3_4 = getDistanceBetweenCoords3d(myX, myY, myZ, plX, plY, plZ)
                            var_3_5 = 10 --var_3_5 NUMBER-NUMBER
                            if var_3_4 <= var_3_5 then
                                --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                if OnOff.v then
                                    --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                    var_3_6 = uget_3_1.config.Press_hotkey
                                    var_3_5 = uget_3_1.config.Press_hotkey.gsub(var_3_6, "%[", "")
                                    var_3_6 = var_3_5
                                    var_3_4 = isKeyJustPressed( var_3_5.gsub(var_3_6, "%]", "") )
                                    if var_3_4 then
                                        --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                        var_3_4 = sampIsChatInputActive()
                                        if not var_3_4 then
                                            --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                            var_3_4 = storeCarCharIsInNoSave(playerhandle)
                                            carhandle = var_3_4
                                            var_3_4 = getDriverOfCar(carhandle)
                                            driverhandle = var_3_4
                                            if playerhandle == driverhandle then
                                                --jump to 0131 (if previous if statement is false) --0131 JMP-JMP
                                                var_3_5 = 0 --var_3_5 NUMBER-NUMBER
                                                wait(var_3_5)
                                                var_3_6 = var_3_3
                                                var_3_5 =  "/repare " .. var_3_6 .. " " .. price.v
                                                sampSendChat(var_3_5)
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
Хреновый декомплит юзаешь, такой псевдокод очень трудно переписать
 

S-Sirius

Известный
351
21
Цвет чего использует ToggleButton? (То есть что менять в стиле чтобы менялся и это)
 

CaJlaT

07.11.2024 14:55
Модератор
2,840
2,672
Цвет чего использует ToggleButton? (То есть что менять в стиле чтобы менялся и это)
трудно открыть либу и посмотреть?
Код:
Фон - imgui.Col.FrameBgHovered
Сама кнопка:
Активна - imgui.Col.ButtonActive
Неактивна - imgui.ImColor(150, 150, 150, 255):GetVec4()
1602264783772.png
 
  • Нравится
Реакции: S-Sirius