[ImGui] Подскажите, в чем ошибка?

Mico

Активный
Автор темы
246
46
Версия MoonLoader
.026-beta
Ошибка:
[ML] (error) Helper: C:\Games\GTA San Andreas\moonloader\fdhelper.lua:148: attempt to call field 'PopItemWidht' (a nil value)
stack traceback:
C:\Games\GTA San Andreas\moonloader\fdhelper.lua:148: in function 'OnDrawFrame'
C:\Games\GTA San Andreas\moonloader\lib\imgui.lua:1378: in function <C:\Games\GTA San Andreas\moonloader\lib\imgui.lua:1367>
[ML] (error) Helper: Script died due to an error. (1D32412C)
Код:
Lua:
imgui.PushItemWidth(160)
            imgui.InputText(u8"Введите ID игрока", inputid)
            imgui.PopItemWidht()
            local itembox = {u8"[0] Отсутствует", u8"[1] Уровень", u8"[2] Законка", u8"[3] Материаллы", u8"[4] Скин", u8"[5] Убийства", u8"[6] Номер телефона", u8"[7] Опыт", u8"[8] Ключ от дома", u8"[9] Бизнес", u8"[10] Уровень VIP", u8"[11] Работа игрока", u8"[12] Аптечки", u8"[13] Деньги в банке", u8"[14] Мобильный", u8"[15] Деньги", u8"[16] Варны", u8"[17] Аптечки", u8"[18] Организация", u8"[19] Скилл бокса", u8"[20] Время бокса", u8"[21] Бокс", u8"[22] Конг Фу", u8"[23] КикБокс", u8"[24] Уважение", u8"[25] Бег", u8"[26] 1 слот", u8"[27] 2 слот", u8"[28] 3 слот", u8"[29] 4 слот", u8"[30] 5 слот", u8"[31] Наркозависимость (опыт)", u8"[32] Факционный скин", u8"[33] Муж или Жена", u8"[34] Процы", u8"[35] Время банка", u8"[36] Доступ к /ban", u8"[35] Доступ к /warn"}
            imgui.PushItemWidth(160)
            imgui.Cimbo(u8"Номер переменной", combo, itembox)
            imgui.PopItemWidth()
            imgui.PushItemWidth(160)
            imgui.InputText(u8"Введите колличество", inputkol)
            imgui.PopItemWidht()
            if imgui.Button(u8"Выдать") then
                if sampSendChat("/setstat "..inputid.v.." "..tonumber(combo.v)..inputkol.v) then
                combo.v = 0
                inputid.v = ""
                inputkol.v = ""
                end
            end
148 строка - это 3 строка в этом коде.
 
Решение
На случай если ты не поймёшь ответ выше. Ты неправильно назвал функцию PopItemWidth. У тебя она записана как PopItemWidht. Перепутал 2 последние буквы. Правильно PopItemWidth.

+ на 10 строке в вырезанном коде иди на 155 строчке у тебя в скрипте такая же ошибка.

Tema05

Известный
1,442
401
На случай если ты не поймёшь ответ выше. Ты неправильно назвал функцию PopItemWidth. У тебя она записана как PopItemWidht. Перепутал 2 последние буквы. Правильно PopItemWidth.

+ на 10 строке в вырезанном коде иди на 155 строчке у тебя в скрипте такая же ошибка.
 
  • Нравится
Реакции: Mico

Mico

Активный
Автор темы
246
46
Я тоже купил себе новую клаву и постоянно делаю опечатки ) Разве в натпаде или в атоме, хз где ты кодишь нет автозаполнения?
Спасибо!
В Sublime Text 3. Можете еще подсказать.
То-что я сделал должно изменять переменную статистики "/setstat ID номер кол-во
Но по итогу прописывает, то как нужно вводить команду
Как я понял ошибка здесь:
Lua:
if imgui.Button(u8"Выдать") then
                if sampSendChat("/setstat "..inputid.v.." "..tonumber(combo.v)..inputkol.v) then
                combo.v = 0
                inputid.v = ""
                inputkol.v = ""
                end
            end
 

Hatiko

