
Garry_Galler
Опытные-
Число публикаций
272 -
Регистрация
-
Последнее посещение
-
AMKoin
10 [Подарить AMKoin]
Весь контент пользователя Garry_Galler
-
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
malandrinus Насчет потоков в lua - точнее псевдопотоков - я уже понял, так как с coroutine повозился - без толку. Но задачу свою решил - у меня просто был скрипт который делал 500 тыс итераций и он блокировал основной поток не давая синхронно с итерациями выполняться дополнительным действиям(после каждой итерации) в данном скрипте. То есть действие выполнялось только единожды - по завершении всех итераций. Подсказали простой выход - апдейт вместо for do end -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Возможен ли в сталкере асинхронный запуск выполнения функции - чтобы "долгоиграющая" функция не блокировала основной поток, а выполнялась в фоновом режиме? -
Byurrer, Вот это поставь в любой скрипт - так что бы он один раз или периодически вызывался при загрузке игры. db.actor:set_callback(callback.use_object, this.OnUseActorObject) а это будет та самая функция которая будет вызываться на юзание ГГ любого предмета function OnUseActorObject(obj, who) if obj then -- делаем проверку на использование нужного предмета if obj:section() =="communicator" then alife():create("communicator", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) -- спавним его обратно level.start_stop_menu(this.my_message(), true) --запускаем меню end end end
-
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Или уменьшить параметры min_start_power и max_start_power в секции костра (zone_kampfire.ltx - какая секция у костра точно не помню - давно их не спавнил). -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Kolmogor Смысл всей этой затеи с автономностью - делать свои разработки как можно менее зависимыми от дефолтных файлов(совместимость модов будет более простая) - в плане вызовов своих функций. Например на данный момент для одной своей разработки я полностью избавился от необходимости использовать bind_stalker как для апдейта, так и в плане некоторых каллбеков - переустановил их на эктора заново в своем биндере. malandrinus Так тут дело не в том куда поставить - вариантов то масса - а в том именно, что нАдо кУда То ставить - а это значит опять задейстовать\править дефолтные файлы. -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Но это уже не будет автономным вызовом функции. Вызов то во внешний файл можно поставить куда угодно. ---------------------------------------------------------------------------------------- По поводу вылетов при обращении к своему файлу из xml -тегов: как я уже отметил - это не мой опыт - но опыт человека многим известного - Artosa(разработчика мультимода Симбион). Вот что он писал по этому поводу: -------------------------------------------------------------------------------------- И еще - можно чуток поподробнее о функции init ? Заметил, что во всех биндерах есть функция init() или bind() и указывается она в конфиг секциях объектов которые биндятся. Какую функцию ты имел ввиду? --------------------------------------------------------------------------------------------- malandrinus Спасибо за указание на prefetch() - будем тестить. ------------------------------------------------------------- Все работает - один минус - вызов prefetch() нужно куда-то ставить - автономность вызова функций опять же убивается. -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Обычно я так и делаю Про кеширование: я имел ввиду вот что - берем функцию - например такую - function TestMessage() news_manager.send_tip(db.actor, "Функция вызвана автономно", 0, "default", 180000) end и вставляем ее в файл в котором есть функции вызываемые из апдейта. И пишем под функцией ее автономный вызов TestMessage() При загрузке игры функция благополучно вызывается. Но если ее поместить в файл, который ни откуда не вызывается, то вызова не будет - так как в _G данный файл еще не был загружен. К тому же при попытке обратиться к незагруженному в таблицу _G файлу из xml тегов (это уже пишу на основе чужого опыта) может произойти вылет. Отсюда и вопрос - как этим процессом загрузки данных в метатаблицу _G можно манипулировать. -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
-
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Wlad777 Для пробежки по содержимому - с получением объекта каждой вещи - нет. Если просто, чтобы проверить пустой ли ящик - то oCBox:is_inv_box_empty(), где oCBox - клиентский объект ящика. Она возвращает true\false - пустой\не пустой. Как узнать что в ящике? Сравнивать parent_id вещи и айди ящика - если совпали - значит вещь в ящике. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Есть ли способ отключить файл treasure_manager.script из внешнего(не дефолтного) файла? Пробовал ставить на апдейт функцию treasure_manager.clear_treasure_manager(), но результат нулевой. Мне бы собственно сделать, чтобы вот этот метод не вызывался treasure_manager:get_treasure_manager():use(self.object) но без правки файлов оригинала.(суть именно в этом - если есть такая возможность, то хотелось бы ее узнать. Апдейт у меня тоже из внешнего, не затрагивающего оригинальные скрипты, файла) Как сделать не вызов некоторых других функций оригинала я нашел способ - а вот здесь решения пока не нашел. И второе - как обойти необходимость ставить вызов в motivator_binder:use_callback(obj, who) - самописными вариантами? (нужен каллбек на обыск трупа и юзердата трупа. Через info_callback не прокатило - каллбек не возвращает юзердату заюзанного трупа - только ГГ. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Или так: добавляем bind_stalker в метод actor_binder:reinit() еще один каллбек self.object:set_callback(callback.use_object, OnUseObject, self) OnUseObject это имя функции которая будет вызываться, когда эктор будет использовать предметы типа хлеба\водки\антирада\аптечки\бинта\дринка и т.д. - то есть те которые имеют менюшку "использовать". Для того, чтобы использование предмета можно было отследить, в конфиге у него должен быть указан класс от одного из вышеуказанных итемсов. И далее радуемся жизни с этой функцией: function OnUseObject(obj, who) if obj then if obj:section() =="предмет" then -- здесь делаем проверку на секцию нужного предмета действие end end end можно добавить данную функцию в виде метода в bind_stalker сделав так: function actor_binder:OnUseObject(obj, who) сюда ставим проверки end тогда каллбек нужно прописать так self.object:set_callback(callback.use_object, self.OnUseObject, self) PS: дроп предмета - то есть его выкидывание - данный коллбек не отслеживает. Кстати каллбек можно и не вписывать в bind_stalker, а установить его на эктора в теле своей функции в своем файле(биндере) - что я и сделал. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
ФеНиКс Тайнику код навесить? Да легко. Я уже сделал - вот завтра-послезавтра выложу тестовую версию своих рандомных тайников - посмотришь. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
malandrinus diffSec() значит... Про нее даже не вспомнил - так как использовал ее всего один раз и то как простой таймер на пару минут. Ну что ж - будем использовать и для более длительных периодов. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
MgVolkolak В моде "похудевший ГГ" ( как то так он называется) изменения вносятся в программную часть графических библиотек игры - корректируются собственно размеры ограничительного куба вокруг ГГ. Посредством запуска батником программы написанный на С++. Так что никакой правкой m_stalker.ltx это не делается. ------------------------------------------------------------------------ _Призрак_ Я понял - получается это разные моды. У меня - я сейчас точно посмотрел - мод называется camera. И там все как я и описал. А вот в том моде, который ты указал я не знаю, что именно (какой параметр) меняется и что это дает. Надо будет посмотреть. PS: кажется понял - там параметры ph_box (и некоторые другие) меняются - значит можно и конфигом все скорректировать. Тогда непонятно, что именно делает мод который у меня есть - надо будет проверить его ------------------------------------------------------------------------------------------------------------- Есть ли какой-нибудь метод в сталкере, чтобы сравнить две игровые даты и получить разницу в днях между начальной и текущей? Если писать самому, то пока в голову только одни сложные варианты приходят. Может у кого есть рабочий код? (функция должна корректно работать и с датами разных месяцев.) Вот накидал навскидку вариант дающий весьма неточное сравнение поскольку не учитывается число дней в месяцах на входе имеет такие аргументы CompareDate("01/05/2012", "07/06/2012") -------------------------------------------------------------------------------- А как вам такой - теперь вроде все верно считает? :ny_rolleyes: -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Ирбис Подождать пока я доделаю свою разработку "новые рандомные тайники" Там нет никаких переводов тайников в онлайн\оффлайн - так как я нашел способ обходиться без этой абсолютно лишней операции и все содержимое хабара никуда не исчезает ни при каких обстоятельствах - разве что скриптово (как часть задуманного плана). Добавлено через 5 мин.: malandrinus Это я тоже знаю - у дефолтных ящиков действительно визуал прописан совсем не тот который мы видим - а невидимый бокс. Но пока не разобрался зачем это нужно и как это все понимать. И еще Максим.Р. мне говорил что при удалении всех ящиков из allspawn визуалы видимые остаются на месте - то бишь они получается часть геометрии уровня. В общем пока неясно куда двигаться в поиске решения указанной проблемы физической "неосязаемости". (В SDK увы ничего не понимаю, но попробую выяснить что-нить у тех, кто работает с ним) Пришел в голову такой вариант - а что если взять ogf-ку какого-нить невидимого бокса(изменить имя модельке сделав клон) и прописать ей текстуру ящика, а потом эту новую модельку заспавнить? Должен получиться осязаемый и видимый бокс. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
malandrinus Мы люди темные в этом вопросе - вот попробовал записать в нетпакет ящика значение которое в allspawn у всех ящиков есть = 0xffffff3f перевел его так 1111 1111 1111 1111 1111 1111 0011 1111 --двоичный вид 15 15 15 15 15 15 3 15 --десятичный function SetInvBox(sobj) local t = this.get_invbox_data(sobj) t.vsu8u1=(15*16^7)+(15*16^6)+(15*16^5)+(15*16^4)+(15*16^3)+(15*16^2)+(3*16^1)+(15*16^0) -- в общем что-то вроде того this.set_invbox_data(t,sobj) end ЗЫ:функции чтения\записи из АМК ящик по-прежнему остался прозрачным. Что менять то? какие именно биты? Кстати изначальное значение у меня считалось как 0. Чтобы это значило? -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Arhara А причем здесь allspawn? В моей части статьи описывается как заспавнить любой транспорт скриптом. Без модификации allsapwn. PowerMan Предлагаешь поиграть в битву экстрасенсов? Ну откуда я знаю где ты накосячил. Добавлено через 19 мин.: Вопрос к мэтрам и ветеранам моддинга. ------------------------------------------------------------------------------------------------------- Как вернуть инвентарным ящикам заспавненным через скрипт физическую оболочку? Дабы их можно было заставить юзать хит каллбек. И чтобы они наконец перестали быть "прозрачными" (через них же же проходить можно - если например сейф инвентарный заспавнить). Вертолеты вроде как физической оболочки не имеют, однако для них предусмотрен какой то свой хитрый callback.helicopter_on_hit. Получается, что реагировать на хит можно заставить и объекты без физ. оболочки? -------------------------------------------------------------------------- PowerMan Только не при спавне транспорта. Вылет говорит о том, что где то в скрипте ожидалась строка, однако аргумент не был получен. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
PowerMan Плохо искал. Год назад я это дело на вики описал - добавил свой вариант в имевшуюся статью, где описывалось как это делать через allspawn. техника в игре мой журнал на SP - там есть много интересного -------------------------------------------------------------------------- Новая игра насколько я помню (давно транспорт не гонял) не трэба Скрипты тем и хороши. Компилятся они на лету и в большинстве случаев внесение в них правок или добавление новых никак не мешает загрузить сохранку и продолжать играть. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
Господа модмейкеры прошу прояснить один вопрос - предметы которые находятся в инвентаре имеют физическую оболочку или все таки по каким то причинам она у них куда-то исчезает. Просто пробовал применить методы физики к объектам инвентаря - проверку на local ph_shell = obj:get_physics_shell() if ph_shell then объекты не проходят, хотя прекрасно "пинаются" будучи на земле - хоть set_const_force(), хоть apply_force(). Мне собственно нужен эффект разбрасывания предметов находящихся в ящике при подрыве нычки. Поковырялся в моде заминированные тайники, но пока не увидел, а через это делается там (файлов много в архиве мода - одни адаптации, версии на чистую игру нет - и трудно найти нужные строчки). Самопроизвольно предметы при взрыве нычки у меня не разбрасываются. Не переспавном ли предметов из нычки на землю все делается? ------------------------------------------------------------------------------ кровоSTALKER Ну первых предметы в тайник спавнятся не в момент его юзания, а гораздо раньше. А если их переспавнивать в момент взрыва - то куда лучше пинать предметы через физику, а не через ось y(это всего лишь заставит предмет упасть сверху на тайник). Через физику же можно задать какое угодно(и при этом рандомное) направление импульса - вся проблема что предметы в инвентаре не хотят этой физике подчиняться. ------------------------------------------------------------------------------------------------------------ В общем сделал через удаление и последующий спавн рядом с нычкой+пинок физикой каждый объект - итемсы разбрасываются на ура.:-) --------------------------------------------------------------- malandrinus Благодарствую за пояснение - то что физическая оболочка не логична для объекта инвентаря - в принципе согласен, но с другой стороны - как видишь отнюдь не помешала бы. -
Справочник по функциям и классам
Garry_Galler ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
По классу CTime: Универсалка для получения текущих игровых даты\времени (для вывода например на худ) от Artosa (ну и меня тоже - вместе как то на форуме СП забавлялись вышеприведенными методами и в итоге пришли к почти идентичным кодам ) -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
max_max_08 . Вариантов два (как минимум): Сверять число патронов в стволе и размер магазина - математика не очень хитрая, но есть нюансы в реализации - например в таком варианте последний выстрел не отслеживается, но есть защита от сбоя счетчика при нештатной перезарядке\разрядки магазина (правда если значение счетчика не сохранять, то все равно возможен сбой правильности подсчета при перезагрузки игры и значении счетчика не равном 1). local cht = 1 function OnClickLButton(section,size) -- аргументы - секция ствола и размер магазина local activ_item = db.actor:active_item() if activ_item and activ_item:section() ==section then local AmmoInMagazine = activ_item:get_ammo_in_magazine() if (AmmoInMagazine == 0 or AmmoInMagazine ==size) then cht=1 end return size - AmmoInMagazine ==cht end end Забыл добавить - в коде в котором идет стоит вызов данной функции к счетчику должна прибавляться единица после выстрела. cht= cht+1 Другой вариант реализован в гравипушке malandrinus'a и kirag'a (там и смотри пример)- там размер магазина пушки изначально задан =1 и просто проверяется, что если число патронов в стволе меньше единицы(или размера магазина), то значит было нажатие ЛКМ - то есть ГГ выстрелил. Лично я себе так сделал: (для пушки на один заряд) function OnClickLButton(section,size) local activ_item = db.actor:active_item() if activ_item and activ_item:section() ==section then local AmmoInMagazine = activ_item:get_ammo_in_magazine() return size> AmmoInMagazine end end и в коде, где идет вызов функции, патрон после выстрела спавнится обратно в магазин db.actor:active_item():set_ammo_elapsed(1) -- возвращаем патрон в магазин Функции разумеется должны апдейтится. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
malandrinus Увы, с шириной действительно никак. Поначалу не обратил внимания, так как остановился на варианте ужатия по высоте, а потом решил ужать вдвое и по ширине - и ничего не вышло. Все как ты говоришь - ширина выделения меняется, а сам скролбар не сдвигается. Шаманил и так и эдак, но пока результатов нет. Но что странно - тем не менее ширина в новом варианте отличается от ширины заданной изначально где то на полсантиметра (или даже меньше). Сравнивал по скринам и заметил разницу. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
malandrinus Ну что ж придется без него обойтись. Спасибо что пояснил. У меня просто проблемка с этим ListWnd - никак не получается динамически менять его размеры - смещать по координатам - влево или вниз еще куда ни шло - но попытка уменьшить размеры (ужать) ни к чему не приводит - он тупо смещается(если указываю другие координаты) и визуально принимает прежние размеры(хотя заданы новые) - то есть скролбар выходит за границы самого меню. Делал через list_box:SetWndRect (260,0,150,280), так как использование list_box:SetWndSize (150,280) вообще приводит к неотображению компонента. А комбо было бы удобнее для меня использовать...но увы... ----------------------------------------------------------------------------- С динамическим изменением размера ListWnd решил - надо было SetWidth() и SetHeight() юзать. -
[SoC] Ковыряемся в файлах
Garry_Galler ответил на тему форума автора Halford в Скрипты / конфиги / движок
malandrinus Хотел уточнить насчет выпадающего списка - ComboBox. Вывести то я его вывел - но вот таки методов для его заполнения не нашел. Ты это имел ввиду, когда писал, что он банально недоэкспортирован? А не выйдет как-нить унаследовать методы (тот же AddItem от ListWnd) ? -
TREWKO вообще то метод возвращает целое число ( тип Int32 если я не ошибаюсь ) так же как и метод r_u32(string, string), а никак не строку, которую возвращает r_string(string, string) с чего ты взял что у тебя возвращается число в кавычках? а в лутмани добавь в скрипт перед считыванием секции из ini файла проверку на существование секции и ключа в данной секции - и если nil то верни рандому какое -нибудь дефолтное значение. И насчет преобразования "4000" (строка ) в число 4000 - для этого существует lua метод tonumber() -- конвертирует строковое представление числа в number. И он в моде как я вижу задействован.
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды