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

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

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


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

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

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

 

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

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

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


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

Т.е.  для моего печального случая с ТТ2  решения нет? Оставить надежду навсегда?

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

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

Ссылка на комментарий
  aromatizer писал(а):
Оставить надежду навсегда?

Надежда умирает последней и очень мучительно.

А пока можно попробовать переписать таблицу weapon_classes_w_ammo вот в таком виде:

weapon_classes_w_ammo = {
    [clsid.wpn_ak74] = {adc = true, ex = {}},
...
    [clsid.wpn_lr300] = {adc = true, ex = {"wpn_flame",}},
...
    [clsid.wpn_svd] = {adc = true, ex = {"wpn_gravigun",}},
...
    [clsid.wpn_binocular] = {adc = false, ex = {}}, 
...
}

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

Как это сделать? это уже другой вопрос и не очень сложный.

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

weapon_classes_w_ammo = { 
[clsid.wpn_ak74] = {},
 ... 
[clsid.wpn_lr300] = {"wpn_flame",},
 ...
}
Изменено пользователем Serge!
  • Полезно 1
Ссылка на комментарий

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

  Показать

 

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

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

@Romann, что касается вылета, судя по логу, таблица quest_npc пуста. Я оставил её в примере пустой:

local quest_npc = {}

В неё нужно занести квестовых персонажей, по именам, примерно так:

local quest_npc = {
"esc_wolf",
"esc_fox"}

В этом случае будут обработаны все сталкеры, за исключением Волка и Лиса.

 

 

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

 

 

  aromatizer писал(а):
Я всегда знал что варианты решения есть всегда и их больше, чем один

Зачем тогда такие странные вопросы задавать.

 

 

  aromatizer писал(а):
Т.е. для моего печального случая с ТТ2 решения нет?

вариантов решения всегда и везде - что-то около бесконечности. Иногда в степени бесконечность. Крайне редко бывает как-то иначе, и то чаще всего из-за неправильной постановки условий задачи.

  • Согласен 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.

Ссылка на комментарий
  =VENOM= писал(а):
судя по логу, таблица quest_npc пуста

Ну естественно она не была пуста :facepalm: , вот так было:

 

  Показать

 

Изменено пользователем Romann
  • Не согласен 1
  железо (Показать)
Ссылка на комментарий

А dsh на предыдущей странице писал что таблицы надо заполнять вот так:

local quest_nps = {
["esc_wolf" ] = true,

["esc_fox" ] = true,

["esc_shustryi" ] = true

}

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

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

Ой, какая большая таблица. Я бы посоветовал, для определения квестового персонажа, в первую очередь проверять наличие story_id, и только потом, если его нету, смотреть в таблицу. Это позволит уменьшить эту таблицу, если не избавиться от нее совсем. Всё-таки, наличие story_id с большой вероятностью будет означать, что этот персонаж квестовый. Обратное не верно.

Ссылка на комментарий
  aromatizer писал(а):
А dsh на предыдущей странице писал что таблицы надо заполнять вот так:

Это тоже самое, только вид сбоку. В последнем случае мы имеем массив,  а в первом - таблицу значений. Таблица в данном случае избыточна, т.е. просто зря тратится память.

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

Для того чтобы определить есть ли значение в массиве его в худшем случае нужно полностью перебрать (сложность O(n)), а в случае хеша алгоритмическая сложность точно ниже (скорее всего что то типа O(logn), но я точно не знаю, зависит от реализации, сужу по тому как это сделано в других языках/системах. Есть базы данных где доступ осуществляется вообще за константу)

Freedom

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

@Romann, смайлик, конечно, забавный, но я его, пожалуй, вам обратно переадресую. И вот почему. Вы не думали, что имя объявляемой таблицы и имя таблицы в коде - при обращении к ней - должны совпадать? Проверьте:

У меня в коде

  Цитата
quest_npC

 

У вас

  Цитата
local quest_npS

 

Только что откатал вашу таблицу (с исправленным именем) на чистом ТЧ1.0004 - всё работает совершенно спокойно, без вылетов.

 

 

 

  • Нравится 2
Ссылка на комментарий

 

 

  _Призрак_ писал(а):
зависит от реализации, сужу по тому как это сделано в других языках/системах
В общем случае это так и есть. Однако в Lua, изначально ориентированном на обработку массивов, внутренняя организация очень быстрая и при таких мизерных размерах этих структур в Сталкере разницы практически не будет. К тому же алгоритм реализации цикла for в Lua один из самых быстрых и оптимальных. Так что кодовая оптимизация становится определяющей. ИМХО.
Ссылка на комментарий

 

 

  dsh писал(а):
Всё-таки, наличие story_id с большой вероятностью будет означать, что этот персонаж квестовый. Обратное не верно.

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

  • Нравится 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.

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

 

 

  =VENOM= писал(а):
при обращении к ней - должны совпадать? Проверьте

Извиняюсь за не внимательность.

 

 

  =VENOM= писал(а):
всё работает совершенно спокойно, без вылетов.

Вылета нет, но не работает, т.е. схема совсем не срабатывает, на всех нпс. Вот полностью эта функция:

 

  Показать

 

 

Как видно, ваш код на 522 строчке, все "end" пришлось перенести в конец общей функции(на 562 строчку), иначе синтаксическая ошибка. Вот в таком виде функция/схема совсем не работает. Каким образом её тогда реализовать?

  железо (Показать)
Ссылка на комментарий
  Romann писал(а):
if not quest_npc[obj:name()]

 

Как минимум не нужно делать так, а нужно делать

if not quest_npc[obj:section_name()]

Это первое, что в глаза бросается. А вообще, что-то я не въезжаю, а зачем перебираются все объекты игрового мира? Что это вообще делает-то?

 

Мутный какой-то скрипт.

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

Да уж... привёл я перебор всего и вся в игре (с показательным исключением из обработки пары NPC по имени) просто в качестве примера, а его (пример) зачем-то запихнули в свой скрипт...

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

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

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

Регулярное сканирование всех объектов в в игре, а потом проверка по длинным спискам (хорошо если не if ... then r = true end if ... then r = true end ... if r == true then return true) - это, во-первых, по тому что в игре должно быть не легко и не радостно , во-вторых, здесь так принято, а в-третьих, сам Великий {Ненужное Вписать} так сделал, так что Не Сметь Покушаться На Святое !

 

Хотя, да, sidы с самого начала были придуманы для квестовых объектов, и по ним все проверяется.

 

Что до мегатаблиц с id, которые регулярно слетают - то такие таблицы должны заполняться/изменяться ТОЛЬКО через se_чего-то_там.on_register()/on_unregister().

 

P.S. А вот под сами таблицы отдельный файл выделить, чтобы перестать уже адову акробатику с

script1.var1 = script2.var1

script2.var1 = script1.var1

и вариантами оной о 100500 перекрестных ссылок.

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

 

 

  Dennis_Chikin писал(а):
А вот под сами таблицы отдельный файл выделить, чтобы перестать уже адову акробатику

Вот по поводу таблиц - кто может объяснить подробно, как использовать этот способ? Как я понял, не будет надобности в скриптах городить таблицы, а составлять их в конфигах в 'all_sections.ltx'..? 

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

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

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

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

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

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

Войти

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

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

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