по десятибальной

qvarkk

Новичок
Автор темы
4
1
Версия MoonLoader
.026-beta
Короче уже второй день пытаюсь понять шото в мунлодере и луа, хотел бы попросить опытных человечков (очевидно здесь только опытние профессиональные люди сидят) оценить код, писал чисто для своих нужд, но все равно интересно узнать, что я делаю так, а что не так, заранее спасибо, кто откликнется

И еще вопрос, что посоветовали бы учить, если хочется просто писать рандомные скрипты (не бейте) для сампа, в особенности аризоны
 

Вложения

  • infocorner.lua
    3.2 KB · Просмотры: 9
  • carsdata.lua
    12.2 KB · Просмотры: 7
  • autorun.lua
    1.6 KB · Просмотры: 12
  • Нравится
Реакции: Vespan

qdIbp

Автор темы
Проверенный
1,450
1,190
Код хороший, но в некоторых местах можно упростить
пример из infocomer.lua

Lua:
        speed = (isInCar and tostring(math.floor(getCarSpeed(car))) or getCharSpeed(PLAYER_PED))
        carModel = (isInCar and getCarModel(car) or '-')
        carName = (isInCar and carsDB.carNames[carModel] or "-")
        carId = (isInCar and select(2,sampGetVehicleIdByCarHandle(car)) or "-")
        carHealth = (isInCar and getCarHealth(car) or "-")
точно не скажу работает или нет, так как не проверял, но примерно надеюсь понятно
писать рандомные скрипты (не бейте) для сампа, в особенности аризоны
С++ впринципе не плохо продвинутый язык
 

qvarkk

Новичок
Автор темы
4
1
Код хороший, но в некоторых местах можно упростить
пример из infocomer.lua

Lua:
        speed = (isInCar and tostring(math.floor(getCarSpeed(car))) or getCharSpeed(PLAYER_PED))
        carModel = (isInCar and getCarModel(car) or '-')
        carName = (isInCar and carsDB.carNames[carModel] or "-")
        carId = (isInCar and select(2,sampGetVehicleIdByCarHandle(car)) or "-")
        carHealth = (isInCar and getCarHealth(car) or "-")
точно не скажу работает или нет, так как не проверял, но примерно надеюсь понятно

С++ впринципе не плохо продвинутый язык
классное решение, чет не додумался до этого, спасибо за совет
 

whyega52

Eblang головного мозга
Модератор
2,845
2,790
Для сампа лёгкое самое это луа, более продвинутей будут плюсы
АХК для тру программистов 😎

Хотя если уметь, то на нем тоже можно что-то нормальное сделать думаю
 
  • Нравится
Реакции: Xros 2

chapo

tg/inst: @moujeek
Модератор
9,076
12,052
Код хороший, но в некоторых местах можно упростить
в каком месте он хороший? Код - дерьмо, но в этом нет ничего страшного так как тс новичок.
1. зачем определять переменные isInCar и car в начале скрипта?
2. зачем обновлять значение isInCar и car в main если ты можешь сделать это сразу в фрейме?
3. почему переменные в фрейме не локальные?
4. зачем записывать значения в переменную если они используются 1 раз? (можно пихать сразу в imgui.Text)
5.
Lua:
minutes = os.date("%M", os.time())
seconds = os.date("%S", os.time())
--можно заменить на:
time = os.date('%M:%S')
6. разрешение экрана лучше получать в цикле, так как пользователь может изменить размер окна во время игры
7. в некоторых местах табуляция расставлена неверно
8. проверку на загруженность сампфункса можно убрать
9. в целом вывод текста сделан не очень. Я бы сделал через string.format так как это бы повысило читебельность кода.
Lua:
         imgui.Text(('Ping: %s | FPS: %s | Time: %s\n'):format(sampGetPlayerPing(id), math.floor(100), os.date('%H:%M:%S')))
        imgui.Text(('[%s] %s | Level: %s\n'):format(id, sampGetPlayerNickname(id), sampGetPlayerScore(id)))
        imgui.Text(('HP: %s | AR: %s\n'):format(getCharHealth(PLAYER_PED), getCharArmour(PLAYER_PED)))
        imgui.Text(('POS (XYZ): %s\n'):format(table.concat({getCharCoordinates(PLAYER_PED)}, ', ')))
ну или можешь сделать код "небольшим", но при этом его читабельность не сильно пострадает:
Lua:
imgui.Text(('Ping: %s | FPS: %s | Time: %s\n[%s] %s | Level: %s\nHP: %s | AR: %s\nPOS (XYZ): %s\n'):format(sampGetPlayerPing(id), math.floor(mem.getfloat(0xB7CB50, 4, false)), os.date('%H:%M:%S'), id, sampGetPlayerNickname(id), sampGetPlayerScore(id), getCharHealth(PLAYER_PED), getCharArmour(PLAYER_PED), table.concat({getCharCoordinates(PLAYER_PED)}, ', ')))

-- ИЛИ

        imgui.Text(
            ('Ping: %s | FPS: %s | Time: %s\n[%s] %s | Level: %s\nHP: %s | AR: %s\nPOS (XYZ): %s\n'):format(
                sampGetPlayerPing(id),
                math.floor(mem.getfloat(0xB7CB50, 4, false)),
                os.date('%H:%M:%S'),
                id,
                sampGetPlayerNickname(id),
                sampGetPlayerScore(id),
                getCharHealth(PLAYER_PED),
                getCharArmour(PLAYER_PED),
                table.concat({getCharCoordinates(PLAYER_PED)}, ', ')
            )
        )
Lua:
--[[ Necessities:
    carsdata.lua: https://disk.yandex.com/d/AeremrlMzGOy5Q,
    moonloader v.026.5-beta: https://www.blast.hk/threads/13305/,
    moon imgui: https://www.blast.hk/threads/19292/
]]
require "lib.moonloader"

local encode = require "encoding"
encode.default = "CP1251"
local u8 = encode.UTF8

--local carsDB = require "carsdata"
local sampev = require "lib.samp.events"
local mem = require "memory"
local imgui = require "imgui"


-- ~by qvarkk
script_name("infocorner")
script_author("qvarkk")
script_description("Shows your statistic on the bottom right corner of your screen")

local tag = "{BADA55}[INFOCORNER]: "
local baseColor = 0xFFFFFF
local windowState = imgui.ImBool(true)

function main()
    repeat wait(0) until isSampAvailable()
    sampAddChatMessage(tag .. "{00FF00}Успешно {FFFFFF}загружен. Команда - {00FF00}/icorner", baseColor)
    sampRegisterChatCommand("icorner", function()
        sampAddChatMessage(tag .. "{FFFFFF}Состояние изменено.", baseColor)
        windowState.v = not windowState.v
    end)
    imgui.Process = true
    imgui.ShowCursor = false
    while true do
        wait(0)
        imgui.Process = windowState.v
    end
end

function imgui.OnDrawFrame()
    local swidth, sheight = getScreenResolution()
    imgui.SetMouseCursor(-1) -- for some reason cursor was visible even with false ShowCursor
    imgui.SetNextWindowSize(imgui.ImVec2(225, 140), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowPos(imgui.ImVec2(swidth - 250, sheight - 165), imgui.Cond.FirstUseEver)
    if imgui.Begin("INFOCORNER | by qvarkk") then
        local id = select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))
        imgui.Text(
            ('Ping: %s | FPS: %s | Time: %s\n[%s] %s | Level: %s\nHP: %s | AR: %s\nPOS (XYZ): %s\n'):format(
                sampGetPlayerPing(id),
                math.floor(mem.getfloat(0xB7CB50, 4, false)),
                os.date('%H:%M:%S'),
                id,
                sampGetPlayerNickname(id),
                sampGetPlayerScore(id),
                getCharHealth(PLAYER_PED),
                getCharArmour(PLAYER_PED),
                table.concat({getCharCoordinates(PLAYER_PED)}, ', ')
            )
        )
        if isCharInAnyCar(PLAYER_PED) then
            local veh = storeCarCharIsInNoSave(PLAYER_PED)
            local idResult, id = sampGetVehicleIdByCarHandle(veh)
            imgui.Text(('Car: %s | ID: %s | HP: %s'):format(getNameOfVehicleModel(getCarModel(veh)), idResult and carId or 'not-server', getCarHealth(veh)))
        end
        imgui.End()
    end
