Крашится игра в один момент

romanespit

Новичок
Автор темы
2
0
Пытаюсь написать Адвокат Хелпер для Аризоны. Задача: получить ответ на /zeks и выполнить ряд действий

Реализовал настройку, чтобы юзер мог не получать в чат сообщения-ответы на эту команду. Проблема в том, что при выключенном значении (settings.main.sendOriginalMessage = false) код отрабатывает, данные в табличку закидываются, игра не крашится. Но если включить отправку ответа, то первое условие (text:find("В данный момент в КПЗ отсутствуют заключенные!") - строка 9 в коде) отрабатывает всегда и при включенных ответах и при выключенных. Второе условие ((text:find("Время") and text:find("Залог") and text:find("КПЗ")) - строка 13 в коде) нет, игру крашит. Пытался раскидать print('debug') после каждой строчки, но во втором условии не прилетает даже первый debug (строка 14) и игра крашится. Всю голову сломал, не понимаю, что не так. И самое странное, что при блокировке пакета все отлично, хотя проверка на эту настройку идёт после выполнения проверки в IsZeksResponse (строка 4 в коде), а debug и ZeksResponse (строка 3 в коде) в log не пишется.

Подскажите что не так или как это можно задебажить?

Lua:
function sampev.onServerMessage(color,text) -- Ловим полученный ответ на команду /zeks
    if IsZeksResponse(text) then
        print("ZeksResponse!")
        if not settings.main.sendOriginalMessage then return false end -- Если false, блокируем пакет
    end   
end

function IsZeksResponse(text)
    if text:find("В данный момент в КПЗ отсутствуют заключенные!") then -- Получили ответ на /zeks
        zeki = {} -- Очищаем таблицу зеков
        return true
    end
    if (text:find("Время") and text:find("Залог") and text:find("КПЗ")) then -- Поймали сообщение - нужно добавить в таблицу
        print("debug")
        nameid = string.sub(text, string.find(text, '.+%(%d+%)')) -- Ivan_Pupkin(123)
        id = nameid:match("%d+") -- 123
        level = sampGetPlayerScore(id) -- LVL
        time = string.sub(text, string.find(text, '%d+%sмин')) -- Сколько осталось сидеть
        zalog = string.sub(text, string.find(text, '%$[%d+%p]+')):gsub("%p", "") -- Сумма залога, если есть MoneySeparator, удаляем знаки пунктуации
        wanted = math.floor(tonumber(zalog/4000)) -- Звезды = Залог / 4000
        kpz = string.sub(text, string.find(text, 'КПЗ:%s.+PD')) -- В каком КПЗ
        if kpz then kpz = GetShortKPZName(kpz) else kpz = "???" end -- Сокращаем КПЗ
        if string.find(text, 'Адвокат:%s.+') then advokat = "{919191}[".. text:match("Адвокат:%s.+") .."] " color = 0xFF919191  -- Если находим, значит есть адвокат
        elseif string.find(text, 'В ожидании адвоката') then advokat = "{FFD700}[ЖДЁТ АДВОКАТА] " print("10.2") color = colormsg -- Если находим, значит адвоката нет
        end
        print("debug. zeki: ".. #zeki+1 .. "|" .. nameid .. "|" .. time .. "|" .. wanted .. "|" ..advokat.. "|" ..level)
        table.insert(zeki, #zeki+1,{nameid,time,wanted,kpz,advokat,level}) -- Пуляем в таблицу
        return true
    end
end

1691566546249.png

Ошибка:
(5) [0x682A4B00] f3ef4b71-ed572533-d060a9e7-907c11ba-1a86103c-0da61f6b-ece0cd2b-20115a45
Command line: "C:\arz gta\gta_sa.exe" -c -h ***.***.***.*** -p 7777 -n Oksana_Nespit -mem 2048 -x -widescreen -z ****** -seasons -graphics -enable_grass -arizona
OS 10; build number 19044
Commit: ae341d9c

Time playing: 00:00:42
Address: 0x682A4B00
Code: 0xC0000005
Module: sampfuncs.asi
Offset: 0x00024B00

Registers:
EAX: 0x00000000 | ECX: 0x00000000
EDX: 0x00000080 | EBX: 0x0000003F
ESP: 0x0177F3F4 | EBP: 0x0177EBD0
ESI: 0x00000000 | EDI: 0x0177F530
Flags: 0x0001007F

Trace:
0: 0x682A4B00 -> sampfuncs.asi + 24B00
1: 0x6830D561 -> sampfuncs.asi + 8D561

Opcodes:
0: 0470
1: 077E
2: 077E
3: 06BD
4: 0685
5: 0685
6: 0685
7: 0685
8: 0685
9: 0685
Last deleted model: 6412
Last deleted ped model: 221
Last deleted object model: 800
Last anim group: 132
Anim id: 3
Anim last time: 5.333333
Anim current time: 0.000000

Render buffers:
Count of visible lods: 68 (max default is 1000)
Count of visible entities: 180 (max default is 1000)
Count of visible super lods: 0 (max default is 50)
Count of invisible entities: 6 (max default is 150)

UPD. Методом последовательного раскоменчивания кода выяснил, что проблема возникает при использовании sampGetPlayerScore. Еще не разобрался почему так.
 
Последнее редактирование: