Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Demosfen 142 Опубликовано 24 Июня 2020 Поделиться Опубликовано 24 Июня 2020 Добрый день, решили адаптировать Бартер из НС 2016 с gui интерфейсом, взяли скрипт "ui_barter_menu" адаптировали его под себя, добавили активацию скрипта через диалог, запускаем игру а он почему то начинает работать самостоятельно, хотя как я понял должен работать только при вызове функции из диалога, есть у кого какие мысли на этот счет? 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1337743
phalcor 60 Опубликовано 26 Июня 2020 Поделиться Опубликовано 26 Июня 2020 Вот такой, казалось бы, простой вопрос: труп Крысюка после ухода/возврата на локацию становится невидимым (оффлайн). (У меня он в исключении у уборщика, потому цел). Следующая комбинация не переводит его в он-лайн: local sim = alife() sim:set_switch_online (id, true) sim:set_switch_offline (id, false) А вообще это возможно? Чтобы он стал нормальным, видимым трупиком? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1337923
Norman Eisenherz 355 Опубликовано 27 Июня 2020 Поделиться Опубликовано 27 Июня 2020 (изменено) Здрасьте. [ЧН 1.5.10] Проверка типа заряженных патронов с условием "если в руках оружие". Пока в руках бинокль, нож, болт или ничего, проверка срабатывает каждый раз и, как ожидается, сигналит "no_wpn". После переключения на пистолет проверка срабатывает 1–2 раза (иногда выдает "левое" значение вроде "219" или "17") и дальше молчит. Триггер проверки – callback "use_object". Повторяющиеся вычисления через actor_binder:update(delta) с такой проверкой тоже останавливаются. Spoiler function use_check(obj) if obj:section() == "bandage" then local item = db.actor:active_item() if isWeapon(item) and item:section() ~= "wpn_knife" then local sobj = alife():object( item:id() ) local pk = net_packet() sobj:STATE_Write(pk) local size = pk:w_tell() pk:r_seek(size -2) local ammo_type = pk:r_u8() +1 news_manager.send_tip(db.actor, "loaded: " .. ammo_type) else news_manager.send_tip(db.actor, "no_wpn") end end end Сдвиг -2 от конца STATE-пакета опирается на данные из [m_netpk.script]: Spoiler function net_cse_alife_item_weapon:__init(obj,mode) … self.st_props = { … { name = 'ammo_type', type = 'u8', default = 0 }, { name = 'cse_alife_item_weapon__unk1', type = 'u8', default = 0, ver = 6 } --/ CS&SCoP Изменено 27 Июня 2020 пользователем Norman Eisenherz 2 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338237
abramcumner 1 234 Опубликовано 28 Июня 2020 Поделиться Опубликовано 28 Июня 2020 @Norman Eisenherz, на самом деле совсем не смешно. Что выдает артосовский m_netpk.script? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338267
WinCap 324 Опубликовано 28 Июня 2020 Поделиться Опубликовано 28 Июня 2020 @Norman Eisenherz, я уже не помню про ЧН, может там как в ЗП, нужно pk:w_begin(0) добавлять? 1 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338301
Norman Eisenherz 355 Опубликовано 28 Июня 2020 Поделиться Опубликовано 28 Июня 2020 @abramcumner при подключенном модуле игра вылетает уже на стадии "Сервер: старт" (хоть с сейва, хоть новая). Подключал согласно инструкции: [scripts\_g.script] function start_game_callback() … m_netpk.attach() -- новая строка end Файл [_g.script] чистый, в папке [gamedata] только он и [m_netpk.script]. Spoiler Expression : fatal error Function : CScriptEngine::lua_error File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp Line : 180 Description : <no expression> Arguments : LUA error: ...\common\stalker clear sky\gamedata\scripts\_g.script:975: bad argument #2 to 'format' (string expected, got nil) Проблемная строка – замена пробелов на пустое место. Ошибка при формировании сообщения об ошибке. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338303
abramcumner 1 234 Опубликовано 28 Июня 2020 Поделиться Опубликовано 28 Июня 2020 5 минут назад, Norman Eisenherz сказал: Arguments : LUA error: ...\common\stalker clear sky\gamedata\scripts\_g.script:975: bad argument #2 to 'format' (string expected, got nil) Это специальный вылет же. 975 строка - функция abort в ЧН. Что выше в логе? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338306
Norman Eisenherz 355 Опубликовано 28 Июня 2020 Поделиться Опубликовано 28 Июня 2020 @abramcumner Неподключенный конфиг… [m_netpk] выдает результат правильно при каждом обращении. В чем ошибка моего кода? Такой код точно работает в ТЧ; в ЧН отличие STATE-пакета оружия в одном новом параметре u8, то есть сдвиг еще -1 от конца. Методы класса net_packet не изменились. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338325
Zander_driver 10 358 Опубликовано 28 Июня 2020 Поделиться Опубликовано 28 Июня 2020 (изменено) @Norman Eisenherz, А таки для чего делать свои костыли, когда есть готовый исправно работающий инструмент? Поневоле вспоминается анекдот про "шашечки или ехать". 23 минуты назад, Norman Eisenherz сказал: Черный ящик это И что? Под капотом работающего агрегата копаются только тогда, когда категорически не устраивает, как он работает. Вот только, что может не устраивать в модулях Артоса, решительно не понятно. Ну, кроме морально-устаревшей самой по себе идеи, делать что-либо через нет-пакеты... Но от нее-то вы отказываться не хотите. Изменено 28 Июня 2020 пользователем Zander_driver 2 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338326
Norman Eisenherz 355 Опубликовано 28 Июня 2020 Поделиться Опубликовано 28 Июня 2020 @Zander_driver Черный ящик это. Опять же, базовые методы, вокруг которых не требуется строить 20 дополнительных проверок – не костыли. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338330
abramcumner 1 234 Опубликовано 28 Июня 2020 Поделиться Опубликовано 28 Июня 2020 @Norman Eisenherz, первое правило велосипедиста: педалишь свой велосипед - сверяй с проверенным. По ошибке: 1. обрати внимание на пост @WinCap,в ЧН/ЗП конструктор net_packet не иницилизирует позиции чтения/записи. Надо делать w_seek 2. Я бы все-таки проверял класс объекта при разборе нет-пакета. cse_alife_weapon по-моему только нож использует. Ну и да, библиотека Artos`а учитывает все это и еще кучу другого. 3 часа назад, Norman Eisenherz сказал: Опять же, базовые методы, вокруг которых не требуется строить 20 дополнительных проверок – не костыли. Ну как не костыли. Не работают же эти базовые методы Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338391
Norman Eisenherz 355 Опубликовано 28 Июня 2020 Поделиться Опубликовано 28 Июня 2020 @abramcumner WinCap точнее написал: w_begin(0). Начальная позиция "гуляет" (интересно, какое в этом удобство), вот и работала проверка через раз. Это не костыли – это различия версий, о которых можно узнать только из вот таких обсуждений, потому что в справочнике сказано: "созданный пакет по умолчанию имеет позиции чтения и записи, установленные в 0". Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338397
Expropriator 2 119 Опубликовано 2 Июля 2020 Поделиться Опубликовано 2 Июля 2020 (изменено) Вопрос по скрипту ОГСМ ogsm_rt_manager.script. В игре, с локациями ЧН, вылета не было. Вылет идёт по спавну в алспавн мертвого сталкера на новой локации. --Регистрация целей для тасков типа kill_stalker function CRandomTask:register_target(obj) if IsStalker(obj) thenfor k,v in pairs(self.task_id_by_type["kill_stalker"]) do -- !!! ТУТ ВЫЛЕТ !!! if obj.alive ~= nil and obj:alive() == true and obj:profile_name() == self.task_info[v].target then if self.task_info[v].target_objects == nil then self.task_info[v].target_objects = {} end table.insert(self.task_info[v].target_objects, obj.id) end end end end Может перечисление локаций ЧН сделать, типа такого? if level.name() == "agroprom_underground" then Или куда то надо новую локацию прописать или трупы? Кто шарит в ОГСМ ( кроме Kirgudu)? А там еще ака Bak намутил rx_wmgr.script . Короче, для нового уровня - ОГСМ - это Ж... Изменено 2 Июля 2020 пользователем Expropriator Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338970
Zander_driver 10 358 Опубликовано 2 Июля 2020 Поделиться Опубликовано 2 Июля 2020 12 минут назад, Expropriator сказал: ТУТ ВЫЛЕТ А какой вылет, это военная тайна? Может там достаточно проверку if type() == 'table' воткнуть, и всего делов... 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338979
Expropriator 2 119 Опубликовано 2 Июля 2020 Поделиться Опубликовано 2 Июля 2020 (изменено) Без ОГСМ всё работает. @Zander_driver, [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : ..\xrServerEntities\script_engine.cpp [error]Line : 180 [error]Description : <no expression> [error]Arguments : LUA error: ...orovka_beta2\gamedata\scripts\ogsm_rt_manager.script:978: bad argument #1 to 'pairs' (table expected, got nil) Спавню нпс на новой локации из профиля ОГСМ. Или я вообще туплю. Тут в ЧН же можно спавнить нпс через алспавн напрямую? Это же не ЗП, что бы через респавн. Изменено 2 Июля 2020 пользователем Expropriator Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338980
Kirgudu 1 370 Опубликовано 2 Июля 2020 Поделиться Опубликовано 2 Июля 2020 (изменено) 3 часа назад, Expropriator сказал: Кто шарит в ОГСМ ( кроме Kirgudu)? А я тебе не подойду вместо Kirgudu? Не было там никакой привязки к локациям, насколько я помню. К смартам - да, но не в заданиях типа "kill_stalker". Проверь, что ты не почистил ненароком конфиг misc\rt_manager.ltx При первом после загрузки обращении к менеджеру (например, как раз из se_stalker.on_register()) там считывалось содержимое секции list, затем по каждой строке этой секции читались уже свойства заданий и записывались в массив self.task_info. Далее делался перебор этого массива и в зависимости от значения свойства type добавлялось значение в один из массивов task_id_by_type[type]. Пустым он мог оказаться только в том случае, если из конфига не получено ни одного задания нужного типа. Изменено 2 Июля 2020 пользователем Kirgudu 1 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1338998
Expropriator 2 119 Опубликовано 2 Июля 2020 Поделиться Опубликовано 2 Июля 2020 @Kirgudu, я так понял, что у меня незаходят стартовые скрипты. В начале должно быть потемнение и музыка в голове, а уж после пойдёт правильная гаме. Странно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1339000
Kirgudu 1 370 Опубликовано 2 Июля 2020 Поделиться Опубликовано 2 Июля 2020 @Expropriator, ну, тут уж только тебе ведомо, что ты там со стартом накуролесил. Впрочем, на правильную инициализацию менеджера заданий это влиять всё равно не должно. Там главное, чтобы вызов любого метода менеджера из другого модуля шёл только через получение синглтона инициализированного экземпляра менеджера, например: ogsm_rt_manager.get_rt_manager():register_target(self) Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1339002
Expropriator 2 119 Опубликовано 2 Июля 2020 Поделиться Опубликовано 2 Июля 2020 (изменено) @Kirgudu, ничего понять не могу, Ладно, сперва вернусь к истокам, к нормальному алспавну и локациям. Может у меня алспавн баганутый получается? И кстати, я не внедряю ЧН локации в общий спавн, может причина, что нет смартов и другого спавна? Изменено 2 Июля 2020 пользователем Expropriator Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1339003
Kirgudu 1 370 Опубликовано 3 Июля 2020 Поделиться Опубликовано 3 Июля 2020 (изменено) @Expropriator, теоретически all.spawn, конечно, может влиять. Например, для тех же заданий типа "kill_stalker" одним из свойств является свойство parent, указывающее на того, кто может выдать задание. Это story_id определённого персонажа, и если ты удалил его из спавна, задание с таким родителем будет полностью пропущено при инициализации, а значит не будет учтено при составлении массива task_id_by_type[type]. Таким образом, получается, чтобы ты не наталкивался на вылет, описанный выше, необходимо выполнение трёх условий: 1. Конфиг misc\rt_manager.ltx должен содержать как минимум одно задание типа "kill_stalker"; 2. All.spawn должен обеспечивать спавн как минимум одного персонажа со story_id, указанным в конфиге в заданиях типа "kill_stalker", причём этот спавн должен происходить до инициализации менеджера; 3. Вызов любого метода менеджера должен происходить только через получение его экземпляра: ogsm_rt_manager.get_rt_manager():method_name(). Конечно, менеджер можно доработать так, чтобы он был универсальным и стойким к разным условиям. Но на момент активной разработки ОГСМ такой задачи просто не возникало, поэтому имеем то, что имеем. 15 часов назад, Zander_driver сказал: Может там достаточно проверку if type() == 'table' воткнуть, и всего делов... И кстати, если ты действительно убрал весь классический спавн, тогда причина именно в этом согласно трём правилам, описанным выше. А значит, решение, предложенное @Zander_driver, скорее всего будет для тебя панацеей. Куда воткнуть такую проверку, объяснять не нужно? Вроде все тут - люди опытные. Изменено 3 Июля 2020 пользователем Kirgudu 2 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/520/#findComment-1339032
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти