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

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

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


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

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

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

 

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

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

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


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
  Winsor писал(а):
необходимо получить доступ к полю my_field биндера.
local obj_bind = obj:binded_object() -- здесь obj - клиентский объект
if obj_bind then
.... obj_bind.my_field -- получаем нужные данные --
.... obj_bind:get_params() -- вариант с ф-цией --
end

Точно не помню, но если напрямую не будет доступа к my_field, то добавь в нужном биндере ф-цию получения параметров:

function my_binder:get_params()
local ret_value = self.my_field
return ret_value
end
Изменено пользователем UnLoaded
  • Спасибо 1
Ссылка на комментарий

Ребят, привет.

Нуждаюсь в небольшой помощи.

Кто знает- ответьте, будьте добры.

Есть нужда в одной функции, которая при помощи math.random-а перебирает тайники стандартные(забитые в список переменной) и выдаёт при активации в диалоге.

Пример:

Есть у нас повторяющийся диалог, наподобие "что знаешь нового?"

При окончании диалога нужно выдать тайник. Но, чтобы каждый раз не один и тот же, а разные.

SHoC

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

@Dniwe

local t = {1,2,3,4,5,6,7,8,9,10}
local t_used = 0

function get_my_rnd(tab)
    local t_len = #tab
    t_used = (t_used == t_len and 1) or (t_used + 1)
    local index = math.random(t_used, t_len)
    local value = tab[index]
    tab[t_used], tab[index] = value, tab[t_used]
    return value
end

get_my_rnd(t)
...

Вместо

local t = {1,2,3,4,5,6,7,8,9,10}

твой массив.

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

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

 

В общем, есть скрипт который позволяет в игре видеть аи-сетку. Принцип такой: если актор движется, скрипт бездействует, если актор неподвижен, начинается сканирование аи-сетки. На апдейтах вызываемых раз в 100 мс, функция scanning порциями перебирает вертексы аи-сетки, выясняя их позицию и расстояние от актора. размер порций с помощью profile_timer подбирается так чтобы забирать не более 50% процессорного времени, потребляемого игрой.

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

 

  скрипт сканирования аи-сетки (Показать)
Изменено пользователем Zander_driver
  • Спасибо 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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 писал(а):
Печально что тут так "активно" помогают... уже сам разобрался.
  оффтоп (Показать)
Ссылка на комментарий

@Zander_driver, твои претензии совершенно не уместны :facepalm: , к примеру я вообще поста не видел. Сам разобрался - молодец, но все же подскажу свой вариант:

                local vdis = actor_position:distance_to(vpos)
			local function check()
			local function in_f( v1, v2 )
				return  (math.acos((v1.x*v2.x + v1.y*v2.y + v1.z*v2.z)/(math.sqrt(v1.x*v1.x + v1.y*v1.y + v1.z*v1.z )*math.sqrt(v2.x*v2.x + v2.y*v2.y + v2.z*v2.z)))*57.2957)
			end
			local yaw = in_f(device().cam_dir, vpos:sub(db.actor:position()))
			return yaw < 35
			end
                if vdis < scan_distance and check() then
                    table.insert(vertex_bufer, {current_vertex, vpos})
                end

С таким отношением отпадает всякое желание вести сотрудничество.

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

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

 

  Сталкер-Стрелок (Показать)

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

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

@Outfater, твой вопрос некорректен, советую почитать что-нибудь по рестрикторам, конкретно обрати внимание на обработку конфига логики, я думаю вопрос разрешится.

 

@Zander_driver, в параллельной теме как-раз это обсудили вот только что, по-моему даже с готовым примером. Общно, нужно полю fixed_bones присвоить основную кость и записать кастом дату, что-бы не шумело.

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

Столкнулся тут с одной интересной бякой, и возник вопрос а как ее избежать по-хорошему.

Суть проблемы: есть у нас некий игровой объект, у него в конфиге написано script_binding = какой_то_скрипт.какой_то_биндер,

а в файле какой_то_скрипт допустим затесалась синтаксическая ошибка. или в конфиге опечатка и имя файла написано неправильно, или вообще нету такого файла.

короче какой_то_скрипт = nil, а наш объект хочет себе биндер из этого скрипта. И что же происходит? А ничего. Игра идет себе спокойно дальше, а объект который должен биндиться, вовсе этого не делает, не получает никаких колбеков и соответственно они не вызываются, и т.д...

Ситуация противная прежде всего тем что нету никакой информации от движка, о том что что-то не так.

 

По поводу того как этого избежать, у меня пока единственная пришедшая в голову мысль - перебирать 65к объектов, брать их секцию, смотреть есть ли в ней ключ script_binding, и если есть то проверять а видит ли игра требуемый скрипт. и если не видит то вылетать с воплями на рабочий стол. а проверку эту запускать где-нибудь при переходе из одной локации в другую, чтоб не накладно было. Онлайновые объекты нам все равно для этой проверки не требуются.

Но может есть другие варианты?

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

На мой взгляд: а стоит-ли городить такие огороды, вместо того, чтоб проверить один раз всё при тестировании мода\внесении правок, и как говорится "спать спокойно" ?

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

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

@Zander_driver, если речь только о проверке биндера, то ты же сам что-то такое изобретал, можно заваливать игру если объект биндера не подает признаков жизни. Вставь abort куда нужно (например можешь в ините ставить булево поле о инициировании, и если его нет заваливать игру), и в целом будет решено. Если цель выявить некорректные скрипты как файлы с различными модулями, то есть хороший вариант с песочницей на мотив ЗП, который не пропускает таких инвалидов. Если хочется перебирать, разумно будет составить таблицу биндеров и итерироваться по ней, там объектов будет наверняка меньше 65т.

Ссылка на комментарий
  Сталкер-Стрелок писал(а):
если речь только о проверке биндера, то ты же сам что-то такое изобретал, можно заваливать игру если объект биндера не подает признаков жизни.

В том, что я изобретал, биндер при создании регистрируется в системе мониторинга. при создании. Если он не создается - ничего не происходит.

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

 

  Сталкер-Стрелок писал(а):
в ините ставить булево поле о инициировании

у нас сам файл = nil. не будет никакого инита.

 

 

  Сталкер-Стрелок писал(а):
то есть хороший вариант с песочницей на мотив ЗП

а поподробнее, в чем принцип?

 

 

  Сталкер-Стрелок писал(а):
Если хочется перебирать, разумно будет составить таблицу биндеров

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

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

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

Ты меня не понял. Флаг добавляешь в инит биндера, если он появляется у объекта - биндер существует, нет - валишь игру. Я не об объекте биндера.

 

 

  Zander_driver писал(а):
а поподробнее, в чем принцип?

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

 

 

  Zander_driver писал(а):
а на основе чего ее составить?

Очевидно на основе твоих биндеров, биндер выступает, к примеру, значением таблицы, ты проверяешь не только сам файл на nil, но сразу и биндер. Проверяешь не на объекте, а обычным луа, на как-раз таки ошибки этого синтаксиса, т.е. опуская саму функцию биндинга. Надеюсь понятно объяснил.

 

Извини, ухожу.

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

class CUIScriptWnd - Не могу сдвинуть окно вправо

self:SetWndRect(Frect():set(0,0,420,530)) - работает
self:SetWndRect(Frect():set(200,0,420,530)) - уже не работает

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

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

ХМЛ - просто россыпь в пределах "старых" координат, без фреймов и наложений. В скрипте ничего не аттачилось.
В моём понимании CUIScriptWnd главный в связке, а CScriptXmlInit драйвер-исполнитель, я дал команду главному и мимо.
Явно что-то упустил из вида, что ?

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

Знающие, подскажите: возможно ли скриптом вывести message_box с кнопками? И какую функцию пользовать: AddCustomStatic? Или какую другую?

Сталкер - наше всё!

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

 

 

  AndrewMor писал(а):
возможно ли скриптом вывести message_box с кнопками?

Тебе в сторону CUIMessageBoxEx, в "Справочнике по ф-циям и классам" есть.

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

@Simonov50,

Frect():set(x1, y1, x2, y2) - первые две - координаты верхнего левого угла, третья и четвёртая - нижнего правого. Вроде, так.

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

naxac.gif

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

Загляни пожалуйста в личную переписку.

Сергей.

  28.06.2015 в 17:17, naxac сказал:

@Simonov50,

Frect():set(x1, y1, x2, y2) - первые две - координаты верхнего левого угла, третья и четвёртая - нижнего правого. Вроде, так.

Во первых не так,    а главное -  где ответ на  вопрос ?  

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

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

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

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

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

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

Войти

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

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

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