[Evolve] Taxi Helper

Kuharz

Известный
Автор темы
407
154
Описание: Хелпер для таксистов Evolve RP который может:
- Автоматически принимать вызов на заданной дистанции.
- Автоматически проверять /taxiskill после выхода каждого клиента.
- Автоматически ставить выбранный вами клист после аренды такси (также при спавне игрока во время рабочего дня, например после смерти и появления на вокзале) и выключать клист при завершении работы на такси.
При первом запуске, если отсутствует конфиг, то он будет создан с настройками по умолчанию.

Некоторые особенности:
- Если у вас включен пункт "Авто /sendcall" то:
- когда в такси сядет какой-то пассажир, который не делал вызов, то вызовы приниматься не будут;
- пока в вашей машине есть пассажиры вызовы не будут приниматься до тех пор, пока в машине не будет 0 пассажиров;
- после принятия вызова другие вызовы будут игнорироваться до тех пор, пока вы не высадите пассажира/пока не появится надпись "Диспетчер: Вызов отменен пользователем" или "Диспетчер: Пассажир уехал на другом такси";
- при перезагрузке скрипта (ctrl+R или через меню настроек) скрипт будет принимать вызовы, даже если в вашем такси есть пассажир(ы).​
- Если у вас включен пункт "Авто /taxiskill", то скрипт будет проверять скилл после каждого выхода пассажира.
- Если у вас включен пункт "Авто /clist", то при аренде машины такси (taxi, cabbie, sentinel, sultan) за 1000$ будет автоматически включен заданный клист.

Требования:
  • MoonLoader 0.26
  • SampFuncs
  • MoonImGui
Активация меню настроек:
/th

Скриншоты:
rVWJuYa.jpg


P.S.
Зачем он нужен? Сам не знаю, я просто качал скилл такси и решил сделать скрипт для автоматизации) Также может быть дохрена багов, т.к. это мое первое творение на Lua. Баги, возможно, я исправлю, если будет время.
 

Вложения

  • Taxi Helper.luac
    7.5 KB · Просмотры: 541

sаnеk

Всефорумный sanek
Друг
2,107
2,067
бля внатуре дай сорц чтобы каждый мог подстроить под свой сервер
 
  • Нравится
Реакции: xionerme

Kuharz

Известный
Автор темы
407
154
WARNING! ГОВНОКОД
Lua:
script_name('[ERP] Taxi Helper')

require 'lib.moonloader'
require 'lib.sampfuncs'

--REQUESTS--
local sf = require 'sampfuncs'
local sampev = require 'lib.samp.events'
local vkeys = require "vkeys"
encoding = require 'encoding'
local rx, ry = getScreenResolution()
local wx, wy = rx-500, ry-390
local inicfg = require 'inicfg'
imgui = require 'imgui'
encoding.default = 'CP1251'
u8 = encoding.UTF8

---------------------------------------------------DEFOLT CONFIG-----------------------------------------------
local defcfg =
{
  Main =
  {
    clist = 0,
        autoClist = false,
        autoAccept = false,
        autoSkill = false,
        acceptDistance = 1500,
        delay = 2000,
  }
}
---------------------------------------------------------------------------------------------------------

local directIni = "TaxiHelper.ini" -- путь к конфигу
local mainIni = inicfg.load(defcfg, "TaxiHelper.ini") -- загрузка конфига
inicfg.save(mainIni, directIni) -- сохранение конфига

local main_window_state = imgui.ImBool(false) -- состояние имгуи окна при запуске скрипта
local text_buffer = imgui.ImBuffer(256) -- сохраненный текст

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
        while not isSampAvailable() do wait(100) end
                    sampAddChatMessage('{edf511}[Taxi Helper] {ffffff}successful loaded.', -1)
                sampRegisterChatCommand("th", cmd_th) -- регистрация команды
    imgui.Process = false -- имгуи процесс не работает
    while true do
        wait(0)
          if main_window_state.v == false then
              imgui.Process = false
                end
    end
end


