_Призрак_ 11 Опубликовано 17 Июля 2012 Кактус_523 Мы получаем обьект класса. Это не тоже что и хендлер. Хотя бы потому что хендлер используется в С, а в С нет классов Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 18 Июля 2012 Одно "но" - текстуры всегда будет под худом. Не знаю как с AddCustomStatic обстоят дела, но вот с AddDialogToRender они обстоят именно так Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 24 Июля 2012 Я не буду разбираться что у вас в коде не правильно, но объясните мне смысл вот этого: if db.actor:item_in_slot(7) ~= nil and db.actor:item_in_slot(7):section() == "scientific_outfit" and db.actor:item_in_slot(7):condition() <=0.80 ... ЗАЧЕМ? Вы вызываете аж 3 раза движковую функцию. Которая тоже время требует на выполнение. Притом такой код как выше выглядит не красиво. Почему не написать так: local slot_item_7 = db.actor:item_in_slot(7) if slot_item_7 and slot_item_7:section() == "scientific_outfit" and slot_item_7:condition() <=0.80 ... И понятней, и быстрей Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 30 Июля 2012 Какой функцией можно получить ближайший левел_вертекс к данной позиции? Не перебирать же их все. Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 4 Августа 2012 proper70 Тут может быть такой момент. У тебя в логике не прописано: [smart_terrains] none = true Поэтому вполне вероятно что когда он спавнится, он работает по своей логике, т.к. например все смарты забиты. А потом какой то смарт освобождается и он уходит туда. Пропиши этот параметр в логику Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 19 Августа 2012 (изменено) Struck Эм.... local where = "" if y>point.y then where = where .."северо-" else whene = where.."юго-" end if x>point.x then where = where.."восток" else where = where.."запад" end Не? Тут конечно нужно еще поработать с таким моментом, что объект может находится с небольшим смещением по х или у относительно нашей точки и его можно считать условно "ровно на севере". Тут так-же просто - высчитать угол (геометрия 7 класс) и сравнить его с каким-то углом, например с 22,5 Изменено 19 Августа 2012 пользователем Artos Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 20 Августа 2012 Еще ее можно вручную сунуть в _G таблицу: _G["my_global_func"] = function () get_console():execute("my_global_func called") end Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 1 Сентября 2012 Может я что то не понимаю, но у вас то условие никогда не пройдет. У вас pre_fov всегда равно 0, а 0 никогда не может быть больше положительного числа Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 6 Сентября 2012 А я понял. Каллбек нахит вызывается даже когда выстрел идет в воздух и вызывается как реакция на опасность. Но такой вариант можно отследить - сила выстрела равна 0. Там в каллбеке даже есть условие if amount>0 then - перемести туда свою функцию и все будет хорошо Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 13 Сентября 2012 (изменено) boryan67 Что же вас всех тянет к нет-пакетам! Для работы с нет пакетом нужно его создать, написать в него, прочитать. Да и банально - это же грязный хак. При кривых руках могут быть проблемы Изменено 13 Сентября 2012 пользователем _Призрак_ Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 24 Сентября 2012 Статик нужно деаттачить при закрытии инвентаря. При закрытии вызывай inventory_wnd:DeattachChild(wnd) Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 24 Сентября 2012 Но у остальных же все работает. И у меня работало, хотя и с ПДА. Почему тебе не запомнить класс окна и не получать его каждый раз? Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 7 Октября 2012 local tbl = { ["ammo_9x18_ap"] = 3, ["wpn_pm"] = 2 } check_items(tbl) function check_items(t) db.actor:iterate_inventory( function (dummy, oItem) if t[oItem:section()] and t[oItem:section()]~=0 then t[oItem:section()] = t[oItem:section()]-1 end end ,nil) for k,v in pairs(t) do if v!=0 then return false end end return true end Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 3 Ноября 2012 Во первых почитай про область видимость переменных. Например такой код выдаст ошибку: local a=1 if a==1 then local b =15 end b = b+1 С руганью на то что мы не создали переменную b. Почему? Мы создали ее в условии, но эта переменная удалится при выходе из условия. То же самое с циклами и функциями. Можно сделать глобальную переменную, которая будет видна везде. Тогда нужно просто не писать local перед именем переменной. Но это плохой стиль программирования и может вызвать колизию Так же я не уверен что у тебя при старте будет инициализирована переменная my_flag_1. Сделай так: function every_hour()if not my_flag_1 then my_flag_1 = 0 endlocal time_m = level.get_time_minutes()if time_m == 59 and my_flag_1 == 0 thenlocal snd = sound_object([[interface\mp_reward]])snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0)my_flag_1 = 1endif time_m =~ 59 thenmy_flag_1 = 0endend З.Ы.бАнальщина Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 12 Ноября 2012 Возвращаясь к вопросу о получении имени сохранения. Есть способ проще. Даже два. 1) Мы можем сохраниться двумя способами - через меню или через консоль/квик_сейв. Через меню мы можем отследить (как это сделать все понятно надеюсь). А в игре можно попробовать отследить статик, который показывается после сохранения - на нем как раз написано имя сохранения. Сложность алгоритма минимальна 2) Можно при старте игра при помощи FS класса считать все файлы в папке saves (точнее считать имена файлов и дату изменения). Как только мы в биндере актора происходит вызов метода save() то мы взводим флаг и на следующем апгрейде опять просматриваем папку с сохраниениями на предмет изменений. Сложность алгоритма зависит от количества файлов в папке Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 19 Октября 2015 Кстати, давно интересовал момент - как правильно будет получить количество элементов в ассоциативном массиве? Я помню делал полный перебор массива чтобы получить его размер, но может есть более приятный вариант? Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 12 Мая 2016 Для того чтобы определить есть ли значение в массиве его в худшем случае нужно полностью перебрать (сложность O(n)), а в случае хеша алгоритмическая сложность точно ниже (скорее всего что то типа O(logn), но я точно не знаю, зависит от реализации, сужу по тому как это сделано в других языках/системах. Есть базы данных где доступ осуществляется вообще за константу) Freedom Поделиться этим сообщением Ссылка на сообщение