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

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

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


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

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

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

 

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

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

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


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

@TIGER_VLAD,

Да там всё просто.

На родительское окно лепишь статик с фоном бара (напр. красный) и задаешь ему позицию "Х" равную -(минус)ширина_бара

Т.е. изначально оно скрыто (скажем). По мере надобности меняем "Х" и двигаем этот дочерний статик относительно родительского так как нужно. То что выходит за пределы родителя видно не будет, а то что будет видно на родителе, то и будет тебе прогресс баром

Ссылка на комментарий
  Карлан писал(а):
прогресс-бар в ТЧ работает, конкретно вопрошающему необходим SetWndPos

Ну наверное ему нужно все-же SetProgressPos, если разговор о прогресс-баре.

 

  TIGER_VLAD писал(а):
Можно пример кода?

Ну примерно так:

local inv_main = level:main_input_receiver()
if inv_main then
     local inv_xml = CScriptXmlInit()
     inv_xml:ParseFile("какой-то_файл.xml") -- парсим файл с описанием элементов --
     local pb_new = inv_xml:InitProgressBar("конкретный_элемент", inv_main)
     pb_new:SetAutoDelete(true)
     pb_new:Show(true)
end

затем

pb_new:SetProgressPos(нужное значение)

какой-то_файл.xml создать по аналогии с другими в папке config\ui. Для прогресс-бара описание будет как-то так:

<конкретный_элемент x="445" y="349" width="140" height="4" horz="1" min="0" max="100" pos="0">
     <progress> <texture a="255" r="255" g="255" b="255">ui_scale_green_sect_horz</texture> </progress>
     <background> <texture a="80" r="255" g="255" b="255">ui_scale_green_sect_horz</texture> </background>
</конкретный_элемент>
Изменено пользователем UnLoaded
  • Спасибо 1
Ссылка на комментарий

 

 

  UnLoaded писал(а):
Ну наверное ему нужно все-же SetProgressPos, если разговор о прогресс-баре.

Да, разумеется, я почему-то написал иное, причем дважды, хотя имел ввиду именно SetProgressPos. Сюда же GetProgress, впрочем не так важно, я доносил иную мысль, остальное все видно из сигнатуры класса.

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

level.vertex_position(number) не подойдет?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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 писал(а):
level.vertex_position(number) не подойдет?

слишком мало на уровне, тот же кордон 200 с чем-то всего-лишь, подумал по нодам (аи сетки) спавнить, но тут мне сказали:

  Цитата
В моде ПТО мы ещё 1,5 года назад сделали спавн аномалий по рандомным координатам локации и ни к каким нодам не привязывались. Причём во время выброса одни аномалии рассасывались, а после окончания выброса другие спавнились рандомно по новым координатам. Аномалии вообще к нодам ( к АИ-сетке ) не привязаны никак.

 буду ковырять Припять Точку Отчёта, забью на ноды пока что...

 

Если есть более конкретные подсказки, буду рад

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

@FonSwong, возьми исходники, там есть доступ к левел графу, у которого в свойствах есть количество вертексов (нод), отсюда без всяких сторонних функций в одну строку ты можешь взять рандомный вертекс с уровня.

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

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

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

@Карлан, Собственно я так и делал, по вертексам

  Код: (Показать)
Изменено пользователем Eugen81
Добавлено Eugen81,

Ты уверен, что таблицу в 10000 строк надо было выкладывать сюда под спойлер? Больше так не делай.

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

Левел и гейм вертиксы всех локаций

Это не все доступные левел-вертексы. Как ты их считал? По граф-поинтам (гейм-вертексам)? Так вот, это только вертексы граф-поинтов. Берешь самый большой из них для нужной локации, потом через math.random(1, <самый большой вертекс>) получаешь случайный вертекс, затем через level.vertex_position получаешь его координаты, а потом ищешь ближайший к этим координатам гейм-вертекс. Посмотри скрипты спавна динамических аномалий из того же АМК. Изменено пользователем naxac
  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

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

Ещё вопрос, когда спавним, то указываем level vertex и game vertex, за что конкретно они отвечают? Если мы указываем позицию, то можно любой левел и гейм вертекс левела указать? :huh:

Изменено пользователем FonSwong
Ссылка на комментарий
  FonSwong писал(а):

Если мы указываем позицию, то можно любой левел и гейм вертекс левела указать?

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

  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

 

 

  FonSwong писал(а):
Если мы указываем позицию, то можно любой левел и гейм вертекс левела указать?

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

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

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

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

 

  FonSwong писал(а):

Собственно я так и делал, по вертексам

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

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

 

 

  Карлан писал(а):
Еще так же советую обратить внимание на возможность управления "включенности" гейм вертекса, вы попросту можете отключить не тот вертекс, и это будет ошибкой.

Вот это не понял напрочь: что означает "включенность" гейм-вертекса ? Хочу подробнее  :rolleyes: . Так-же - что такое вершины ? Другое название гейм-вертекса ? Почему ?

Ссылка на комментарий
  20.10.2016 в 16:27, UnLoaded сказал:

Вот это не понял напрочь: что означает "включенность" гейм-вертекса ?

Скорей всего имеется ввиду следующий код из bind_physic_object.script:

game_graph():accessible(self.disable_graph_point, false)
Можно отключить вершину и НПЦ будут обходить все аи-ноды, которые соотвествуют этому геймвертексу.

Этакая эмуляция закрытых дверей для НПЦ :)

 

Вершина - русское слово, вертекс - калька с английской. Обозначают одно и тоже.

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

Ну в общем я переписал и сделал как-то вот так, вроде работает:

 

  Показать

 

Может чего лишнего намудрил? :D

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

Есть функция проверки близости ГГ к аномалии.

function anomaly_prec:update()
local distance = self.object :position():distance_to(db.actor :position())
if distance < 10 then
"Действие выполняется если игрок подойдет к аномалии на расстояние меньше 10 метров"
end
end

Проблема в том что мне нужно чтобы действие выполнялось когда ГГ подходит к аномалии на определенное расстояние. Допустим действие будет выполнятся если игрок подходит к аномалии на расстояние 10 метров. Не больше не меньше. Именно конкретное число.

If distance == не предлагать. Если так поставить, то действие выполнятся не будет.

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

 

 

  advisor890 писал(а):
If distance == не предлагать. Если так поставить, то действие выполнятся не будет.

С чего бы это ?

Если у тебя в кармане 10руб(монетой) - то условие "if в_кармане == 10 then" не должно выполняться ?

Ищи ошибку у себя в проверках\условиях, причем достаточно тупую(это без оскорблений, просто так оно и есть)...

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

то условие "if в_кармане == 10 then" не должно выполняться ?

Конкретно здесь оно выполнятся не будет. Это очевидно. Ошибки здесь нет, здесь есть не понимание принципов работы с подобными величинами.

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

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

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

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

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

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

Войти

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

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

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