function cmd_th(arg) --команда /th
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

    rabden = nil
    autoSkill = imgui.ImBool(mainIni.Main.autoSkill) -- состояние автоскилла берет из конфига
    autoClist = imgui.ImBool(mainIni.Main.autoClist) -- состояние автоклист берет из конфига
    autoAccept = imgui.ImBool(mainIni.Main.autoAccept) -- состояние автоакцепт берет из конфига
    clistId = imgui.ImInt(mainIni.Main.clist) -- номер клиста берет из конфига
    accdist = imgui.ImInt(mainIni.Main.acceptDistance) -- расстояние для работы автоакцепта из конфига
    delay = imgui.ImInt(mainIni.Main.delay) -- задержка между поступлением вызова и его принятием

    function apply_custom_style()
        imgui.SwitchContext()
        local style = imgui.GetStyle()
        local colors = style.Colors
        local clr = imgui.Col
        local ImVec4 = imgui.ImVec4
        style.WindowRounding = 3.5
        style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
        style.ChildWindowRounding = 2.0
        style.FrameRounding = 3.5
        style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
        style.ScrollbarSize = 13.0
        style.ScrollbarRounding = 0
        style.GrabMinSize = 8.0
        style.GrabRounding = 1.0
        style.WindowPadding = imgui.ImVec2(4.0, 4.0)
        style.FramePadding = imgui.ImVec2(3.5, 3.5)
        style.ButtonTextAlign = imgui.ImVec2(0.0, 0.5)
        colors[clr.CheckMark] = ImVec4(0.1, 0.83, 0.01, 0.8)
        colors[clr.Separator] = ImVec4(0.85, 0.63, 0.01, 0.8)
        colors[clr.TitleBg] = ImVec4(0.85, 0.63, 0.01, 0.8)
        colors[clr.TitleBgActive] = ImVec4(0.85, 0.63, 0.01, 0.8)
        colors[clr.WindowBg] = ImVec4(0.06, 0.06, 0.06, 0.91)
        colors[clr.Button] = ImVec4(0.65, 0.6, 0.05, 0.8)
        colors[clr.ButtonHovered] = ImVec4(0.86, 0.57, 0.13, 0.5)
        colors[clr.ButtonActive] = ImVec4(0.21, 0.21, 0.21, 0.81)
        colors[clr.SliderGrab] = imgui.ImVec4(0.85, 0.63, 0.01, 1.00)
        colors[clr.SliderGrabActive] = ImVec4(0.65, 0.6, 0.05, 1.00)
    end
    apply_custom_style()


    function imgui.TextQuestion(text)
         imgui.TextDisabled('(?)')
         if imgui.IsItemHovered() then
             imgui.BeginTooltip()
             imgui.PushTextWrapPos(450)
             imgui.TextUnformatted(text)
             imgui.PopTextWrapPos()
             imgui.EndTooltip()
         end
    end