end
Вывод: ваш уровень - Kaban Bunya * VRush
 
  • Нравится
Реакции: YarikVL и qvarkk

whyega52

Eblang головного мозга
Модератор
2,845
2,790
Короче уже второй день пытаюсь понять шото в мунлодере и луа, хотел бы попросить опытных человечков (очевидно здесь только опытние профессиональные люди сидят) оценить код, писал чисто для своих нужд, но все равно интересно узнать, что я делаю так, а что не так, заранее спасибо, кто откликнется

И еще вопрос, что посоветовали бы учить, если хочется просто писать рандомные скрипты (не бейте) для сампа, в особенности аризоны
Кнш хз, считается это за говнокод или не, но после прочтения статьи от Pakulichev я не могу смотреть на то, как подключают либы без скобок :/
Lua:
require("lib.moonloader")
 
Последнее редактирование:
  • Нравится
Реакции: qdIbp

krekensuki

Известный
235
130
Кнш хз, считается это за говнокод или не, но после прочтения статьи от Pakulichev я не могу подключать либы без скобок :/
Lua:
require("lib.moonloader")
Lua:
require "lib.moonloader"

С пробелом попробуй

Lua:
require "lib.moonloader"

С пробелом попробуй
хотя хз мб не прокатит
 

chapo

tg/inst: @moujeek
Модератор
9,076
12,052
Lua:
require "lib.moonloader"

С пробелом попробуй
и что? в луа при вызове любой функции ты можешь не ставить скобки, однако лично по моему мнению это делает код менее красивым
1667674178627.png
 
  • Нравится
Реакции: whyega52

whyega52

Eblang головного мозга
Модератор
2,845
2,790
Lua:
require "lib.moonloader"

С пробелом попробуй


хотя хз мб не прокатит
та не, это не вопрос). Я имел ввиду, что мне неприятно глазу, когда либы подключаются как-то иначе, чем так
1667717342843.png
 
  • Нравится
Реакции: qdIbp

krekensuki

Известный
235
130
  • Вау
Реакции: whyega52

whyega52

Eblang головного мозга
Модератор
2,845
2,790
И еще вопрос, что посоветовали бы учить, если хочется просто писать рандомные скрипты (не бейте) для сампа, в особенности аризоны
Если тебе нужены простые скрипты для сампа и не более - LUA с мунлоадером. Если ты хочешь писать сервера - PAWNO, если ты хочешь больше понимать что ты пишешь - C++, если ты гений - языки ассемблера, если ты ебнулся с Луны - CLEO
 
Последнее редактирование:

qvarkk

Новичок
Автор темы
4
1
в каком месте он хороший? Код - дерьмо, но в этом нет ничего страшного так как тс новичок.
1. зачем определять переменные isInCar и car в начале скрипта?
2. зачем обновлять значение isInCar и car в main если ты можешь сделать это сразу в фрейме?
3. почему переменные в фрейме не локальные?
4. зачем записывать значения в переменную если они используются 1 раз? (можно пихать сразу в imgui.Text)
5.
Lua:
minutes = os.date("%M", os.time())
seconds = os.date("%S", os.time())
--можно заменить на:
time = os.date('%M:%S')
6. разрешение экрана лучше получать в цикле, так как пользователь может изменить размер окна во время игры
7. в некоторых местах табуляция расставлена неверно
8. проверку на загруженность сампфункса можно убрать
9. в целом вывод текста сделан не очень. Я бы сделал через string.format так как это бы повысило читебельность кода.
Lua:
         imgui.Text(('Ping: %s | FPS: %s | Time: %s\n'):format(sampGetPlayerPing(id), math.floor(100), os.date('%H:%M:%S')))
        imgui.Text(('[%s] %s | Level: %s\n'):format(id, sampGetPlayerNickname(id), sampGetPlayerScore(id)))
        imgui.Text(('HP: %s | AR: %s\n'):format(getCharHealth(PLAYER_PED), getCharArmour(PLAYER_PED)))
        imgui.Text(('POS (XYZ): %s\n'):format(table.concat({getCharCoordinates(PLAYER_PED)}, ', ')))
ну или можешь сделать код "небольшим", но при этом его читабельность не сильно пострадает:
Lua:
imgui.Text(('Ping: %s | FPS: %s | Time: %s\n[%s] %s | Level: %s\nHP: %s | AR: %s\nPOS (XYZ): %s\n'):format(sampGetPlayerPing(id), math.floor(mem.getfloat(0xB7CB50, 4, false)), os.date('%H:%M:%S'), id, sampGetPlayerNickname(id), sampGetPlayerScore(id), getCharHealth(PLAYER_PED), getCharArmour(PLAYER_PED), table.concat({getCharCoordinates(PLAYER_PED)}, ', ')))

-- ИЛИ

        imgui.Text(
            ('Ping: %s | FPS: %s | Time: %s\n[%s] %s | Level: %s\nHP: %s | AR: %s\nPOS (XYZ): %s\n'):format(
                sampGetPlayerPing(id),
                math.floor(mem.getfloat(0xB7CB50, 4, false)),
                os.date('%H:%M:%S'),
                id,
                sampGetPlayerNickname(id),
                sampGetPlayerScore(id),
                getCharHealth(PLAYER_PED),
                getCharArmour(PLAYER_PED),
                table.concat({getCharCoordinates(PLAYER_PED)}, ', ')
            )
        )
Lua:
--[[ Necessities:
    carsdata.lua: https://disk.yandex.com/d/AeremrlMzGOy5Q,
    moonloader v.026.5-beta: https://www.blast.hk/threads/13305/,
    moon imgui: https://www.blast.hk/threads/19292/
]]
require "lib.moonloader"

local encode = require "encoding"
encode.default = "CP1251"
local u8 = encode.UTF8

--local carsDB = require "carsdata"
local sampev = require "lib.samp.events"
local mem = require "memory"
local imgui = require "imgui"


-- ~by qvarkk
script_name("infocorner")
script_author("qvarkk")
script_description("Shows your statistic on the bottom right corner of your screen")

local tag = "{BADA55}[INFOCORNER]: "
local baseColor = 0xFFFFFF
local windowState = imgui.ImBool(true)

function main()
    repeat wait(0) until isSampAvailable()
    sampAddChatMessage(tag .. "{00FF00}Успешно {FFFFFF}загружен. Команда - {00FF00}/icorner", baseColor)
    sampRegisterChatCommand("icorner", function()
        sampAddChatMessage(tag .. "{FFFFFF}Состояние изменено.", baseColor)
        windowState.v = not windowState.v
    end)
    imgui.Process = true
    imgui.ShowCursor = false
    while true do
        wait(0)
        imgui.Process = windowState.v
    end
end

function imgui.OnDrawFrame()
    local swidth, sheight = getScreenResolution()
    imgui.SetMouseCursor(-1) -- for some reason cursor was visible even with false ShowCursor
    imgui.SetNextWindowSize(imgui.ImVec2(225, 140), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowPos(imgui.ImVec2(swidth - 250, sheight - 165), imgui.Cond.FirstUseEver)
    if imgui.Begin("INFOCORNER | by qvarkk") then
        local id = select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))
        imgui.Text(
            ('Ping: %s | FPS: %s | Time: %s\n[%s] %s | Level: %s\nHP: %s | AR: %s\nPOS (XYZ): %s\n'):format(
                sampGetPlayerPing(id),
                math.floor(mem.getfloat(0xB7CB50, 4, false)),
                os.date('%H:%M:%S'),
                id,
                sampGetPlayerNickname(id),
                sampGetPlayerScore(id),
                getCharHealth(PLAYER_PED),
                getCharArmour(PLAYER_PED),
                table.concat({getCharCoordinates(PLAYER_PED)}, ', ')
            )
        )
        if isCharInAnyCar(PLAYER_PED) then
            local veh = storeCarCharIsInNoSave(PLAYER_PED)
            local idResult, id = sampGetVehicleIdByCarHandle(veh)
            imgui.Text(('Car: %s | ID: %s | HP: %s'):format(getNameOfVehicleModel(getCarModel(veh)), idResult and carId or 'not-server', getCarHealth(veh)))
        end
        imgui.End()
    end
end
Вывод: ваш уровень - Kaban Bunya * VRush
спасибо большое, прям по пунктам раскидал, буду учиться