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

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

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


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

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

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

 

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

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

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


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

не я это придумал, а умные люди пришли к этому многие десятки лет назад. Этот принцип реально помогает упростить жизнь

Да знаю я. про принцип. По моим же наработкам можете увидеть что понимаю о чем речь идет, наверное.

  Malandrinus писал(а):

Я откровенно не понял про "мифы и стереотипы".

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

 

  Malandrinus писал(а):

А если ты можешь залезть в движок, то зачем тебе скриптовый парсер?

Хм, вы серьезно? :)

Тогда, мысленно задайте этот вопрос разрабам игры, они же могли лазить в движок. Но зачем-то вот прикрутили к движку еще и скрипты.

Неужели надо опять поднимать тему того, зачем это было нужно?

  Malandrinus писал(а):

Твой парсер - это не "чисто скриптовое создание", с которого начался разговор.

Именно оно и есть. Любой нормальный код сопровождается данными как я уже говорил.

  Malandrinus писал(а):

что за задачу вы собираетесь решать вот этим извращённым способом?

В моем случае, ответ на этот вопрос звучит так:

Я желаю иметь возможность скриптовыми инструментами делать с окном/контролом/статиком и проч. все, что только возможно/имеет смысл с ним вообще делать. Все в принципе возможные действия. Зачем? Чтобы на основе этого набора возможностей создать функционал для полностью скриптовой разработки любого интерфейса какого угодно назначения и функциональной нагрузки. Само собой в сопровождении файлов данных в конфигах. Зачем мне такой функционал? Стоит посмотреть на возможности инвентаря "Судьбы Зоны" например. Или, если не убедило, инвентарь какой-нибудь ММОРПГ-игры из относительно новых. Да и весь интерфейс впрочем.

  Malandrinus писал(а):

Это промышленный стандарт, для которого не надо делать парсеры, поскольку они уже есть во множестве.

Да это так. Но, стандарт изначально разработан как бы не совсем для того, для чего его в сталкере используют.

Даже совсем не для того я бы сказал.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

делать полностью скриптом" - я имел в виду именно скрипт использующий вышеупомянутый принцип.

Тогда ты сам себе противоречишь. Уж не знаю, что ты так завёлся.

 

  Цитата

Но зачем-то вот прикрутили к движку еще и скрипты.

Примерно до 2004 года никаких скриптов в движке не было. Т.е. совсем. А окошки, диалоги и всё прочее было примерно в том же виде, как и сейчас. Даже и сейчас в ванильном варианте игры подавляющее большинство всего задаётся чисто данными. Даже в немногих скриптовых окнах оригинала собственно скрипты носят роль чисто формальную - инициализация на основе внешних данных, т.е. вызовы парсера, т.е. в сущности ровно тоже самое, что делает внутри сам движок.

 

  Цитата

Я желаю иметь возможность скриптовыми инструментами делать с окном/контролом/статиком и проч. все, что только возможно/имеет смысл с ним вообще делать.

Для этого можно спокойно создать окно на основе xml, а потом доделать что надо скриптами.

 

  Цитата

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

Даже совсем не для того я бы сказал.

Хм. И для чего же его разработали?
  Полезный утиль (Показать)
Ссылка на комментарий
  Malandrinus писал(а):

Тогда ты сам себе противоречишь

Нет. ltx-конфиг не занимается созданием интерфейса, он просто хранит данные и все. Интерфейс рисует скрипт, читая при этом данные из конфига. Разве не могу я такой процесс называть "чисто скриптовым созданием"? Я считаю, что могу.

 

 

  Malandrinus писал(а):
Примерно до 2004 года никаких скриптов в движке не было

Я же не про историю, а про то, для чего они на самом деле нужны.

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

 

 

  Malandrinus писал(а):
Хм. И для чего же его разработали?

Для хранения массивов текстовых данных с форматированием. Теги там всякие для того же.

Вот массивы строк в папке text, в сталкере - вполне логичны и уместны, ничего не имею против.

А для описания параметров окон и элементов интерфейса гораздо лучше подходит структура "ключ = значение" т.е. ltx-конфиг. А использовать для этого xml - неудобно, не наглядно, и вообще горбато. Я догадываюсь что можно найти кучу примеров кроме сталкера, где тоже xml используют таким образом. Но это не меняет горбатости самого по себе такого решения.

 

@Сусаль,

1. Во всех профилях нпс убрать оружие из спавна (я у себя вообще весь лут оттуда убрал, он там не нужен)

2. Скриптом при создании серверного объекта нпс, выдавать ему оружие. Учитывая результаты вызова math.random, его группировку, ранг и что хотите еще.

Серверными объектами нпс занимается se_stalker.script, если что

Изменено пользователем Zander_driver
  • Нравится 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Возможно ли как-нибудь сделать чтобы в local obj = alife():object("имя_объекта") определялось сразу несколько объектов? Допусти alife():object("имя_объекта") оr alife():object("имя_объекта_2"). Ну или как-то по другому?

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

@advisor890,

for k, v in ipairs( {"имя_обжа_1", "имя_обжа_2", "имя_обжа_3"} ) do
	obj = alife():object(v)
	if obj then -- если надо выполнить одно действие для всех обжей
	-- if obj and obj:name() == "имя" then -- если надо выполнить разные действия для каждого обжа 
		-- здесь что то делаем
	end
end
Изменено пользователем Eugen81
  Показать
Ссылка на комментарий
  Zander_driver писал(а):

Интерфейс рисует скрипт, читая при этом данные из конфига. Разве не могу я такой процесс называть "чисто скриптовым созданием"? Я считаю, что могу.

 

Разумеется не можешь! Разделение кода и данных - это в первую очередь разделение труда: программиста и дизайнера. Данные редактирует дизайнер, он не программирует при этом. Скрипт же редактирует программист. Редактирование данных - это задание конечного результата. Редактирование скрипта - это изменение алгоритма достижения результата. Второе существенно сложнее первого, именно поэтому разделение данных от кода упрощает работу: написав код парсера один раз мы больше этим не занимаемся, а занимаемся только более простым описанием данных. Ты написал парсер для чего? Чтобы и со своим парсером для каждого диалога что-то писать скриптами?

 

Мне кажется, я уже повторяюсь, и даже странно, что это надо повторять. Разве это не очевидно?

 

 

  Цитата

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

 

И что? Какое это отношение имеет к окнам и диалогам? Работа с ними как была, так и осталась неизменной с тех времён, когда скриптов не было. Скрипты ввели в основном для ограничения поведения неписей, т.е. для написания/модификации поведенческих схем.

 

 

  Цитата

Для хранения массивов текстовых данных с форматированием

 

Это универсальный язык хранения любых данных в текстовом виде. Тебе видимо словосочетание "промышленный стандарт" действительно ни о чём не говорит. XML - это повсеместно используемый стандарт. Не просто в "куче мест", а вообще повсеместно. Его удобство редактирования руками вообще не при делах. В наше время никто даже не рассматривает всерьёз вопрос удобства редактирования голого текста. Причина проста - ручное редактирование текста всегда существенно медленнее визуального. Именно поэтому я считаю, что правильный путь - это не написание ещё одного парсера под другой текстовый формат, а написание инструментов визуального редактирования.

  • Нравится 1
  Полезный утиль (Показать)
Ссылка на комментарий

 

 

  Malandrinus писал(а):
... а написание инструментов визуального редактирования.

 

  Показать

 

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

@UnLoaded,

  Показать

 

  • Полезно 2
  Полезный утиль (Показать)
Ссылка на комментарий

 

 

  Malandrinus писал(а):
Разумеется не можешь!

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

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

Тогда у меня есть визуальное приложение-инструмент которое работает на основе файлов *.ortd - даже не ищите в сети что это такое) если и найдете, это не оно.

 

 

 

  Malandrinus писал(а):
Ты написал парсер для чего? Чтобы и со своим парсером для каждого диалога что-то писать скриптами?

Нет) Но, Вообще-то он предусматривает, что если надо можно и дописать какой-то код специально для какого то диалога. Не меняя при этом сам парсер, и не имея в виду те функции которые из фраз диалога вызываются.

Возможность динамической надстройки функционала так сказать.

 

 

 

  Malandrinus писал(а):
Тебе видимо словосочетание "промышленный стандарт" действительно ни о чём не говорит.

Ну почему. Очень даже говорит. но это не обязывает меня использовать этот стандарт, и не обязывает меня прекратить считать, что описание окон в xml это не удобно. А визуальный интерфейс на что угодно написать-то можно.

Честно говоря, наверно стоит удивляться что спустя столько лет, для моддинга сталкера создано так мало софта. Могло бы быть куда больше, вероятнее всего просто их авторы на публику редко выкладывают.

Сужу просто по себе - для своего же мода я же пишу визуальные инструменты, как в виде отдельных программ так и опирающиеся на внутриигровые интерфейсы и работающие на игровом движке. Просто без них не удобно работать, не говоря уж о том что порой они необходимы. Если прикинуть, по паре-тройке софтин на каждый крупный мод - сколько уже должно было получиться? :)

  • Нравится 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
  Malandrinus писал(а):
А что значит "полностью динамическим"? Ты всерьёз собираешься скриптами менять ВООБЩЕ ВСЕ параметры окна или контрола?

У меня просто была создана таблица в отдельном скрипте в древовидном виде(многовложенная) с некоторыми параметрами окон, и при открытии каждого окна скрипт считывал с таблицы с помощью циклов что закрыть, а что открыть, проходился по обёрткам и задавал необходимые параметры для каждого объекта.

Если бы смог все объекты инициализировать то так бы и оставил. Удобно ведь. Минимальные параметры добавил и готово...

Сразу не ответил, т.к. какой-то сразу негатив пошёл, мол как так-то всё в скриптах.

Изменено пользователем FonSwong
  • Согласен 1
Ссылка на комментарий

 

 

  Zander_driver писал(а):
мне как то казалось, что говоря о том "чем" мы что-то делаем, следует иметь в виду то, где реализуется алгоритм.

А какое это вообще имеет значение? Единственное, что имеет значение - сколько потратить времени и сил на достижение результата. Если гейм-дизайнер поменял только файл данных, и не заморачивался вообще на алгорититмы и программирование в целом (и даже может не умея программировать), то это хорошо. Если он при этом красиво пошевелил мышкой в визуальном интерфейсе, вместо того, чтобы руками редактировать текстовый файл - ещё лучше. Если для достижения ровно того же результата ему потребовалось программировать - это совсем плохо. Не потому плохо, что что-то из этих трёх способов "хуже", а что-то "лучше", а попросту потому, что они все почти заведомо существенно отличаются по трудозатратам. Программировать не только сложно (нужно владеть дополнительными знаниями), но и обычно не быстро. Редактировать руками текст, даже если это не требует отладки алгоритмов, всё равно требует повышенного внимания и процесс уязвим к синтаксическим ошибкам. Визуальный инструмент же, при должном развитии разумеется, обеспечивает максимальную производительность труда.

 

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

 

@FonSwong,

хотя не до конца понятно, что именно ты хочешь делать, всё равно могу посоветовать создать минимальную заготовку XML для нужных окон. Убедись, что на основе этой заготовки ты можешь создать окно нужного типа по отдельности. Просто создать, без привязки к твоей задаче. Тогда уже в свой код ты сможешь вставить эти блоки для создания нужных окон, заведомо зная, что они рабочие. Пусть там какие-то параметры надо будет переписать скриптовыми вызовами. Это не принципиально. Тебе же ехать надо, а не шашечки.

  • Нравится 2
  Полезный утиль (Показать)
Ссылка на комментарий

Так и придётся, это я уже понял.

Не понимаю чего тут спорить, разделение данных и кода можно и скриптами добиться.

А уж как удобнее скриптеру, то он и выберет.

Единственное что, используя лишь скрипты придётся обработчик делать.

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

Помогите решить ошибку:

local condition = ((((item:id() % 10) * 10)+math.random(0,10))/100) * condition_modifer 
if npc ~= nil and character_community(npc) == "zombied" then
condition = condition * zomb_mod
end

Lua Checker выдает:

 

  Показать

 

Что это значит?

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

 

 

  Scorpion_0890 писал(а):
Поставил end после return и ошибка пропала.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Всем привет. Как можно заспавнить НПС через скрипт и там же установить путь к логике(не используя all.spawn). Платформа: ТЧ. Помню где-то тут видел, но вот сейчас найти не могу. Спасибо.

Ссылка на комментарий
@TIGER_VLAD, самый простой вариант - сделать для него секцию, в ней указать "custom_data". Универсальный вариант - создать непися через alife():create() и любым, удобным для тебя, способом записать в его нетпакет нужную custom_data.
  • Спасибо 1
  • Полезно 1
Ссылка на комментарий

@dsh, 1 способ не подходит. 

  Цитата

записать в его нетпакет нужную custom_data. 

Как раз так и пробовал. Вот по этому примеру:

 

  Показать

 

Но, не работает.

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

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

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

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

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

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

Войти

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

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

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