Malandrinus
Жители-
Число публикаций
1 930 -
Регистрация
-
Последнее посещение
-
Дней в топе
13 -
AMKoin
160 [Подарить AMKoin]
Весь контент пользователя Malandrinus
-
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Почитать статью на Wiki Спавн телепортов через скрипт -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
xrCore.dll маленький очень. xrGame.dll имеет размер почти 6 Мб, а xrCore.dll не больше одного. Да ещё, если в него заглянуть, больше чем наполовину забит нулями и всякими сообщениями. Кроме того, именно в xrGame.dll находятся все классы, с которыми идёт работа в игре. А собственно какая разница!? проблему это всё равно не решит. -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Это может быть что угодно. Как правило, вылет без лога бывают при неправильных аргументах в вызовах функций самой игры. Например, значение nil в вызове get_console():execute(nil) приведёт к вылету без лога. Вообще-то можно кинуть камешек в разработчиков - такого быть по идее не должно. Ничего не даёт. xrGame.dll - это основная часть движка. Равносильно указанию "ошибка произошла в игре" XRLUA.DLL - скорее всего адаптированная под игру скрипт-машина Lua. "Что-то со скриптами" =) -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Он не то чтобы полностью стирается, он просто не успевает записаться. После некоторых вылетов игра просто рушится, а тот лог, который забуферизировался в памяти, писать уже некому. Есть такая консольная команда "flush". Она записывает на диск лог, который накопился на данный момент. Но проблему это не решает. Что уже накопилось запишется, но узнать в какой момент рухнула программа и по какой причине всё равно будет невозможно. -
Дописал системный плагин для Total Commander-а http://wincmd.ru/plugring/stalker_db_explorer.html Отличие от ранее представленного архиваторного плагина в возможности распаковывать с учётом иерархии файлов архивов. Учитываются все архивы, и файл для распаковки берётся из самого последнего (как делает сама игра). Архиваторный плагин по-прежнему актуален при необходимости извлечь файл из конкретного архива. Версию архиваторного плагина обновил до 0.0.2. В старой был баг, так что лучше скачать новую.
-
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Начну с конца. Мультиплей мне не интересен, посему много о нём не знаю. Но слышал неоднократно о том, что читерят там по-чёрному =) С инвентарём ты как-то усложняешь. Объект остаётся объектом даже при помещении в инвентарь. И в онлайне остаётся. Более того, как я писал выше, статус инвентарного объекта привязан к статусу объекта контейнера. В частности, на этом основан аддон (не помню уже чей) для лечения фризов. Фризы связаны с переходом в онлайн немерянного числа пачек патронов, которые обычно распиханы по нычкам. Так там все ящики помещались принудительно в онлайн и соответственно всё нахомяченное барахло в них тоже было постоянно в онлайне. Когда-то я тоже думал, что логично было бы при помещении предмета в инвентарь/ящик убирать его с концами в оффлайн. И был немало удивлён, что это не так. -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Не совсем так. При спавне ты в принципе получаешь серверный объект, поскольку создание происходит на серверной части. Клиентской у свежезаспавленного объекта нет, ну по крайней мере до сих пор не было. Однако ничто не мешает ему перейти в онлайн при первой возможности. И вот как раз все объекты, которые я спавнил в свой инвентарь, переходили в онлайн. И никакими силами мне не удавалось их заставить в перейти оффлайн. Я это пытался сделать для принудительного навешивания аддона на ствол. Вот никак не хотели. Переводишь в оффлайн ствол в инвентаре, а он зараза не идёт =) Т.е. как бы формально переходит, но клиентский объект не удаляется. Выкидываешь его из инвентаря - вот тут и исчезает. Даже видно, как это происходит. -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
local sobj = alife():create(...) local id = sobj.id -
Версия 0.6.2 http://ifolder.ru/13109377 Новая фишка: можно при вставке масштабировать фрагмент произвольным образом. Выбираете способ копирования "Масштабировать". Войдя в режим вставки можно управлять масштабом или требуемыми размерами с помощью панели инструментов, которая находится рядом. Фишка сделана на скорую руку, поэтому есть некоторые недочёты: 1. Для фиксации введённого значения надо нажать Enter. 2. Пока не нажали Enter не уводите курсор за пределы поля ввода, иначе значение собъётся на дефолтовое. 3. Для собственно масштабирования надо нажать кнопку с буквой U (Update) на той же панели Есть некритичный баг. После использования масштабирования уже имеющаяся в буфере картинка будет вставляться с неправильным масштабом. Так что надо обязательно скопировать фрагмент заново. Позже исправлю.
-
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Геометрию уровня динамически менять нельзя. -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
нельзя, будет ошибка с вылетом и сообщением "interval is empty". А что тут вообще криминального? Обычный массив, обычные значения для его инициализации. Это получится. Я тебе искренне советую найти мой пост "тестирование скриптов без обрушения" и наладить подобный полигон. Для ТЧ он работает как часы. Ответ на подобные вопросы у тебя будет занимать секунд 20. Добавлено через 32 мин.: Есть там такая вещь, называется generic схемы. Или вроде как они же называются универсальными. generic схемы как раз и отвечают за панику, бой и пр. Выброс в АМК походу тоже реализован как такая схема. Суть универсальной схемы в том, что даже если непись находится под управлением гулага или свой собственной логики он прервётся, сделает что надо и затем вернётся к выполнению старой задачи. Схема - это весьма загадочная штука. Про схемы можно почитать здесь Я пока не всё понял, но попробую изложить в двух словах то, что мне уже понятно. Чисто технически схема - это файл скрипта, содержащий определенный набор функций и классов. Например, там должна быть функция add_to_binder с определённым списком аргументов, которая присобачит эту схему. Куда? Пока не знаю =) далее в схеме есть два ключевых класса первый - это условие (или евалуатор), унаследованный от property_evaluator второй - это действие (или action), унаследованный от action_base Точнее, там может быть набор таких классов. в евалуаторе главным является один метод evaluate, фактически, весь класс существует ради этого метода. Метод возвращает true, если надо перейти в новое состояние. Например, начался выброс и надо делать ноги в укрытие. action - это тоже класс, который существует главным образом ради одного своего метода execute. Это собственно то действие, которое и будет выполнено. Действий там может быть несколько и условий несколько. Например, выброс приближается - оглядеться выброс начался - даём дёру выброс продолжается - продолжаем прятаться и т.д. и соответственно существуют классы евалуаторов и действий на каждую пару. Ну и как-то там эти классы регистрируются. Это пока всё, что понял добавлено: надо ещё зарегистрировать схему в файле modules.script. Это делается функцией load_scheme -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
По моему, это разные задачи. Хотя бы потому, что при панике непись бежит не в конкретную точку, а куда подальше. Вроде как это схемами делается и надо просто схемы переключать. Но мне ещё самому разбираться и разбираться. IQDDD, насчёт health. Это в самом деле очень дурацкое свойство. На чтение - это здоровье, на запись - изменение здоровья. Вообще, дизайн класса game_object просто потрясает. До знакомства со сталкером я думал, что представляю себе, как можно сделать плохо. Но я ошибался, совершенству нет предела =) -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Да, я обратил внимание. В некоторых местах есть проверка на нулёвость этого значения. Вероятно, это для хита от одного NPC к другому. Возможно, в этом случае движок вызывает этот колбек по факту выстрела "с намерением". В принципе логично, поскольку надо делать меньше проверок. -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Из разного оружия стрелял? А если попробовать методом hit? Ну для них то есть расподробная документация. Это же стандартные функции Lua. http://www.lua.ru/doc/5.html -
Здесь никак. Вообще-то, обычно текстуры имеют размеры, равные степени двойки. Потому я и здесь так делал. Но если разобраться, то именно для этих текстур это в принципе и не обязательно. Я как-нибудь попробую засунуть в игру текстуру с некратным размером и посмотрю. Если монитор не взорвётся, то прикручу к программе произвольное изменение размера.
-
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
math.max на самом деле позволяет выбрать максимальное из нескольких значений. Типа такого: local max_value = math.max(1,3,6,9) Но ведь у тебя список значений, из которых выбирается максимальное, заранее не известен. Поэтому и стоит цикл с перебором всех строк таблицы и отбором нужных. Или я опять тебя не понял? -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
В конструкции for k,v in pairs ... k - это текущий ключ в таблице (собственно, потому эту переменную и называют обычно k, от key) v - это соответствующее ему значение (опять же v - от value) Там выше tbl[k] на самом деле равно v, но v у тебя и так есть. Зачем же получать его ещё раз? Monnoroch только что обратил внимание. В раннем посте у тебя было local tbl = { "a" = 1, "b" = 2, "c" = 3 } Так работать не будет. Надо: local tbl = { ["a"] = 1, ["b"] = 2, ["c"] = 3 } С квадратными скобками. Это принципиально. дополнил: Если кто не знает. Конструкция вида: t = {v1, v2, v3, и т.д.} на самом деле эквивалентна конструкции: t = { [1] = v1, [2] = v2, [3] = v3, и т.д. } Т.е. создаётся тот же ассоциативный массив, но ключ генерируется неявно, в виде автоинкрементного счётчика с нумерацией от единицы. Это позволяет в какой-то степени имитировать обычные массивы. Но ничто не мешает позже добавить в эту же таблицу значение, которое эту последовательность ключей нарушит. Мне думается, что здесь как раз такой случай, когда надо таблицу использовать именно как ассоциативный массив в чистом виде. Так что имя секции - совершенно нормальный ключ. Все квестовые неписи прописаны в all.spawn. Его надо разобрать, прописать им в соответствующие секции неуязвимость, собрать заново. Придётся начинать новую игру. Можно найту тулзу, которая редактирует all.spawn без его разборки. Поищи сам на эту тему, или может кто подскажет. Опять же, придётся начать новую игру. Если не начинать новую игру, то в принципе можно найти скриптами всех квестовых неписей, разобрать их нетпакетами и прописать им неуязвимость. -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
типа такого function set() local res = 0 for k,v in pairs(tbl) do if db.actor:object(k) then res = math.max(res, v) end end return res -- вернёт 0, если попадания не было end -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Monnoroch Я думаю, твой первый вариант почти правильный. Если я правильно понимаю все допущения, то достаточно вернуть первое попавшееся значение. В этом случае твой код лишь немного изменится: function set() for k,v in pairs(tbl) do if db.actor:object(k) then return v -- нет смысла ждать до конца таблицы, возвращаем первое попадание end end return nil -- точно не помню, по дефолту кажется и так nil вернёт. Может и не надо явно return ставить. end Альтернативой было бы перебрать предметы в инвентаре до первого попадания по ключу в таблице. Но не думаю, что это будет эффективнее, поскольку предметов в инвентаре будет почти наверняка больше, чем строк в этой таблице. -
Справочник по функциям и классам
Malandrinus ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Делать мегашапку пока рано, ещё даже одной страницы темы нет =) На очереди object_binder. Там и рассмотрю. А пока вот: -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Таймер и сделан на апдейте актора, но таймер - это здесь как из пушки по воробьям. Я бы так поступил: last_time = 0 time_delta = 5000 -- пауза в миллисекундах function actor_binder:update(delta) local tg = time_global() --local tg = game.time() -- а это в игровых еденицах if (tg - last_time) > time_delta then last_time = tg -- твоё действие end ... end Одними файлами конфигурации не выйдет. Все монстры к людям одинаково относятся. Вроде как это в движок зашито. В принципе, можно залезть в логику монстра и заставить его игнорировать часть врагов в зависимости от человеческой группировки. Но это надо лезь достаточно глубоко в скрипты. Допустим, есть у тебя есть имя секции. Это строка, так что с кавычками - это правильно. Пусть имя секции будет "b". Теперь из таблицы можно получить число два для этого имени так: local vvv = tbl["b"] -- в vvv запишется число 2 Таблица - это ассоциативный массив. Первое значение - это ключ (должен быть уникален), второе - любое значение. Если в таблице нет такого ключа (в данном случае имени секции), то получим nil. -
Справочник по функциям и классам
Malandrinus ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
В языке Lua нет классов. Их поддержка добавлена с помощью технологии Luabind. С одной стороны - это конечно имитация "настоящих классов", с другой - расширение выглядит настолько органичным, что практически воспринимается как часть синтаксиса языка. -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Народ, вы что? Излом же монстр! Монстры ко всем людям одинаково относятся. И таблица для них своя, там все люди одной строкой. Не выйдет походу -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Берешь и выясняешь сам. Для этого: ставишь мод с дефолтовыми параметрами. После установки переносишь каталог gamedata на другой физический диск (так сравниваться будет быстрее). ставишь несколько раз мод с разными параметрами и смотришь, что изменилось. Установка мода со всеми патчами занимает пару минут. После каждой установки сравниваешь два каталога с помощью Total Commandera. Там увидишь подробно, какие файлы, в каких каталогах отличаются. Там же можно посмотреть и какие строки в текстовых файлах отличаются. Потом удаляешь gamedata и ставишь снова. Только за раз не меняй больше одного параметра. -
Справочник по функциям и классам
Malandrinus ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Ну тогда уж так: alife_simulator - класс для управления серверными объектами. В игре существует всего один экземпляр такого класса, и получить его можно с помощью вызова глобальной функции alife(). В придачу про класс vector. vector - вспомогательный класс, содержащий три координаты, и позволяющий выполнять с ними различные манипуляции. Объекты класса vector являются аргументами многих функций и возвращаются многими функциями. См. например выше про метод create класса alife_simulator. Отдельный объект класса вектор создаётся вызовом глобальной функции vector(). При создании имеет координаты [0,0,0].
- [ЧН] 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
- ...и другие моды