Lua [ARZ] Auto Cars Unload

YarikVL

Известный
Автор темы
Проверенный
4,750
1,815
Версия SA-MP
  1. Любая
Доброго времени суток)​
Написал скрипт Auto Cars Unload, который выгружает ваш личный транспорт, если он не припаркован ( т. е. находится на стандартной парковке у АБ ) или находится на штрафстоянке. Очень удобно, если Вы используете авто реконект, а у вас вдруг транспорт оказался на штрафстоянке или на стандартной парковке. Также можете использовать команду /cunl
Мой первый скрипт, возможно будут ошибки, если есть замечание/предложение пишите)

Установка:
  • Установить moonloader
  • Установить samp.lua (samp events)
  • Скачать файл "Auto Cars Unload" который будет прикреплён ниже и переместить в папку moonloader.
( Если данный скрипт не работает, выполните ещё раз описанные выше пункты. Так же можете воспользоваться гайдом от Chapo.
Если у вас всё равно не работает скрипт - пишите мне. Контакты есть в профиле )


Активация: Автоматическая. А так же команда /cunl

Спасибо за помощь этим людям: Chapo, Стэнфорд, Vegas~
 

Вложения

  • CarsUnload.lua
    3.4 KB · Просмотры: 27
Последнее редактирование:

PanSeek

t.me/dailypanseek
Всефорумный модератор
908
1,776
Для первого скрипта неплохо.
Но я бы сделал что-то вроде такого. Сильно не вдавался в подробности ибо не играю на аризоне, мб не работает или сделал бы лучше.
Lua:
script_name("Auto Cars Unload for ARZ")
script_author("YarikVL")
local memory, se = require 'memory', require 'samp.events'
local CarsUnload, forUnload, count = true, {}, {false, false, false}

function main()
    while not isSampAvailable() do wait(0) end
    local module = getModuleHandle("SAMPFUNCS.asi")
    if module ~= 0 and memory.compare(module + 0xBABD, memory.strptr('\x8B\x43\x04\x8B\x5C\x24\x20\x8B\x48\x34\x83\xE1'), 12) then
        memory.setuint16(module + 0x83349, 0x01ac, true)
        memory.setuint16(module + 0x8343c, 0x01b0, true)
        memory.setuint16(module + 0x866dd, 0x00f4, true)
        memory.setuint16(module + 0x866e9, 0x0306, true)
        memory.setuint8(module + 0x8e754, 0x40, true)
    end
    while not sampIsLocalPlayerSpawned() do wait(500) end
    sampSendChat('/cars'); wait(-1)
end

function se.onSendCommand(cmd)
    if cmd == '/cunl' then
        sampSendChat('/cars'); CarsUnload = true
        return false
    end
end

function se.onShowDialog(id, style, title, button1, button2, text)
    if id == 162 or id == 163 and (count[1] and not count[2]) or (not count[1] and count[2]) or (count[1] and count[2]) then
        sampSendDialogResponse(id, 1, id == 163 and 11 or 0, nil); count[1], count[2] = false, false
        return false
    elseif count[3] and id == 162 then
        sampCloseCurrentDialogWithButton(0); count[3] = false
        return false
    end

    if CarsUnload and title:find("Мой транспорт") then
        forUnload = {}
        local line = -1
        for v in string.gmatch(text, '[^\n]+') do
            line = line + 1
            if v:find('%[Не припарковано%]') or v:find('%[Штрафстоянка%]') then
                table.insert(forUnload, line)
            end
        end
        if #forUnload > 0 then
            for i = 1, #forUnload do
                local lline = forUnload[i]
                if lline == 0 then
                    count[1] = true
                elseif lline == 1 then
                    count[2] = true
                end
            end
        else
            sampAddChatMessage("У вас нету транспортных средств которые находились бы на штрафстоянке или были не припаркованы", 0x00FF00)
            count[3] = true
        end; CarsUnload = false
    end
end
В хуках все таки лучше делать, не нужно париться с потоком, где он по сути не нужен.
P.S. Возможно даже wait(-1) и проверка насчет 162/163 ID диалога не нужен, но я сейчас стрессую из-за чего плохо соображаю.
 
Последнее редактирование:
  • Нравится
Реакции: кайпов и YarikVL

kjor32

Всефорумная чушка
Всефорумный модератор
1,738
1,493
Извиняюсь за оффтоп,ты же не в чс был? И если не личное за что улетел?
1640189366440.png
 

shade!

Известный
805
275
тк кары теперь не загружаются автоматически. смысл этого скрипта?
 

YarikVL

Известный
Автор темы
Проверенный
4,750
1,815
тк кары теперь не загружаются автоматически. смысл этого скрипта?
Очень удобно, если Вы используете авто реконект, а у вас вдруг транспорт оказался на штрафстоянке или на стандартной парковке ( на стандартной парковке может оказаться из-за того что Вы используете функцию авто загрузки транспорта, так как это удобно, если Вы используете какой то один транспорт очень часто то вам не нужно его загружать).

Для первого скрипта неплохо.
Но я бы сделал что-то вроде такого. Сильно не вдавался в подробности ибо не играю на аризоне, мб не работает или сделал бы лучше.
Lua:
script_name("Auto Cars Unload for ARZ")
script_author("YarikVL")
local memory, se = require 'memory', require 'samp.events'
local CarsUnload, forUnload, count = true, {}, {false, false, false}

function main()
    while not isSampAvailable() do wait(0) end
    local module = getModuleHandle("SAMPFUNCS.asi")
    if module ~= 0 and memory.compare(module + 0xBABD, memory.strptr('\x8B\x43\x04\x8B\x5C\x24\x20\x8B\x48\x34\x83\xE1'), 12) then
        memory.setuint16(module + 0x83349, 0x01ac, true)
        memory.setuint16(module + 0x8343c, 0x01b0, true)
        memory.setuint16(module + 0x866dd, 0x00f4, true)
        memory.setuint16(module + 0x866e9, 0x0306, true)
        memory.setuint8(module + 0x8e754, 0x40, true)
    end
    while not sampIsLocalPlayerSpawned() do wait(500) end
    sampSendChat('/cars'); wait(-1)
end

function se.onSendCommand(cmd)
    if cmd == '/cunl' then
        sampSendChat('/cars'); CarsUnload = true
        return false
    end
end

function se.onShowDialog(id, style, title, button1, button2, text)
    if id == 162 or id == 163 and (count[1] and not count[2]) or (not count[1] and count[2]) or (count[1] and count[2]) then
        sampSendDialogResponse(id, 1, id == 163 and 11 or 0, nil); count[1], count[2] = false, false
        return false
    elseif count[3] and id == 162 then
        sampCloseCurrentDialogWithButton(0); count[3] = false
        return false
    end

    if CarsUnload and title:find("Мой транспорт") then
        forUnload = {}
        local line = -1
        for v in string.gmatch(text, '[^\n]+') do
            line = line + 1
            if v:find('%[Не припарковано%]') or v:find('%[Штрафстоянка%]') then
                table.insert(forUnload, line)
            end
        end
        if #forUnload > 0 then
            for i = 1, #forUnload do
                local lline = forUnload[i]
                if lline == 0 then
                    count[1] = true
                elseif lline == 1 then
                    count[2] = true
                end
            end
        else
            sampAddChatMessage("У вас нету транспортных средств которые находились бы на штрафстоянке или были не припаркованы", 0x00FF00)
            count[3] = true
        end; CarsUnload = false
    end
end
В хуках все таки лучше делать, не нужно париться с потоком, где он по сути не нужен.
P.S. Возможно даже wait(-1) и проверка насчет 162/163 ID диалога не нужен, но я сейчас стрессую из-за чего плохо соображаю.
Слишком тяжело для меня в понимании на данном этапе скриптинг. Возможно в будущем смогу понять твой код) Как по мне я сделал более менее понятно и просто ( ну и работоспособно так как лично я проверял всё ). Но за свою идею кода спасибо)
 
Последнее редактирование:
  • Нравится
Реакции: Стэнфорд и PanSeek

cooqie

Известный
1,535
427
да, а когда это может пригодится? я просто задрот и не понял, вот фигею сижу сломал мозг не понял 10 минут
когда транспорт не припаркован, то на него идет больше налог, чем обычно
скрипт выгружает и не дает транспорту слететь быстрее
 
  • Нравится
Реакции: copypaste_scripter