-
Число публикаций
1 636 -
Регистрация
-
Последнее посещение
-
Дней в топе
27 -
AMKoin
15,865 [Подарить AMKoin]
Весь контент пользователя Kirgudu
-
Координаты записываешь не так. Вот точка, взятая примерно там же, в домике Лиса: Абсолютные значения координат (3, 4 и 5 числа) плюс-минус совпадают, но знаки отличаются. Зачем везде минусы ставить?
-
Навеяло этим постом: В бытность свою одним из модераторов я хотел поправить все такие посты (как раз примерно тогда и случился переход на новую версию форума, поломавшую формат), но вовремя руки не дошли, а потом я уволился. Уважаемая администрация, почему бы это не сделать сейчас вам? Уж по крайней мере "школа" так и просится на лечение, тем более что все мы нет-нет, да отправляем туда новичков за знаниями.
-
@tihik ничего пусть остаются, зато доп. информация по конфигурированию вынужденно появилась. Нюанс с регистром мне известен. На самом деле, я хотел сделать поиск регистронезависимым, однако по каким-то причинам стандартные для lua string.lower и string.upper отказались работать как надо, возвращая исходную строку. Разбираться было некогда, поэтому я отложил этот вопрос. В следующей версии постараюсь сделать поиск менее избирательным.
-
@Купер уже набил примерно то же самое, но опоздал секунд на 20. @Balavnik от себя хочу добавить ещё один способ: поиск по форуму. Пример для "состояние предмета" с вхождением всех слов: https://www.amk-team.ru/forum/search/?&q=состояние предмета&quick=1&search_and_or=and&sortby=relevancy Каждый второй пост в результатах содержит искомую функцию set_condition. Немного брюзжания: раньше считалось хорошим тоном сначала поискать ответ на свой вопрос в старых постах, коих за столько лет накопилось изрядно, и только потом - писать.
-
Опять же, проверю. Такая возможность закладывалась изначально, поиск производится по вхождению строки либо в секцию (левый столбец), либо в наименование (правый столбец). Единственное - не всегда правый столбец содержит что-то отличное от секции. Туда помещается: 1. необязательное тестовое значение, которое можно указать в spawn.ltx через запятую после секции. Например, если в конфиге написать [weapon] bolt, "Большой ржавый болт" в списке также будет указан "Большой ржавый болт", а не просто "Болт". 2. результат поиска текстового значения по идентификатору, указанному в свойстве "inv_name" - если есть. Если пункты 1 и 2 оба не выполняются, во втором столбце будет продублирована секция, а поиск будет производиться только по ней.
-
А во этого быть не может, там тупое построчное чтение конфига и занесение в массив для последующего показа "как есть", ну разве что с дополнительным переводом на человекопонятный, если он имеется. Сегодня-завтра постараюсь проверить сам, но пока слабо верится.
-
В inv_name содержится идентификатор текста, он не имеет ничего общего со спавном. В конфиг надо добавлять секцию предмета из квадратных скобок: [sample_weapon_section]. Совершенно верно. Только не точек, а локаций, секции которых отсутствуют в конфиге.
-
@tihik ствол не добавляется в список или в инвентарь? Со списком проблем быть не должно, там всё предельно просто. Берётся misc\tool\spawn.ltx и в секцию [weapon] (или другую, если речь не об оружии) дописываются необходимые строки. После этого, естественно, необходимо загрузиться из сейва. Если в списке новая секция оружия присутствует, но предмет не спавнится в инвентарь, тогда сложнее. Мне надо будет самому пощупать в игре, что там происходит. При доработке Инструмента для ОП я действительно учитывал только то, что находится в штатной папке weapons.
-
Вот именно, что возникает много разных "если" и "но". Где было написано про удаление всех? Ни в вопросе, ни в ответе ни единого слова, намекающего на это. Если хочешь принести пользу, необходимо объяснять свои ответы, иначе они могут трактоваться как ошибочные. Вот я заспавнил скриптом одного НПС, мне больше не надо. Тоже будешь удалять перебором, или здесь возникнет ещё одно невысказанное "если"? Вопрос риторический, ответ не нужен.
-
Порочный совет. "Обычно" наоборот, стараются так не делать, а если советовать такое, неплохо бы объяснять все минусы этого подхода. Да ещё и пример написан с ошибками (об этом ниже). @Balavnik, минус, причём жирный, заключается именно в переборе 65 тысяч (в примере) или в среднем 33 тысяч объектов. Что если такой поиск нужно делать периодически? А если он сам находится внутри другого цикла и/или содержит в себе достаточно внушительный код? Подход "процессор вывезет" сработает у одного, а у другого - приведёт к фризам.
-
В чём вопрос-то заключается? Чисто скриптовых ошибок не видно, а вот как движок воспринимает попытку удаления сразу после создания (в том же блоке исполнения кода) - сказать не могу. Пусть знатоки OGSR отвечают.
-
Даже если просто порыться в скриптах оригинальной игры, можно увидеть как раз то, о чём ты спрашиваешь. Файл se_respawn.script, функция se_respawn:create(prob): obj = alife():create(...) и ниже использование obj.id - вот искомый идентификатор созданного объекта. Я тебе уже писал в личке, кажется, сейчас повторю ещё раз: не ленись исследовать файлы оригинала. Несмотря на то, что они пестрят ошибками, тем не менее, в них можно найти тонны работающих примеров. В данном случае банальный поиск по файлам подстроки "alife():create" как раз вернул бы место, где ты нашёл бы ответ на свой вопрос.
-
[SoC] Ковыряемся в файлах
Kirgudu ответил на тему форума автора Halford в Скрипты / конфиги / движок
Для серверных объектов - obj.id, для клиентских - obj:id(). Относится к любым игровым объектам, которыми можно манипулировать, в том числе НПС. -
@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, в том числе на самописно-уникальных.
-
Стоит начать использовать "Справочник по функциям и классам" здесь, на форуме. Диалоги: Часть 1. Форматы файлов, базовые сведения Часть 2. Скриптовые диалоги Часть 3. Тематическая подборка функций управления диалогами Читать, вникать и пробовать. И только если что-то непонятно, задавать предметные вопросы.
-
@Balavnik совершенно верно.
-
Без разницы. При этом объект в инвентаре всегда в онлайне, соответственно, можно плясать от клиентского объекта.
-
@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.
-
Поддерживаю, незачем ради этого заморачиваться записью в сейв. В ЧН, например, именно так всё и происходит при ограблении в подвале Барахолки, можно посмотреть реализацию там - скриптовая база практически идентична.
-
@Biblia В скриптовом плане ошибки нет (переменная только лишняя, вполне можно писать сразу db.actor.health = 0.5 - db.actor.health). Выведи содержимое db.actor.satiety в лог и посмотри, чему оно равно и меняется ли вообще.
-
@Balavnik, ничего не понял. Если первая часть вопроса относится к моему ответу в "ковырялке", то переменная в примере была объявлена как локальная: local item_counts = enumerate_items(). Да, там, где выполняется эта строка, содержимое массива, конечно, изменится. Но при этом, поскольку переменная локальная, из других скриптовых модулей она будет недоступна. А вообще, как ты её (переменную) используешь, куда вставил, где изменяешь, как и откуда пытаешься читать - сие только тебе, да телепатам известно. Но последние здесь отсутствуют, поэтому вменяемый ответ дать сложно. Что же касается второй части, то - опять же, за отсутствием телепатов предположительно, - нужна некая система сохранения переменной в сейве, чтобы её значение можно было использовать в ранее запомненном виде хоть после перехода на другую локацию, хоть после сохранения-загрузки и вообще в любое время. Так? Современные версии движка, такие как OGSR, обладают подобными возможностями, вот буквально недавно на глаза попадался похожий вопрос и ответ на него. Если же модифицированные движки по тем или иным причинам не рассматриваются, рекомендую обратить своё внимание на модуль se_stor от Artos-а, который можно взять, например, здесь:
-
@Balavnik если это действительно глобальная переменная с ненулевым значением - до конца игры, ближайшей загрузки из сейва или принудительного обнуления скриптовым кодом.
-
Можно, запись в любые доступные переменные возможна точно так же, как и чтение из них.
-
@Balavnik, перебор всех предметов в инвентаре и подсчёт количества каждого типа предмета с возвратом таблицы вида { секция1 = кол-во1, секция2 = кол-во2...}: Имхо, это всё вопросы для Скриптования, а не Ковырялки.
-
@av661194 прекрасно, только мне это зачем? Инструмент не для расширения движка. Но если кто-то для себя расширит движок недостающими функциями, Инструмент с радостью позволит записать и прочесть точки. Это в нём предусмотрено.
УЧИМСЯ МОДДИНГУ
ИГРАЕМ В МОДЫ НА ТЧ
ИГРАЕМ В МОДЫ НА ЧН И ЗП
- [ЧН] 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
- ...и другие моды
ПОЛЕЗНОЕ И РАЗНОЕ