1. Ты проверяешь не равен ли гейм объект строке ?
db.actor:item_in_slot(1) --Вот таким к примеру методом мы получаем объект из первого слота, а как я понял ты проверял секцию, хотя тут тебе вернет объект в первом слоту.
Для того что бы получить секцию надо дописать к примеру
db.actor:item_in_slot(1):section() --Вернет секцию объекта первого слота (Если он конечно же есть...)
2. Нет проверки что в слоте что то есть вообще, если он будет пуст, то вернет nil
Пример:
if db.actor:item_in_slot(1) and db.actor:item_in_slot(1):section()=="wpn_pm" then return "блаблабла, это так к примеру" end
3. Тут могу ошибаться но если память не изменяет таким методом нельзя получить предметы пояса как у тебя то есть - db.actor:item_in_slot(11) - не вернет пояс...
Функция db.actor:item_in_slot(number) возвращает гейм объект, а на поясе их цела перечень в противном случаи ПЫСы могли сделать что бы она хотя бы массив возвращала, но и такого нет... По моему кто-то очень давно еще на ТЧ писал скрипт получения объектов с пояса, в оригинале же такого вроде нет, в "xray-extensions" есть функции манипуляции инвентарем и по моему поясом.
4.
Ты из time_global() вычитаешь flag_timer, но даешь ей значение только потом, если она у тебя где-то до этой ф-ии назначена тогда ладно, а если нет, то ты из time_global() вычитаешь nil
P.S. в третьем пункте не до конца уверен...