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

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

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


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

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

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

 

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

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

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


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

@Kondr48, это же очевидно:

SetHighlightColor и SetTextColor идентичны, только аргументы принимают по разному, первый жрет GetARGB (в данном контексте совершенно не ясно зачем), а второй напрямую.

SetColor как раз красит сам статик. SetColorAll предполагалось, что должен красить и детей тоже, но не красит, так что методы тоже идентичны  :).

Оговорюсь, что я веду речь о CUIStatic.

 

Второй вопрос: кнопку достаточно скрыть, примерно так: self.btn_yes:Hide(), если хочется непременно удалить, то ее надо отцепить от парента (DetachChild), только в этом случае советую еще поглядывать за сборщиком мусора, так как может все достаточно печально закончиться, особенно если имеешь дело с каким-нибудь динамическим статик-боксом.

 

P.S. Предупрежу, что мои советы не всегда могут быть применимы для стандартных исходников, так как некоторые части у меня достаточно сильно переписаны.

 

 

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

@Kondr48, если ты хочешь изменить цвет кнопки, чтобы видно было, что она нерабочая, то достаточно сделать копку на классе CUI3tButton (если через xml, то это xml:Init3tButton) и покрасить нужным цветом текстуру *_d кнопки. А потом просто: button:Enable(false).

Окно подсказки к кнопке (hint) скриптово на чистом движке сделать не получится.

Изменено пользователем naxac
  • Спасибо 1

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

naxac.gif

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

 

 

метод называется SetColor (также SetColorAll), а не SetHighlightColor.

Говорилось о том, что видимых изменений не было. Я лишь указал на некорректное использование метода SetHighlightColor.

 

 

 

Существуют ли методы, чтобы повернуть статик на определенный угол?

Есть соседняя тема X-Ray extensions. В этом проекте был добавлен такой метод.

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

Есть таблица с кучей поршней. Как сделать выдачу поршня или что ещё, если из этой таблицы имеем более, к примеру, 20-ти поршней?

Ранее был известен под ником BoBaH_671.

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

 

BoBaH_671, не совсем понятен смысл. Вот так, например, можно выдать из таблицы рандомный поршень, которого у ГГ еще нету.


local enciclopedy_list = {

"encyclopedy_zone_artifact_af-medusa",

"encyclopedy_zone_artifact_af-cristall-flower",

...

"encyclopedy_tutorial_diary"

}

 

local flag = false

 

while flag == false do

statja_for_pda = enciclopedy_list[math.random(table.getn(enciclopedy_list))]

if not has_alife_info(statja_for_pda) then

db.actor:give_info_portion(statja_for_pda)

flag = true

end

end

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

@Kondr48, да что ж меня никто с первого раза не понимает! :)

Я ж сказал: имеем таблицу, в ней - много поршней. Как сделать проверку, что из этой таблицы мы имеем 20 поршней. ЛЮБЫХ поршней.

Ранее был известен под ником BoBaH_671.

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


local enciclopedy_list = {

"encyclopedy_zone_artifact_af-medusa",

"encyclopedy_zone_artifact_af-cristall-flower",

...

"encyclopedy_tutorial_diary"

 

local kolvo = 0


for i = 1, #enciclopedy_list, 1 do  

 if has_alife_info(enciclopedy_list) then

kolvo = kolvo + 1

 end

if kolvo >= 20 then

-- мы имеем 20 инфопоршней из списка, на радостях дадим поршень

db.actor:give_info_portion("Радостный поршень")

break

end

end

 

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

Такая проблема - нужна заселить специальными дин.аномалиями специальную локацию для мода.

Базируюсь на OGSM, начал ковырять алгоритм спавна, возник вопрос - как получают координаты x,y,z для спавна? В скриптах о них не слова!

Рандомно генерировать числа не прокатит, будет каша со спавном, да и бред это малость... Но тогда, как?

 

Открыл скрипт из simbion мода, вгляделся... Мы получаем все аномалии на уровне, и заменяем их на... Свои!?! Нет, серьезно, я заметил открытие таблицы db.anomalies и передачу координат всех аномалий в ф-ю спавна. Но блин, тут рандомность тогда только в секциях аномалий...

 

Возможно выше я и бред сказанул, но понял код - как смог.

 

Обьясните недалекому, как же идет рандомная генерация именно координат пространства, с game v. и level.v я разобрался...

 

P.S Посмотрел скрипты от dsh - там идет получение позиций НПЦ... Мда... Жду дядек, которые развеят туман...

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

Не соответствует правилам.

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

 

CRAZY_STALKER666, как вариант генерить рандомные числа в пределах локации. То есть задать некое ограничение по x, y, z. А вообще насколько я знаю в судьбе зоны можно посмотреть.

 

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

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

 

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

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

@dsh, ого,и не знал что из level v можно получить координаты!

Метода этого, к сожалению не нашел, у вас очень много функций на файлах из репозитория...

 

Для себя решил делать так(не лучший вариант, но как умею) - получаю координаты всех аномалий. К их х,у,зэд прибавляю какие нибудь числа, и спавню то что нужно. А заранее можно, расставить аномалии-точи вокруг которых будет спавн мои спец.аномалий. Как по мне - вроде не костыль получился :D

Не соответствует правилам.

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

 

 

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

Фу, это же в точности так же как в "Судьбе Зоны". А в ней, со слов вопрошающего

 

 

будет каша со спавном, да и бред это малость...

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

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

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

Всем доброго утра, у меня вопрос: каким образом в ЗП можно назначить текст кнопке с помощью скрипта? Кнопка на классе CUIButton, но для этого класса нет метода SetText.

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

Уважаемые знающие, столкнулся с такой проблемой при использовании m_netpk.

При чтении нетпакета, например, для cse_alife_inventory_item поле num_items иногда становиться равным 255, что влечет за собой чтение далее битых данных. при этом r_eof()==false, т.е. данные в пакете еще есть, но m_netpk пытается вычитать их больше, чем они там есть. сталкивался ли кто с таким? Благодарю за информацию.

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

@Winsor, а почему ты думаешь, что данные там битые? В зависимости от значения num_items наполнение нет-пакета может меняться.

Подробнее, например, здесь.

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

@Winsor, а почему ты думаешь, что данные там битые? В зависимости от значения num_items наполнение нет-пакета может меняться.

Подробнее, например, здесь.

Ну... я в курсе что наполнение может изменяться.

Пример:

cse_alife_inventory_item - 99% процентов этих итемов , которые лежат в инвентори у ГГ - имеют num_items=0. т.е. полей ph_position, ph_rotation и иже с ними не имеют. но у 1-го процента итемов из инвентори случайным образом num_items==255, , и при попытке прочитать

log("before "..prop.name.." "..prop.type)
ret.upd[prop.name] = this["_r_"..prop.type](pk, prop.ver)
log("after "..prop.name.." "..prop.type.." "..ret.upd[prop.name]) 

получаем такой лог:

m_netpk:before num_items h8

m_netpk:after num_items h8 0

m_netpk:before num_items h8

m_netpk:after num_items h8 225

m_netpk:before ph_position f32v3

 

 

в инвентари два итема одного и того же класса. отличаются визуалом и описанием. первые две строки - все хорошо. далее num_items==255 и при попытке прочитать вектор ph_position - чтение за границы нетпакета, само собой данные в этом векторе уже считать достоверными нельзя. Вот я и хочу понять - почему num_items == 255 у итема у которого он должен быть 0.

p.s. ну и у таких итемов после такого чтения r_elapsed < 0 - это ли не признак чтения за границу (elapsed=packet_size-read_position) ?

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

@Winsor, трудно сказать, я с таким не сталкивался. Собственно, в netpk до сих пор могут быть баги. Artos до момента своего исчезновения сам периодически находил в своих модулях и правил ошибки, да и последняя версия модулей, что лежит в «Сборочном цехе», тоже подверглась небольшим исправлениям по сравнению с оригиналом автора.

Не исключено, что ты столкнулся с ещё не обнаруженной до сих пор ошибкой.

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

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

 

Так вот, включив расширенный лог, последнее что увидел - это:

 

! Unknown command:  _bp:_path_parse_waypoints:_pathname='dvl_killer_sold_2_w_w'

* Log file has been saved successfully!
! Unknown command:  _bp:_path_parse_waypoints:_pathname='dvl_killer_sold_2_w_l'

 

Скидываю сам путь, ибо сам ошибок там не вижу...

 

 

[dvl_killer_sold_2_w_w]

points = p0
p0:name = wp00|a=sneak
p0:flags = 0x100000
p0:position = 13.112729072571,0.02946949005127,19.782325744629
p0:game_vertex_id = 1012
p0:level_vertex_id = 189984
 
[dvl_killer_sold_2_l_l]
points = p0
p0:name = wp00|a=sneak
p0:flags = 0x100000
p0:position = 12.578974723816,0.15864041447639,1.6857631206512
p0:game_vertex_id = 1015

p0:level_vertex_id = 189053

 

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

Не соответствует правилам.

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

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

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

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

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

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

Войти

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

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

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