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

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

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


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

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

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

 

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

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

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


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

*Shoker*

Встроенная 'logf', как и аналогичные log1 (из x-Ray Extensions) и log123, которые также скриптом (lua_fix) могут быть задействованы, - чисто трансляторы полученной строки в штатный лог-файл и никак не расцвечивают строки.

Цвет текста в консоли целиком зависит от первых символов самой строки (префикса), а движек по этому символу уже расцвечивает ее.

Т.о. учитывая, что при использовании безконсольного вывода в лог (т.е. не консольными командами), можно вместо префикса 'load ~:'|'* Info' и т.п. формировать строки по своей потребности и начальными символами (*.!.~ ...) расцвечивать.

Однако данная версия все же подразумевает и отсутвие расширяющих dll-ек и тогда без "безопасного" префикса ('load ~:') коды вывода в лог станут фатальными ... (в ЧН/ЗП).

ИМХО, рюшечки все же менее важны, чем надежность и информативность.

 

Под трассировкой подразумевается то, что выдает debug.traceback, т.е. именно трассировку вызовов той функции, которая вызвала функцию abort и можно не только прочесть про ошибку, но и узнать откуда "ноги растут".

Вообще хотел добавить и вот это:

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos,

  Цитата
RvP, просто в доступе модмейкерам скомпилированной dll-ки для ЧН/ЗП не было.

да ладно :o

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

Vita sine libertate, nihil

Vita sine litteris - mors est

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

RvP, предлагаю не пустословить, тем более собственно и ни о чем.

  Раскрывающийся текст (Показать)
Изменено пользователем ColR_iT

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos,

Она не универсальна.. Просто, существуют версии для ЧН/ЗП, длл которые имеют log1, и не только.

В действительности она не выкладывалась на публику и только... Хотя, вроде все-таки где-то проскальзывала, или упоминалась....

на счет цветов..

  "Malandrinus" писал(а):
## (две решётки) непонятно-синеватый (цвет здесь показан точный #0E8C82)