function imgui.OnDrawFrame() -- работа имгуи каждый кадр
    imgui.SetNextWindowSize(imgui.ImVec2(400, 260)) --размер имгуи окна
    imgui.SetNextWindowPos(imgui.ImVec2(rx/2-wx/4, ry/2-wy/3)) -- позиция имгуи окна
    imgui.Begin(u8"Taxi Helper", main_window_state, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoResize) -- создание имгуи, заголовок
        if imgui.Checkbox(u8"Авто /clist", autoClist) then -- если чекбокс автоклист включен или выключен, то
            mainIni.Main.autoClist = autoClist.v -- записывает состояние автоклиста после изменения состояния чекбокса в кфг
            inicfg.save(mainIni, directIni) -- сохраняет кфг
        end
    imgui.SameLine(nil, 5)
    imgui.TextQuestion(u8'Автоматически включает заданный /clist после начала работы на такси, спавна игрока во время рабочего дня и при завершении рабочего дня устанавливает /clist 0.')
        if imgui.Checkbox(u8"Авто /sendcall", autoAccept) then --если чекбокс автоакцепт вкл или выкл
            mainIni.Main.autoAccept = autoAccept.v -- записывает состояние автоакцепта после изменения состояние чекбокса в кфг
            inicfg.save(mainIni, directIni) -- сохраняет кфг
        end
    imgui.SameLine(nil, 5)
    imgui.TextQuestion(u8'Автоматически принимает вызов такси, если расстояние равно или меньше заданного. Если вы уже приняли вызов или какой-то пассажир сел в ваше такси, то функция отключается. Функция снова начинает свою работу, если пассажир вышел из такси и больше пассажиров в такси нет, также если вызов был отменен или пассажир уехал на другом такси.')
        if imgui.Checkbox(u8"Авто /taxiskill", autoSkill) then --если чекбокс авточекскилл вкл или выкл
            mainIni.Main.autoSkill = autoSkill.v -- записывает состояние авточекаскилла после изменения состояние чекбокса в кфг
            inicfg.save(mainIni, directIni) -- сохраняет кфг
        end
    imgui.SameLine(nil, 5)
    imgui.TextQuestion(u8'Автоматически проверяет скилл через 2 секунды после выхода пассажира из такси. Если выйдет 2 пассажира, то скилл проверит 2 раза.')
    imgui.NewLine()
        if imgui.SliderInt("Clist", clistId, 0, 33) then -- слайдер выбора клиста
            mainIni.Main.clist = clistId.v -- записывает клист в кфг
            inicfg.save(mainIni, directIni) -- сохраняет кфг
        end
    imgui.SameLine(nil, 5)
    imgui.TextQuestion(u8'Устанавливает значение цвета для функции Авто /clist.')
    imgui.NewLine()
        if imgui.SliderInt("Accept Distance", accdist, 0, 6000) then -- слайдер выбора клиста
            mainIni.Main.acceptDistance = accdist.v -- записывает дистанцию в кфг
            inicfg.save(mainIni, directIni) -- сохраняет кфг
        end
    imgui.SameLine(nil, 5)
    imgui.TextQuestion(u8'Устанавливает значение расстояния для функции Авто /sendcall.')
    imgui.NewLine()
        if imgui.SliderInt("Delay", delay, 1000, 10000) then -- слайдер выбора клиста
            mainIni.Main.delay = delay.v -- записывает задержку в кфг
            inicfg.save(mainIni, directIni) -- сохраняет кфг
        end
    imgui.SameLine(nil, 5)
    imgui.TextQuestion(u8'Устанавливает задержку между поступлением вызова и его принятием.')
    imgui.Separator() --линия разделения
        if imgui.Button(u8"Перезагрузить скрипт") then --если нажать кнопку перезагрузить скрипт
                showCursor(false) -- убирает курсор
                thisScript():reload() -- перезагрузка скрипта
        end
    imgui.End() -- завершение имгуи процесса
end

function sampev.onDisplayGameText(rstyle, rtime, rtext) -- проверка на кар и аренду за 1к
  dtext = rtext
  dstyle = rstyle
  dtime = rtime
    if dtext == "~b~~h~C: -$1000" then
        setVirtualKeyDown(13, true)
        setVirtualKeyDown(13, false)
        if mainIni.Main.autoClist == true then
            lua_thread.create(function()
                wait(1000)
            _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
            mycol = sampGetPlayerColor(myid)
                if mycol == 4294958628 then
                sampAddChatMessage('{edf511}[Taxi Helper] {ffffff}Цвет ника сменен на: {edf511}' .. mainIni.Main.clist, -1)
                wait(100)
                sampSendChat("/clist " .. mainIni.Main.clist)
                end
            end)
        end
        if mainIni.Main.autoAccept == true then
            if isCharInAnyCar(PLAYER_PED) then
                carhandle = storeCarCharIsInNoSave(PLAYER_PED)
                idcar = getCarModel(carhandle)
                if idcar == 420 or 438 or 405 or 560 then
                rabden = true
                end
            end
        end
    end
end

function sampev.onServerMessage(color, text) --автоакцепт
    if not isGamePaused() or not isPauseMenuActive() then
        if mainIni.Main.autoAccept == true then -- если в кфг автоакцепт тру, то работает этота функция
            if string.find(text, "- Диспетчер: Расстояние", 1, true) then -- ищет в строке текст
                lua_thread.create(function()
                wait(100)
                    local rast, idv = text:match('- Диспетчер: Расстояние (.+) метр%(ов%). Введите %{FFFFFF%}%"/sendcall %[ (.+) %]') --берет из него расстояние и ид
                    if tonumber(rast) <= mainIni.Main.acceptDistance and tonumber(rast) ~= nil then -- если расстояние меньше или равно расстоянию из конфига и не равно нулю
            if rabden == true or rabden == nil then -- если рабочий день начат (при аренде машины, высадке всех пассажиров) или nil (при перезагрузке скрипта)
                          wait(mainIni.Main.delay) -- задержка между поступление вызова и его принятием (из конфига)
                          sampSendChat("/sendcall "..idv) -- принимает вызов
                          rabden = false -- рабочий день фолс, т.к. принят вызов
                          rast = 6000 -- чтобы не было бесконечноого цикла
            end
                    end
                end)
            end
        end
    end

    if text:find('Пассажир .+ сел в ваше Такси.') and rabden == true then -- если закончил работу таксиста, то
        lua_thread.create(function()
        wait(100)
        rabden = false
        end)
    end

    if text:find('Пассажир вышел из вашего Такси.') then -- если пассажир вышел из такси, то
        lua_thread.create(function()
        wait(100)
        if isCharInAnyCar(PLAYER_PED) then -- если игрок в любой машине
          carhandle = storeCarCharIsInNoSave(PLAYER_PED) -- получаем хендл кара
            _, passengers = getNumberOfPassengers(carhandle) -- проверяет сколько пассажиров в машине
          if passengers == 0 then -- если пассажиров 0
                    rabden = true -- рабочий день снова начат и скрипт принимает вызовы
          end
            end
      end)
        if mainIni.Main.autoSkill == true then -- если чек автоскилла включен
            lua_thread.create(function()
            wait(2000)
            sampSendChat('/taxiskill') -- чекает скилл такси после выхода пассажира
            end)
        end
    end

    if text:find('- Диспетчер: Пассажир уехал на другом такси') then -- если пассажир уехал на другом такси, то
        lua_thread.create(function()
        wait(100)
        rabden = true -- снова принимаем вызовы
        end)
    end

    if text:find('- Диспетчер: Вызов отменен пользователем') then -- если пассажир отменил вызов, то
      lua_thread.create(function()
      wait(100)
      rabden = true -- снова принимаем вызовы
      end)
    end

    if text:find('Зарплата будет перечислена во время PayDay') then
        if mainIni.Main.autoClist == true then
            lua_thread.create(function()
            wait(100)
            sampAddChatMessage('{edf511}[Taxi Helper] {ffffff}Цвет ника сменен на: {edf511} 0', -1)
            sampSendChat('/clist 0') -- клист 0
            rabden = false
            end)
        else
            rabden = false
        end
    end
end

function sampev.onSendSpawn() -- если рабочий день начат и игрок заспавнился например после смерти, то автоматом ставит клист
    if mainIni.Main.autoClist == true and rabden == true then
        lua_thread.create(function()
        wait(1200)
        sampSendChat('/clist '..mainIni.Main.clist)
        sampAddChatMessage('{edf511}[Taxi Helper] {ffffff}Цвет ника сменен на: {edf511}' .. mainIni.Main.clist, -1)
        end)
    end
end
 
  • Нравится
Реакции: Ichivo и sаnеk

sаnеk

Всефорумный sanek
Друг
2,107
2,067
короче потестил
работает как-то через очко, то не принимает нихуя вызовы, то принимает когда со мной пассажир едет
 

Kuharz

Известный
Автор темы
407
154
короче потестил
работает как-то через очко, то не принимает нихуя вызовы, то принимает когда со мной пассажир едет
Хуй знает, мб че поменялось в работе, а мб просто код хуевый. Там еще рации добавили для работ мэрии, мб с этим че связано)
 

Kuharz

Известный
Автор темы
407
154
На скрипт положен большой болт, потому что мне влом приводить это говно в нормальный вид и фиксить чет, скрипт делал когда учился ток чет писать на луа.
Может чет и работает в нем, хз, код открыт, редактируй)