Известный
Проверенный
1,470
612
Спасибо!
В Sublime Text 3. Можете еще подсказать.
То-что я сделал должно изменять переменную статистики "/setstat ID номер кол-во
Но по итогу прописывает, то как нужно вводить команду
Как я понял ошибка здесь:
Lua:
if imgui.Button(u8"Выдать") then
                if sampSendChat("/setstat "..inputid.v.." "..tonumber(combo.v)..inputkol.v) then
                combo.v = 0
                inputid.v = ""
                inputkol.v = ""
                end
            end
В переменной combo хранится номер выбранного в комбо, в itembox собственно элементы выбора. (Если я не ошибаюсь, редко работаю с комбо, если не так, то наоборот).
Чтобы получить элемент из комбо используй itembox[combo.v+1]
+1 потому что в комбо нумеровка идёт с 0, а в луа таблицы начинаются с 1.
Вроде бы так, если я правильно понял. Если не так, то распиши какие параметры команда принимает и что из чего к чему относится.
P.S. Увидел, минуту
UPD:
sampSendChat("/setstat " .. inputid.v.. " " .. combo.v .. " " .. inputkol.v)
Ошибка была в том, что ты две переменной засунул в tonumber, под каждую нужно было + переменные не разделил пробелом и у тебя номер и кол-во в одно число превращалось.
Здесь tonumber ни к чему, конкатанацией (две точки) ты все равно в строку всё конвертируешь.
 
Последнее редактирование:

Mico

Активный
Автор темы
246
46
В переменной combo хранится номер выбранного в комбо, в itembox собственно элементы выбора. (Если я не ошибаюсь, редко работаю с комбо, если не так, то наоборот).
Чтобы получить элемент из комбо используй itembox[combo.v+1]
+1 потому что в комбо нумеровка идёт с 0, а в луа таблицы начинаются с 1.
Вроде бы так, если я правильно понял. Если не так, то распиши какие параметры команда принимает и что из чего к чему относится.
P.S. Увидел, минуту
Если делать - imgui.Combo(u8"Номер переменной", itembox[combo.v+1]), то игра крашится.
 

Hatiko

Известный
Проверенный
1,470
612
Lua:
local itembox = {u8"[0] Отсутствует", u8"[1] Уровень", u8"[2] Законка", u8"[3] Материаллы", u8"[4] Скин", u8"[5] Убийства", u8"[6] Номер телефона", u8"[7] Опыт", u8"[8] Ключ от дома", u8"[9] Бизнес", u8"[10] Уровень VIP", u8"[11] Работа игрока", u8"[12] Аптечки", u8"[13] Деньги в банке", u8"[14] Мобильный", u8"[15] Деньги", u8"[16] Варны", u8"[17] Аптечки", u8"[18] Организация", u8"[19] Скилл бокса", u8"[20] Время бокса", u8"[21] Бокс", u8"[22] Конг Фу", u8"[23] КикБокс", u8"[24] Уважение", u8"[25] Бег", u8"[26] 1 слот", u8"[27] 2 слот", u8"[28] 3 слот", u8"[29] 4 слот", u8"[30] 5 слот", u8"[31] Наркозависимость (опыт)", u8"[32] Факционный скин", u8"[33] Муж или Жена", u8"[34] Процы", u8"[35] Время банка", u8"[36] Доступ к /ban", u8"[35] Доступ к /warn"}
-- Вынеси лучше это за пределы рендера, какой смысл каждый раз объявлять массив


-- Где-то в рендере imgui
imgui.PushItemWidth(160) -- Убрал лишние PushItemWidth, достаточно один раз прописать и все элементы в пределах будут нужного размера
    imgui.InputText(u8"Введите ID игрока", inputid)
    imgui.Combo(u8"Номер переменной", combo, itembox)  
    imgui.InputText(u8"Введите колличество", inputkol)
imgui.PopItemWidth()
if imgui.Button(u8"Выдать") then
    sampSendChat("/setstat "..inputid.v.." "..combo.v .. " " .. inputkol.v) -- То что выше описал под UPD. И нет смысла делать  условие из sampSendChat
    combo.v = 0
    inputid.v = ""
    inputkol.v = ""      
end
 

Mico

Активный
Автор темы
246
46
В переменной combo хранится номер выбранного в комбо, в itembox собственно элементы выбора. (Если я не ошибаюсь, редко работаю с комбо, если не так, то наоборот).
Чтобы получить элемент из комбо используй itembox[combo.v+1]
+1 потому что в комбо нумеровка идёт с 0, а в луа таблицы начинаются с 1.
Вроде бы так, если я правильно понял. Если не так, то распиши какие параметры команда принимает и что из чего к чему относится.
P.S. Увидел, минуту
UPD:
sampSendChat("/setstat " .. inputid.v.. " " .. combo.v .. " " .. inputkol.v)
Ошибка была в том, что ты две переменной засунул в tonumber, под каждую нужно было + переменные не разделил пробелом и у тебя номер и кол-во в одно число превращалось.
Здесь tonumber ни к чему, конкатанацией (две точки) ты все равно в строку всё конвертируешь.
Хорошо спасибо! Но как понял, если 1 переменная, то tonumber нужен.
 

Hatiko

Известный
Проверенный
1,470
612
Но как понял, если 1 переменная, то tonumber нужен
В твоём случае не нужен tonumber. Какой смысл конвертировать строку в число, если потом это число обратно в строку перейдёт.
А для обобщения, если требуется конвертировать строку в число, то именно эту переменную со строкой указываешь в tonumber, и так для каждой переменной. А то у тебя получилось так, к примеру: combo.v имело значение 2, а в inputkol.v имело 10, и по итогу получилось tonomber(2 .. "10"), т.е. tonumber("210"). Думаю, понял.
 

Mico

Активный
Автор темы
246
46
Lua:
local itembox = {u8"[0] Отсутствует", u8"[1] Уровень", u8"[2] Законка", u8"[3] Материаллы", u8"[4] Скин", u8"[5] Убийства", u8"[6] Номер телефона", u8"[7] Опыт", u8"[8] Ключ от дома", u8"[9] Бизнес", u8"[10] Уровень VIP", u8"[11] Работа игрока", u8"[12] Аптечки", u8"[13] Деньги в банке", u8"[14] Мобильный", u8"[15] Деньги", u8"[16] Варны", u8"[17] Аптечки", u8"[18] Организация", u8"[19] Скилл бокса", u8"[20] Время бокса", u8"[21] Бокс", u8"[22] Конг Фу", u8"[23] КикБокс", u8"[24] Уважение", u8"[25] Бег", u8"[26] 1 слот", u8"[27] 2 слот", u8"[28] 3 слот", u8"[29] 4 слот", u8"[30] 5 слот", u8"[31] Наркозависимость (опыт)", u8"[32] Факционный скин", u8"[33] Муж или Жена", u8"[34] Процы", u8"[35] Время банка", u8"[36] Доступ к /ban", u8"[35] Доступ к /warn"}
-- Вынеси лучше это за пределы рендера, какой смысл каждый раз объявлять массив


-- Где-то в рендере imgui
imgui.PushItemWidth(160) -- Убрал лишние PushItemWidth, достаточно один раз прописать и все элементы в пределах будут нужного размера
    imgui.InputText(u8"Введите ID игрока", inputid)
    imgui.Combo(u8"Номер переменной", combo, itembox) 
    imgui.InputText(u8"Введите колличество", inputkol)
imgui.PopItemWidth()
if imgui.Button(u8"Выдать") then
    sampSendChat("/setstat "..inputid.v.." "..combo.v .. " " .. inputkol.v) -- То что выше описал под UPD. И нет смысла делать  условие из sampSendChat
    combo.v = 0
    inputid.v = ""
    inputkol.v = ""     
end
Видимо я слишком наглый. Можете еще одну функцию подсказать? Я хочу сделать такую функцию (на скрине), к примеру /newpromo (вписал название в Input), с помощью этой функции, потянул ползунок до 20 и нажал создать и он создал мне /newpromo InputName 20.
 

Вложения

  • 1604056997211.png
    1604056997211.png
    7.5 KB · Просмотры: 59

Hatiko

Известный
Проверенный
1,470
612
Видимо я слишком наглый. Можете еще одну функцию подсказать? Я хочу сделать такую функцию (на скрине), к примеру /newpromo (вписал название в Input), с помощью этой функции, потянул ползунок до 20 и нажал создать и он создал мне /newpromo InputName 20.
imgui.SliderInt(u8"Имя", var, 0, 10, "%.0f")

Где var = imgui.ImInt(0)
0 - минимальное значение
10 - максимальное значенгие
"%.0f" - формат отображения, если используется слайдер для числа с плавающей запятой, то указывается в место 0 число, указывающие кол-во чисел после запятой.