Перейти к контенту

Рекомендуемые сообщения

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

  Информация (Показать)

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

  Читать рекомендуется. (Показать)

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

@Charsi, Ха, вона как... Не знал...


 

 

  Zander_driver писал(а):
Для сохранения "а был ли на этой локе выброс?" - просто записываю через запятую все локи на которых побывал актор, в отдельное поле того же se_stor. а при собственно выбросе - очищаю этот список.
Остроумно! :) А я через флаги пытаюсь...

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

 

 

  Zander_driver писал(а):
local clstp = sobj:CLASS_TYPE()

Попробуй так:

local clstp = sobj and type(sobj.CLASS_TYPE) == 'function' and sobj:CLASS_TYPE()

На тот случай, если для данного конкретного объекта не сработало «if SOBJ then».

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий
  Zander_driver писал(а):
ощущение не-связанности рук приятно.

Плавали, после того как надоело ждать по 10 минут загрузки игры кинули якорь.

 

  Zander_driver писал(а):
что я делаю не так?

Все не так, код совершенно некорректный, надо использовать метатаблицы. Объект и пространство имен это немного разные понятия ;), к тому же я совершенно не уверен о возможности добавления методов к серверному объекту (пробуй получать метатаблицу того-же актора и что-нибудь добавить/переопределить). Тут ты, очевидно, добавляешь метод объекту, а не полю, чего ты еще ждал от такого кода? :facepalm:

Изменено пользователем Struck
Ссылка на комментарий

По se_stor вопрос. Вроде прописал везде, как нужно. Но при начале НИ имею вылет

  Показать

А строка 1082 у меня получается в _g.script вот здесь

  Показать

В lua_extension "exformat" переопределяется.

Может, для ЗП не prefetch("lua_extension"), а как-то по-другому?


Переподключил по-новой. НИ сработала, но через некоторое время

  вылет (Показать)
Изменено пользователем Romz

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

@Romz, проверь каким-нибудь чекером, что lua_extensions.script не имеет ошибок. Маловероятно, но возможно, что он из-за этого не загружается.

Кроме того, до и после после prefetch попробуй проверить (например, выводом в лог) тип переопределяемого метода. Если всё в порядке, type(table.size) должно выдать значение 'function'.

  • Нравится 1

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий

 

 

  Kirgudu писал(а):
проверь каким-нибудь чекером, что lua_extensions.script не имеет ошибок
После внесения изменений в скрипты всегда проверяю папку scripts script Syntax Checker-ом, потому что вполне могу где-то забыть then :) Он ошибок не выдал по этим скриптам.

 

  Kirgudu писал(а):
Кроме того, до и после после prefetch попробуй проверить
Щас попробую.

Вот бред же... Цепляю lua_helper от того же @Artos-а - всё норм, всё работает. lua_extension подцепился.

Следом цепляю se_stor - всё, lua_extension не виден... :dash2:


lua_extension из lua_helper немного новее того, что с se_stor, но именно эти функции и там, и там одинаковые.


Все файлы брал в этой теме, и в "Сборочном цехе"


@Artos в своё время обещал выложить обновлённый se_stor, но так и не сподобился.

Самый новый - от 09.09.2013

lua helper брал по ссылке @Artos-а - версия от 27.09.2013

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

Он сподобился, но выложил как раз от 09.09, а потом вроде удалил.

Даже и не знаю, что посоветовать. Объективных причин скрытию lua_extension я не вижу... в ЧН цепляется без проблем.


Попробуй вместо prefetch("lua_extension") использовать if lua_extension then end


И да, что показала проверка типа table.size до и после префетча?

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий

 

 

  Kirgudu писал(а):
И да, что показала проверка типа table.size до и после префетча?
Как и следовало ожидать
 STRING:nil;
! [ERROR] --- Failed to load script lua_extension
 STRING:nil;

Щас пробую закинуть lua_extension от 09.09.2013

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

Ещё предложение.

В lua_extension есть функция fStringExtraFormat, в комплекте se_stor от 09.2013 она идёт в самом начале.
В функции в двух местах есть шаблон '%\%[s|d|f]' (строки 65 и 78) и в одном месте шаблон '%\%[d|s|f]' (строка 72). Попробуй убрать в этих шаблонах вертикальную черту.

@Charsi говорит, что после такого изменения lua_extension у него в ЗП загрузился (а до того также не был виден).

Изменено пользователем Kirgudu

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий
  Romz писал(а):
Щас пробую закинуть lua_extension от 09.09.2013

То же самое. Не хочет цепляться lua_extension

@Kirgudu, Не, не взлетает... Кста, с одним lua_helper он он тоже не цепляется, оказывается. Просто сразу ошибку не вызывает.

Самое интересное, что сам lua_helper прицепился и функции из него вызываются.

Изменено пользователем Romz
Добавлено Kirgudu,

Попробуй то, что я выше написал.

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

Тогда как рабочий вариант могу посоветовать взять из lua_extension только используемые функции и вставить их куда-то ещё, да хоть в тот же _g.script.

Это exformat, table.size и, возможно, что-то ещё, что вызывается в se_stor, а также вызывается уже из этих функций.

Конечно, это довольно ёмкая и, вероятно, ненужная исходя из твоих задач работа. Но чисто ради спортивного интереса я бы попробовал и рассказал о результатах здесь - вдруг кому поможет в аналогичной ситуации. Заодно, может быть, при последовательном переносе обнаружится причина, по которой полный модуль не хочет в ЗП грузиться.

К сожалению, сам я не смогу этим заняться как минимум неделю, а то и больше.

Изменено пользователем Kirgudu
  • Согласен 2

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий

 

 

  Kirgudu писал(а):
Попробуй вместо prefetch("lua_extension") использовать if lua_extension then end
Так тоже попробовал, с равно тем же результатом.

 

 

  Kirgudu писал(а):
Тогда как рабочий вариант могу посоветовать взять из lua_extension только используемые функции и вставить их куда-то ещё, да хоть в тот же _g.script. Это exformat, table.size и, возможно, что-то ещё, что вызывается в se_stor, а также вызывается уже из этих функций.
Попробую.

Собственно, вот виновник всего кипеша

  Показать

Я закомментировал в lua_extension эту функцию, после чего lua_extension благополучно подцепился. Давайте вместе разбираться, что не нравится движку ЗП...


Я не очень опытен в скриптах но...

Функция в функции - это нормально?

  • Полезно 1

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий
  Romz писал(а):

Функция в функции - это нормально?

Хоть десяток функций друг в друга вкладывай. Тут дело в другом... надо думать.

Пока предложение следующее.

 

Вариант 1.

Функция fStringExtraFormat (она же exformat в глобальном пространстве _G) используется только для вывода отладочной информации в модуле хранилища.

Закомментируй её целиком, также закомментируй:

  • lua_extension: строки 874-876, 929-931
  • se_stor: строки 47-49

При добавлении из _g_ADD.script не надо добавлять строки 53-67.

Всё должно заработать, но без вывода возможной отладочной информации.

 

Вариант 2.

Попробуй вместо комментирования всего и вся поменять в шаблонах этой функции %\% на %% (в четырёх местах).

Изменено пользователем Kirgudu
  • Согласен 1
  • Полезно 1

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий
  Kirgudu писал(а):
Попробуй вместо комментирования всего и вся поменять в шаблонах этой функции %\% на %% (в четырёх местах).

Применил сразу этот вариант. Только заменил %\% на %:%. lua_extension нормально подцепился, отладочные сообщения в лог посыпались.

  Исправленная функция для lua_extensions от 27.09.2013 (Показать)
Изменено пользователем Romz
  • Не согласен 1
  • Полезно 1

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий
  Romz писал(а):
Только заменил %\% на %:%

Вариант с %/%, я думаю, тоже бы прокатил.

В корне неверное решение. Лучше б тогда просто закомментировал по первому варианту.

Тут надо понимать, что и для чего было сделано.

@Artos написал шаблоны вида '%\%[s|d|f]', чтобы работало такое формирование строки, выводимой в лог:

exformat("something %s something else %d something else 2]", param1, param2) 

То есть берётся исходная строка, в которую в подстановочные места, обозначенные %s, %d или %f, добавляются значения дополнительных аргументов.

Строго говоря, артосовский шаблон тоже не совсем верен - как справедливо заметил в кулуарной беседе @Charsi, в нём должно быть экранирование процента процентом же, а не escape-символ. Но, как ни странно, в ТЧ и ЧН шаблон Артоса не приводит к «невидимости» модуля и нормально работает.

Ты же добавляешь ещё один символ, который приводит к неправильной работе указанного выше вывода в лог. Функция в твоей редакции просто не найдёт %s и др. и выведет исходную строку в лог как есть, без подстановки аргументов.

Правильным вариантом шаблона должен быть именно тот, что приведён выше: '%%...' и без вертикальных чёрточек между символами в квадратных скобках. Например, '%%[sdf]' или '%%'.

Изменено пользователем Kirgudu
  • Полезно 1

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий
  Kirgudu писал(а):

Artos написал шаблоны вида '%\%[s|d|f]', чтобы работало такое формирование строки, выводимой в лог: exformat("something %s something else %d something else 2]", param1, param2) То есть берётся исходная строка, в которую в подстановочные места, обозначенные %s, %d или %f, добавляются значения дополнительных аргументов.

Ааа... Я посчитал это просто разделителем, между двумя значениями, тем более в других местах встречается вариант %/% и там косая - именно разделитель между значениями. А вертикальная черта - проглотилась нормально. Ок, поправлю.

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий
  Romz писал(а):

Ну это уже с утра разбиратся буду. Похоже, что это в bind_stalker косяк...

Нифига это не он

Этот вылет ловлю, когда пытаюсь закоментить вот этот кусок кода в lua_helper.script

  Показать

Сразу уточню - printf и log у меня и так работают. Поэтому хотел отрубить самопальные логи на основе get_console():execute

А вот если не трогать этот момент, то НИ начинается, а затем вылетает с таким логом

  Показать

Я подозреваю, что это связано с

  Цитата

...

1. Собственно сам модуль se_stor.script:

1.1 Скрипт se_stor.script имеет настройки, позволяющие использовать хранилище в разных версиях игры/модов (SoC|CS|CoP).

В данной версии комплекта скрипт полностью настроен на использование с оригинальной версией SoC (ТЧ патчи v1.0004 и выше).

...

4. В скрипте биндера актора (bind_stalker.script/bind_actor.script) требуется внести изменения помеченный в примере знаком #+#.

4.1. В методы 'save' и 'load' биндера необходимо добавить строки вызова соотв. функций (save/load) скрипта хранилища.

4.2. Если не предполанается изменение алгоритма хранения внешних модулей (погода, ...), то требуется организовать внешний доступ к биндеру актора.

4.3. В данном комплекте хранение данных модулями заданий, тайников, пси-зон вынесены в отдельные бинарные последовательности (chunks), что позволяет не вносить изменения в эти модули.

Однако необходимо описать в настройках хранилища (в таблице tPkChunks) внешние модули, в которых требуется сохранение данных в чанках (chunks).

Посоветовал бы все же сменить алгоритм хранения данных на хранение в виде субтаблиц в общей таблице 'storehouse'.

...

Это выдержки из readme_se_stor.txt

Исходя из этого, я подозреваю, что игра как раз и пытается грузить что-то из этих самых "чанков" но не находит их, потому что их тупо нет.

Так вот, из readme_se_stor.txt совершенно не понятно, как

  Цитата

...

сменить алгоритм хранения данных на хранение в виде субтаблиц в общей таблице 'storehouse'.

...

Поиском пробежался по сайту - ничего тоже не нашёл...

Кроме того, в se_stor присутствует для записи local function save_storehouse() и local function save_chunks() но вот для загрузки имеется только local function read_chunks()

Собственно, вопрос к знатокам: как бороться и с этими двумя фигнями?

Или, может, есть у кого нормально работающий se_stor под ЗП?

Изменено пользователем Romz

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

@Romz, если не ошибаюсь, последний se_stor глючный в принципе (проблема то-ли с записью, то-ли с чтением чанков, то-ли и с тем и с тем), надо искать более раннюю версию. У меня где-то комплект этих приблуд валялся, найду - скину. Возможно @Kirgudu поможет с этим раньше меня.

  • Спасибо 1
Ссылка на комментарий

@Карлан, у меня более старая версия se_stor встроена в мод (платформа ЧН), причём с изменениями, так что выковыривать оттуда будет сложно.

 

@Romz, всё намного проще. Если ты глянешь в se_stor таблицу tPkChunks, то увидишь, что в ней для ЗП перечислены модули, которые Артос предлагал сохранять в чанках. В том числе и level_weathers. А этот модуль у тебя либо отсуствует, либо в нём нет метода save - отсюда и принудительный вылет в функции сохранения чанков. Проверь для начала это.

Если судить по ЧН, в модуле level_weathers действительно нет публичного метода save. Там надо сначала получить экземпляр класса, у которого уже этот метод будет. Стандартно этот экземпляр класса сохраняется в экземпляре класса актора. Поэтому level_weathers мы из tPkChunks удаляем, вместо этого возвращаем в actor_binder:save() такую строчку:

self.weather_manager:save(packet)
Также надо вернуть аналогичную строчку в actor_binder:load()

 

Затем надо проверить остальные модули, которые Artos добавил в чанки для ЗП.

sr_psy_antenna и treasure_manager имеют публичные методы save и load (повторяю на всякий случай, пишу для ЧН! ЗП нет в наличии, но там по аналогии), их оставляем в чанках.

task_manager в ЧН публичных save и load не имеет - его из чанков убираем, возвращая в actor_binder:save() и actor_binder:load() (если в ЗП по-другому, действовать соответственно).

bind_actor - тут Artos для ЧН ошибся, этот модуль называется bind_stalker. Возможно, для ЗП это тоже так. Публичные методы save и load в него ты добавляешь согласно инструкции se_stor. Внутри них дёргаются опять же добавленные ext_save и ext_load, а там - пишутся/читаются данные ещё кое-каких внешних модулей.

Записываемые/читаемые в ext_save и ext_load модули надо не тупо взять из примера se_stor (который, как мы знаем, сделан для ТЧ), а сверить с оригинальными save и load ЗП.

 

Надеюсь, понятно расписал. Уверен на 99%, если внести все эти поправки, se_stor заработает. И это стало бы хорошим взносом для всех будущих пользователей хранилища в любых частях игры.

Возможно, на следующей неделе у меня самого будет время посидеть и соорудить готовые примеры использования модуля для всех платформ, а не только для ТЧ, как это сделано в оригинальном комплекте.

 

Поправка насчёт weather_manager. Его сохранение/загрузку Artos прописал и в таблицу чанков, и в доп. методы ext_save и ext_load. Это, понятное дело, избыточно (разве только в ЗП в этом модуле есть публичные save и load). Поэтому делаем что-то одно - либо оставляем в ext_save/load и убираем из таблицы чанков, либо убираем и из таблицы и из ext_save/load, но возвращаем в save/load.

Изменено пользователем Kirgudu
  • Полезно 1

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий

А как провернуть сие

  Показать

Или оно только Артосу извесно?

Изменено пользователем Romz

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...