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

Kirgudu

Жители
  • Число публикаций

    1 636
  • Регистрация

  • Последнее посещение

  • Дней в топе

    27
  • AMKoin

    15,865 [Подарить AMKoin]

Весь контент пользователя Kirgudu

  1. Kirgudu

    Инструмент

    Координаты записываешь не так. Вот точка, взятая примерно там же, в домике Лиса: Абсолютные значения координат (3, 4 и 5 числа) плюс-минус совпадают, но знаки отличаются. Зачем везде минусы ставить?
  2. Kirgudu

    Форум: вопросы и предложения

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

    Инструмент

    @tihik ничего пусть остаются, зато доп. информация по конфигурированию вынужденно появилась. Нюанс с регистром мне известен. На самом деле, я хотел сделать поиск регистронезависимым, однако по каким-то причинам стандартные для lua string.lower и string.upper отказались работать как надо, возвращая исходную строку. Разбираться было некогда, поэтому я отложил этот вопрос. В следующей версии постараюсь сделать поиск менее избирательным.
  4. Kirgudu

    Скриптование

    @Купер уже набил примерно то же самое, но опоздал секунд на 20. @Balavnik от себя хочу добавить ещё один способ: поиск по форуму. Пример для "состояние предмета" с вхождением всех слов: https://www.amk-team.ru/forum/search/?&q=состояние предмета&quick=1&search_and_or=and&sortby=relevancy Каждый второй пост в результатах содержит искомую функцию set_condition. Немного брюзжания: раньше считалось хорошим тоном сначала поискать ответ на свой вопрос в старых постах, коих за столько лет накопилось изрядно, и только потом - писать.
  5. Kirgudu

    Инструмент

    Опять же, проверю. Такая возможность закладывалась изначально, поиск производится по вхождению строки либо в секцию (левый столбец), либо в наименование (правый столбец). Единственное - не всегда правый столбец содержит что-то отличное от секции. Туда помещается: 1. необязательное тестовое значение, которое можно указать в spawn.ltx через запятую после секции. Например, если в конфиге написать [weapon] bolt, "Большой ржавый болт" в списке также будет указан "Большой ржавый болт", а не просто "Болт". 2. результат поиска текстового значения по идентификатору, указанному в свойстве "inv_name" - если есть. Если пункты 1 и 2 оба не выполняются, во втором столбце будет продублирована секция, а поиск будет производиться только по ней.
  6. Kirgudu

    Инструмент

    А во этого быть не может, там тупое построчное чтение конфига и занесение в массив для последующего показа "как есть", ну разве что с дополнительным переводом на человекопонятный, если он имеется. Сегодня-завтра постараюсь проверить сам, но пока слабо верится.
  7. Kirgudu

    Инструмент

    В inv_name содержится идентификатор текста, он не имеет ничего общего со спавном. В конфиг надо добавлять секцию предмета из квадратных скобок: [sample_weapon_section]. Совершенно верно. Только не точек, а локаций, секции которых отсутствуют в конфиге.
  8. Kirgudu

    Инструмент

    @tihik ствол не добавляется в список или в инвентарь? Со списком проблем быть не должно, там всё предельно просто. Берётся misc\tool\spawn.ltx и в секцию [weapon] (или другую, если речь не об оружии) дописываются необходимые строки. После этого, естественно, необходимо загрузиться из сейва. Если в списке новая секция оружия присутствует, но предмет не спавнится в инвентарь, тогда сложнее. Мне надо будет самому пощупать в игре, что там происходит. При доработке Инструмента для ОП я действительно учитывал только то, что находится в штатной папке weapons.
  9. Kirgudu

    Скриптование

    Вот именно, что возникает много разных "если" и "но". Где было написано про удаление всех? Ни в вопросе, ни в ответе ни единого слова, намекающего на это. Если хочешь принести пользу, необходимо объяснять свои ответы, иначе они могут трактоваться как ошибочные. Вот я заспавнил скриптом одного НПС, мне больше не надо. Тоже будешь удалять перебором, или здесь возникнет ещё одно невысказанное "если"? Вопрос риторический, ответ не нужен.
  10. Kirgudu

    Скриптование

    Порочный совет. "Обычно" наоборот, стараются так не делать, а если советовать такое, неплохо бы объяснять все минусы этого подхода. Да ещё и пример написан с ошибками (об этом ниже). @Balavnik, минус, причём жирный, заключается именно в переборе 65 тысяч (в примере) или в среднем 33 тысяч объектов. Что если такой поиск нужно делать периодически? А если он сам находится внутри другого цикла и/или содержит в себе достаточно внушительный код? Подход "процессор вывезет" сработает у одного, а у другого - приведёт к фризам.
  11. Kirgudu

    Скриптование

    В чём вопрос-то заключается? Чисто скриптовых ошибок не видно, а вот как движок воспринимает попытку удаления сразу после создания (в том же блоке исполнения кода) - сказать не могу. Пусть знатоки OGSR отвечают.
  12. Kirgudu

    Скриптование

    Даже если просто порыться в скриптах оригинальной игры, можно увидеть как раз то, о чём ты спрашиваешь. Файл se_respawn.script, функция se_respawn:create(prob): obj = alife():create(...) и ниже использование obj.id - вот искомый идентификатор созданного объекта. Я тебе уже писал в личке, кажется, сейчас повторю ещё раз: не ленись исследовать файлы оригинала. Несмотря на то, что они пестрят ошибками, тем не менее, в них можно найти тонны работающих примеров. В данном случае банальный поиск по файлам подстроки "alife():create" как раз вернул бы место, где ты нашёл бы ответ на свой вопрос.
  13. Для серверных объектов - obj.id, для клиентских - obj:id(). Относится к любым игровым объектам, которыми можно манипулировать, в том числе НПС.
  14. Kirgudu

    Скриптование

    @Norman Eisenherz посмотри squad_descr_escape.ltx На автобусной остановке спавнится (esc_quest_line.ltx) строго определённый отряд с такой секцией: [esc_smart_terrain_6_8_stalker_patrol_2] Новичков sim_default_stalker_0 в нём можно поменять на персонажей с любой другой подходящей секцией из состава spawn_sections_*.ltx, в том числе на самописно-уникальных.
  15. Kirgudu

    Скриптование

    Стоит начать использовать "Справочник по функциям и классам" здесь, на форуме. Диалоги: Часть 1. Форматы файлов, базовые сведения Часть 2. Скриптовые диалоги Часть 3. Тематическая подборка функций управления диалогами Читать, вникать и пробовать. И только если что-то непонятно, задавать предметные вопросы.
  16. Kirgudu

    Скриптование

    @Balavnik совершенно верно.
  17. Kirgudu

    Скриптование

    Без разницы. При этом объект в инвентаре всегда в онлайне, соответственно, можно плясать от клиентского объекта.
  18. Kirgudu

    Скриптование

    @Balavnik если объект клиентский (obj), всё просто: local cond = obj:condition() Если объект серверный (sobj), тогда либо сначала получить клиентский (объект должен находиться в онлайне): local obj = level.object_by_id(sobj.id) либо если онлайн объект отсутствует (obj = nil после получения из серверного) - действовать через нет-пакет. Пример с использованием m_netpk: local pk = get_netpk(sobj, 1) -- state часть нет-пакета local data = pk:get() local cond = data.condition Также, возможно, для серверных объектов есть что-то более удобное в OGSR.
  19. Kirgudu

    Скриптование

    Поддерживаю, незачем ради этого заморачиваться записью в сейв. В ЧН, например, именно так всё и происходит при ограблении в подвале Барахолки, можно посмотреть реализацию там - скриптовая база практически идентична.
  20. Kirgudu

    Скриптование

    @Biblia В скриптовом плане ошибки нет (переменная только лишняя, вполне можно писать сразу db.actor.health = 0.5 - db.actor.health). Выведи содержимое db.actor.satiety в лог и посмотри, чему оно равно и меняется ли вообще.
  21. Kirgudu

    Скриптование

    @Balavnik, ничего не понял. Если первая часть вопроса относится к моему ответу в "ковырялке", то переменная в примере была объявлена как локальная: local item_counts = enumerate_items(). Да, там, где выполняется эта строка, содержимое массива, конечно, изменится. Но при этом, поскольку переменная локальная, из других скриптовых модулей она будет недоступна. А вообще, как ты её (переменную) используешь, куда вставил, где изменяешь, как и откуда пытаешься читать - сие только тебе, да телепатам известно. Но последние здесь отсутствуют, поэтому вменяемый ответ дать сложно. Что же касается второй части, то - опять же, за отсутствием телепатов предположительно, - нужна некая система сохранения переменной в сейве, чтобы её значение можно было использовать в ранее запомненном виде хоть после перехода на другую локацию, хоть после сохранения-загрузки и вообще в любое время. Так? Современные версии движка, такие как OGSR, обладают подобными возможностями, вот буквально недавно на глаза попадался похожий вопрос и ответ на него. Если же модифицированные движки по тем или иным причинам не рассматриваются, рекомендую обратить своё внимание на модуль se_stor от Artos-а, который можно взять, например, здесь:
  22. Kirgudu

    Скриптование

    @Balavnik если это действительно глобальная переменная с ненулевым значением - до конца игры, ближайшей загрузки из сейва или принудительного обнуления скриптовым кодом.
  23. Kirgudu

    Скриптование

    Можно, запись в любые доступные переменные возможна точно так же, как и чтение из них.
  24. Kirgudu

    Скриптование

    @Balavnik, перебор всех предметов в инвентаре и подсчёт количества каждого типа предмета с возвратом таблицы вида { секция1 = кол-во1, секция2 = кол-во2...}: Имхо, это всё вопросы для Скриптования, а не Ковырялки.
  25. Kirgudu

    Инструмент

    @av661194 прекрасно, только мне это зачем? Инструмент не для расширения движка. Но если кто-то для себя расширит движок недостающими функциями, Инструмент с радостью позволит записать и прочесть точки. Это в нём предусмотрено.
×
×
  • Создать...