Не совсем понимаю как прикрепить inicfg к команде

Brooklyn123

Новичок
Автор темы
9
0
Версия MoonLoader
Другое
Приветствую, вопрос такой появился: как мне сделать так, чтобы из ini файла можно было выбирать из какого списка выбирается авто? Т.е. допустим у меня есть такой код, как мне сделать так, чтобы можно было выбирать один из списков и из него выдавалось авто? *Пример* пишу команду, допустим, plvlist 1 и мне в чате пишется "Будет выдаваться авто из первого списка( *Для читающих* config.cars.first_list ) и после прописывания команды /plv выдавались ID тех машин, которые есть в first_list ( first_list=3821,3822,3825,3831,3832 )
Lua:
local inicfg = require 'inicfg'

local config = inicfg.load({
    cars = {
        third_list=1915,1932,1958,1963;
        second_list=451,480,485,494,506;
        first_list=3821,3822,3825,3831,3832
    }
}, 'test')

local directIni = 'moonloader\\config\\test.ini'

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand('plv', function(arg)
        if arg:find('(%d+)') then
            local playerId = tonumber(arg:match('(%d+)'))
            local randomCar = getRandomCar1()
            sampSendChat(('/plveh %d %d'):format(playerId, randomCar))
            sampAddChatMessage(('{FF10B4}Выдал игроку %s машину с ID %s'):format(sampGetPlayerNickname(playerId), randomCar), -1)
        else
            sampAddChatMessage('/plv [id]', 0xFF0000)
        end
    end)
    wait(-1)
end

function getRandomCar1()
    math.randomseed(os.time())
    rand = math.random(1, #cars)
    return cars[rand]
end
 
Решение
Я просто не знаю как это реализовать по другому, поэтому пытался сделать хотя бы так
Lua:
local inicfg = require 'inicfg'

local config = inicfg.load({
    cars = {
        mod = 1,
    }}, 'test.ini')
inicfg.save(config, 'test.ini')

local cars = {
    {1915,1932,1958,1963};
    {451,480,485,494,506};
    {3821,3822,3825,3831,3832}
}

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand('setmode', function(arg)
        if tonumber(arg) then
            config.cars.mod = tonumber(arg)
            inicfg.save(config, 'test.ini')
        end
    end)
    sampRegisterChatCommand('plv', function(arg)
        if tonumber(arg) then
            local playerId = tonumber(arg:match('(%d+)'))...

Brooklyn123

Новичок
Автор темы
9
0
Ну в вики есть пример хз че вам еще надо
Мне нужно не чтобы значения заменялись, мне нужно, чтобы можно было выбирать один из трёх моих списков с ID каров. На вики только замена данных в определенном месте
 

wojciech?

Известный
213
127
выдавались ID тех машин, которые есть в first_list ( first_list=3821,3822,3825,3831,3832 )
это не список, у тебя к ключу first_list привязано 3821, остальные ид привязаны к индексам от 1 по порядку, аналогично для других "списков"

из-за того, что ты используешь ini, проще сделать такую структуру:
Lua:
local config = inicfg.load({
  third_list = { 1915, 1932, 1958, 1963 },
  second_list = { 451, 480, 485, 494, 506 },
  first_list = { 3821, 3822, 3825, 3831, 3832 }
}, "test")

получить случайную модель из списка:
Lua:
function getRandomModel(t)
    return t[math.random(1, #t)]
end

local model = getRandomModel(config.first_list)
 

Brooklyn123

Новичок
Автор темы
9
0
это не список, у тебя к ключу first_list привязано 3821, остальные ид привязаны к индексам от 1 по порядку, аналогично для других "списков"

из-за того, что ты используешь ini, проще сделать такую структуру:
Lua:
local config = inicfg.load({
  third_list = { 1915, 1932, 1958, 1963 },
  second_list = { 451, 480, 485, 494, 506 },
  first_list = { 3821, 3822, 3825, 3831, 3832 }
}, "test")

получить случайную модель из списка:
Lua:
function getRandomModel(t)
    return t[math.random(1, #t)]
end

local model = getRandomModel(config.first_list)
А как сделать так, чтобы можно было напрямую в игре менять из какого списка будет выбираться модель машины?
 

wojciech?

Известный
213
127
А как сделать так, чтобы можно было напрямую в игре менять из какого списка будет выбираться модель машины?
config[название списка], можешь из параметров для команды считать регуляркой нужный тебе список
 

Brooklyn123

Новичок
Автор темы
9
0
А нахуя хранить список в ини если по сути тебе нужно хранить только индекс выбранного списка?
Я просто не знаю как это реализовать по другому, поэтому пытался сделать хотя бы так
 

MLycoris

Режим чтения
Проверенный
1,820
1,860
Я просто не знаю как это реализовать по другому, поэтому пытался сделать хотя бы так
Lua:
local inicfg = require 'inicfg'

local config = inicfg.load({
    cars = {
        mod = 1,
    }}, 'test.ini')
inicfg.save(config, 'test.ini')

local cars = {
    {1915,1932,1958,1963};
    {451,480,485,494,506};
    {3821,3822,3825,3831,3832}
}

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand('setmode', function(arg)
        if tonumber(arg) then
            config.cars.mod = tonumber(arg)
            inicfg.save(config, 'test.ini')
        end
    end)
    sampRegisterChatCommand('plv', function(arg)
        if tonumber(arg) then
            local playerId = tonumber(arg:match('(%d+)'))
            local randomCar = getRandomCar()
            sampAddChatMessage('Список '..config.cars.mod..' Ид машины '..randomCar, -1)
            --sampSendChat(('/plveh %d %d'):format(playerId, randomCar))
            --sampAddChatMessage(('{FF10B4}Выдал игроку %s машину с ID %s'):format(sampGetPlayerNickname(playerId), randomCar), -1)
        else
            sampAddChatMessage('/plv [id]', 0xFF0000)
        end
    end)
    wait(-1)
end

function getRandomCar()
    math.randomseed(os.time())
    local rand = math.random(1, #cars[config.cars.mod])
    return cars[config.cars.mod][rand]
end
 
  • Нравится
Реакции: Brooklyn123 и chapo