~~ (две тильды) чисто жёлтый (#FFFF00)

** (два умножения) серый (#808080)

!! (два восклицательных знака) красный (#FF0000)

-- (два минуса) зелёный (#00FF00)

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

Unnamed Black Wolf

Ну зачем оспаривать или подтверждать то, что и так почти всем известно(?) и адресовать пост мне, кто и говорит что НЕТ универсальной/совместимой/...

Изначально разговор идет о расширителе Lua на базе проекта "xrLuaFix" (by RvP) - о чем читаем в кратком описании выложенного набора: #3936 При чем тут "она не универсальна" и начинать разговор о совершенно ином?

Многим из нас известно о существовании параллельного проекта x-Ray Extensions (by Malandrinus), но это тем более совершенно иная тема.

Существующие варианты для ЧН/ЗП сильно устарели. Для ЧН (что требуется тому же (*Shoker*'у) вообще мало что сделано. Пространства 'debag' также нет.

И правится соверженно иная DLL-ка (xrGame.dll), которая довольно критична для разных модов (т.к. в модах вносятся локальные правки) и также в свободном для каждого моддмейкера (в том числе и новичкам) скомпиллированной DLL нет (требуются познания, навыки и инструменты для компиляции).

Данный вариант комплекта дает практически каждому модмейкеру для любого мода готовый набор (DLL+script) чтобы получить и информативный лог, в том числе из любого разумного набора аргументов для строки лога и дебаговый лог-файл (что важно при "безлоговых" ошибках), и инструметарий 'debug'-пространства, что также для любого модмейкера большое подспорье. И все это достаточно компактно и бесконфликтно как с кодами игры, так и с публичным применением/распространением подобной правки/добавки.

Цель комплекта в данном случае: дать любому модмейкеру для любой версии игры готовый к применению инструмент с минимальным необходимым для моддинга набором работы со скриптами/кодами, а не супернавороченый многофункциональный, но узко-заточенный, комбайн. Мы все же в "Школе", а не в "мастерских" ;-)

 

А по цветам: движек имеет немало иных комбинаций для раскраски строк в консоле, поэтому не только перечисленные штатные комбинации могут встречаться.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Всё же "инструмент" стоит добавить хотя бы в шапку этой темы, иначе он точно потеряется здесь, т.к тема довольно активная.

Создать раздел вроде "Полезные скрипты\расширения" с прямыми ссылками на посты.

 

Unnamed Black Wolf

Вот оно как... а казалось всё узнал.

Пойду сделаю свою жизнь ярче :D

Спс. за цитату.

Они ведь могут в комбинации встречаться?

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*, это пока первая версия, можно считать 'beta'. Есть моменты которые еще нужно бы доработать (хотя бы по дублирующему выводу в лог для ЧН/ЗП). Вот тогда или в шапку или в тему инструментария ее можно будет положить (если будет востребована).

О разделе по "полезным скриптам" - в процессе подготовки и обмозговывания :-). Вероятно (если движек форума позволит) второй в теме пост будет под эти цели.

 

И совет, если решил расцвечивать:

Учитывая, что делаешь мод на ЧН, которая (версия) критична к консольным командам, в функции _G.printf, которая в lua_fix.script, замени префиксы "* Info" и "* DBG" на пустышки (иль сотри их) и тогда в каждой строке, которую отправляешь в лог сможешь задавать префиксом расцветки.

И ... к сожалению запамятовал, но в каком-то моде был сделан набор функций-заготовок для вывода в лог разными цветами, типа: log_warning, log_fail, log_info, ...

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
  Цитата
Вероятно (если движек форума позволит) второй в теме пост будет под эти цели.

Насколько я знаю, тут ограничение на размер сообщения. Если там будет слишком много кода\описания, то придётся ещё один пост забирать. Гораздо компактнее давать ссылки на посты. Можно и скрипт скачать и его обсуждение глянуть.

 

По поводу ЧН - всё вывожу через error_log(), тоесть без консоли. Пока не сбоило, а вот когда иногда вывожу через get_console() бывает виснет, особенно при частых вызовах. Кстати... а в error_log() та будет расцветка работать? Надо проверить...

 

_____________________

 

Насчёт alife():remove_in_restriction(soNPC, idRestr)

Вообщем похоже она вроде как и удаляет "ограничение" у НПС, но вылет по прежнему оставался. Удалил через нет-пакет и всё заработало пучком. Но всё же интересно почему удаление через alife() так работает странно.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*, с error_log() расцвечивать не получится, т.к. эта функция пристыковывает свой префикс в начало строки ( ! [LUA][ERROR] ) ...

Да и небезопасно, привыкнешь ... а в ЗП подобный вывод в "лог" сродни abort'у. ;-)

get_console() - с безопасным префиксом в ЧН/ЗП достаточно безопасны и давненько не встречался с их виною в провоцировании ошибок, но конечно же нагрузка на диск при каждом таком вызове немалая и если у тебя там "кучка" сэйвов, а среди них бывают и битые(!) ...

 

Ну а по по рестрикторам: когда достсточно набьешь шишек - бум разговаривать на одном языке - "битых, но наученных практикой". ;-)

Тем более пока не ясно, поменял ты алгоритм иль нет, т.е. чистишь "до" или "после". (но это мы опять за старое ...)

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
  Цитата
Тем более пока не ясно, поменял ты алгоритм иль нет, т.е. чистишь "до" или "после"

Чистка идёт одновременно с удалением. Тоесть для удаления у меня идёт перебор всех объектов в игре (не экономно конечно, но юзаю старый сторонний алгоритм и как то привык к нему, тока вчера заметил что лучше бы удалять по таблице) и во время этого перебора если найдена аномалия - она удаляется, если нпс = у него чистится "ограничение", тоесть у меня и так и так получается...

 

_______

 

А вот заметил сообщения вида:

! cannot remove restriction with id 21963 to the entity with id 22264, because there is no space restrictor with the specified id

Но при save\load вылетов нету. И "ограничения" вроде как удалены.

Критично ли оставлять так как щас или может в дальнейшем аукнуться?

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*, кротко можно ответить: "Не критично."

Учитывая, что ты удаляешь и рестриктор и ограничения по нему для серверного объекта, то активная схема (если таковая есть) клиентского объекта вполне может успеть на своем ближайшем апдейте еще не знать, что и ограничения нет и/или рестриктор уже исчез из игры - вот и получаешь сообщение о такой коллизии. Критично это иль нет - однозначного ответа нет и не может быть, все зависит от дальнейших кодов/алгоритма и их реакции ... В оригинальных кодах вроде как не встречал коллизий по этому поводу.

Примечание: Вот для того, чтобы и не гадать и не попадать в критические ситуации и использую в своих кодах (где возможно) алгоритм 'отложенного' удаления рестриктора/аномалии, т.е. вначале чистка ограничений (+ отключение аномалии), и только на следующем апдейте собственно удаление самого рестриктора. Хотя конечно же это может быть и избыточностью ...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Стоит такая задача - нужно из файла (с расширением .xml) считать все. Собственно у Kirag'a был такой вариант в его парсере .xml файлов:

local str = r:r_stringZ()
if r:r_tell() > size then
    str = string.sub(str,1,size)
end

Все логично, но если файл упакован в архив, то я получаю вылет без лога, т.к. в архивах у файлов нет \0 символа, обозначающего конец файла. Тогда я попытался сделать так:

local str = ""
for i=1,size do
    str=str..string.char(r:r_u8())
end

где size - размер файла в байтах

Все работает, но работает невероятно медленно. Если раньше был небольшой лаг, то сейчас у меня игра зависает на пол минуты. Может у кого нибудь есть универсальное решение?

Изменено пользователем _Призрак_

Freedom

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

_Призрак_

Подобная конкатенация в цикле - str=str..add - всегда была ужасно медленной штуковиной.

Сделай через таблицу :

local t = {}
local char = string.char
for i=1,size do
    t[#t+1] = char(r:r_u8())
end
local str = table.concat(t)

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

Пытаюсь сделать вывод на худ общего веса всего барахла, которое можно получить с помощью iterate_inventory.

В апдейте актера вызываю ф-цию:

  1 (Показать)
Изменено пользователем AndreySol
Ссылка на комментарий

AndreySol, вообще то советовать "как исправить" то, что заведомо ошибочно - неразумно.

Можно долго гадать (тем более не указана версия игры), сколь часто и с каким результатом можно обращаться к нет-пакетам объекта, каждый раз вызывая локальные копии пакетов и справляется ли движек с подобным ... Но можно и просто указать на порочность данного алгоритма:

1. Ты считаешь, что обновлением ~50 раз в секунду в окне кастом-статика получаешь больше информации, чем, например, делая подобное 1 раз в секунду?

2. Ты считаешь, что те же самые секции объектов/предметов, следует перечитывать каждый раз заново из конфиг-файлов, т.к. один раз прочитанное может измениться?

 

Попробуй переписать свои функции с учетом вышесказанного, и кешируя ту же local packet = net_packet() один раз, а не в каждом цикле апдейта да еще и для каждой пачки(!). Тогда есть смысл искать непонятки и решение для них, а не гадать над непригодным для игры кодом. :-) Не лишним, также, будет packet:w_begin(0) - т.е. установка в начало нет-пакета перед его чтением ...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Я уже забыл конечно (давно сталкером не занимался). Собственно - изменение в инвентаре это не дроп\тэйк?

Если да, то ставить обновление на них вместо апдейта.

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

Gun12, ты прав, это более подходящий вариант для апдейта веса, но ... AndreySol не потрудился указать цели своих проверок.

При (пере)проверках по дроп\тэйк останется погрешность при перезарядках/разрядках оружия, да и собственно у него не учитывается вес заряженых патронов во всем оружии ... Да и аддоны, опционально устанавливаемые на оружие - не учтены. А может это ему и не нать. ;-)

Также минусом по дроп\тэйк является то, что при загрузке сэйва и/или выходе из игры происходит "лавинный" в(ы)брос предметов в/из рюкзак(а) ..., что порой приводит к нежелательным последствиям и требуется такие моменты отсекать.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
  Цитата
1. Ты считаешь, что обновлением ~50 раз в секунду в окне кастом-статика получаешь больше информации, чем, например, делая подобное 1 раз в секунду?

Несколько мне известно, большая часть информации на худе обновляется\отображается по апдейтам актера, поэтому я и не думал, что в случае с отображением веса барахла надо смотреть в сторону таймеров.

  Цитата
2. Ты считаешь, что те же самые секции объектов/предметов, следует перечитывать каждый раз заново из конфиг-файлов, т.к. один раз прочитанное может измениться?
но может изменится содержимое инвентаря.

Да и проблема как я понял, все-же в чтении из нет-пакета.

  Цитата
и кешируя ту же local packet = net_packet() один раз, а не в каждом цикле апдейта да еще и для каждой пачки(!)
если имеется в виду вынести local packet = net_packet() из ф-ции GetInvWeight(), то я попробовал и с учетом добавления packet:w_begin(0) - результат тот-же.
Ссылка на комментарий

AndreySol, хочется дать на твой пост ответ типа: "no comments" и предоставить возможность запиматься погадалками далее, но уж очень типичен подобный подход у многих модмейкеров, поэтому все же прокомментирую:

  Раскрывающийся текст (Показать)

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Есть более элегантное решение. Установите себе X-Ray extensions, там есть метод (в каком то из последних ревизий добавили), который возвращает вес инвентаря

Freedom

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...