- 3
- 1
Пытаюсь написать Адвокат Хелпер для Аризоны. Задача: получить ответ на /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 не пишется.
Подскажите что не так или как это можно задебажить?
UPD. Методом последовательного раскоменчивания кода выяснил, что проблема возникает при использовании sampGetPlayerScore. Еще не разобрался почему так.
Реализовал настройку, чтобы юзер мог не получать в чат сообщения-ответы на эту команду. Проблема в том, что при выключенном значении (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
Ошибка:
(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. Еще не разобрался почему так.
Последнее редактирование: