Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий
Карлан 1 049 Опубликовано 17 Июля 2016 Поделиться Опубликовано 17 Июля 2016 @Kondr48, это же очевидно: SetHighlightColor и SetTextColor идентичны, только аргументы принимают по разному, первый жрет GetARGB (в данном контексте совершенно не ясно зачем), а второй напрямую. SetColor как раз красит сам статик. SetColorAll предполагалось, что должен красить и детей тоже, но не красит, так что методы тоже идентичны . Оговорюсь, что я веду речь о CUIStatic. Второй вопрос: кнопку достаточно скрыть, примерно так: self.btn_yes:Hide(), если хочется непременно удалить, то ее надо отцепить от парента (DetachChild), только в этом случае советую еще поглядывать за сборщиком мусора, так как может все достаточно печально закончиться, особенно если имеешь дело с каким-нибудь динамическим статик-боксом. P.S. Предупрежу, что мои советы не всегда могут быть применимы для стандартных исходников, так как некоторые части у меня достаточно сильно переписаны. 1 Ссылка на комментарий
naxac 2 477 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 (изменено) @Kondr48, если ты хочешь изменить цвет кнопки, чтобы видно было, что она нерабочая, то достаточно сделать копку на классе CUI3tButton (если через xml, то это xml:Init3tButton) и покрасить нужным цветом текстуру *_d кнопки. А потом просто: button:Enable(false). Окно подсказки к кнопке (hint) скриптово на чистом движке сделать не получится. Изменено 18 Июля 2016 пользователем naxac 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
SkyLoader 53 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 метод называется SetColor (также SetColorAll), а не SetHighlightColor. Говорилось о том, что видимых изменений не было. Я лишь указал на некорректное использование метода SetHighlightColor. Существуют ли методы, чтобы повернуть статик на определенный угол? Есть соседняя тема X-Ray extensions. В этом проекте был добавлен такой метод. Ссылка на комментарий
Overfirst 637 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 Есть таблица с кучей поршней. Как сделать выдачу поршня или что ещё, если из этой таблицы имеем более, к примеру, 20-ти поршней? Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Kondr48 314 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 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 Ссылка на комментарий
Overfirst 637 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 @Kondr48, да что ж меня никто с первого раза не понимает! Я ж сказал: имеем таблицу, в ней - много поршней. Как сделать проверку, что из этой таблицы мы имеем 20 поршней. ЛЮБЫХ поршней. Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Kondr48 314 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 (изменено) 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 Изменено 18 Июля 2016 пользователем Kondr48 2 1 Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 (изменено) Такая проблема - нужна заселить специальными дин.аномалиями специальную локацию для мода. Базируюсь на OGSM, начал ковырять алгоритм спавна, возник вопрос - как получают координаты x,y,z для спавна? В скриптах о них не слова! Рандомно генерировать числа не прокатит, будет каша со спавном, да и бред это малость... Но тогда, как? Открыл скрипт из simbion мода, вгляделся... Мы получаем все аномалии на уровне, и заменяем их на... Свои!?! Нет, серьезно, я заметил открытие таблицы db.anomalies и передачу координат всех аномалий в ф-ю спавна. Но блин, тут рандомность тогда только в секциях аномалий... Возможно выше я и бред сказанул, но понял код - как смог. Обьясните недалекому, как же идет рандомная генерация именно координат пространства, с game v. и level.v я разобрался... P.S Посмотрел скрипты от dsh - там идет получение позиций НПЦ... Мда... Жду дядек, которые развеят туман... Изменено 18 Июля 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Ссылка на комментарий
Kondr48 314 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 CRAZY_STALKER666, как вариант генерить рандомные числа в пределах локации. То есть задать некое ограничение по x, y, z. А вообще насколько я знаю в судьбе зоны можно посмотреть. 1 Ссылка на комментарий
dsh 3 824 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 (изменено) гы, позиции нпс... Позиции нпс там используются, что бы не генерировать на их месте аномалии. @CRAZY_STALKER666, выбираешь случайный левел вертекс. У него, соотв. методом, можно получить позицию, т.е. те самые координаты. Потом методом подбора находишь ближайший гейм вертекс. В процессе всего этого производишь проверки на неподходящие позиции/вертексы и игнорируешь их. И так до тех пор, пока не получится то, что можно использовать. Изменено 18 Июля 2016 пользователем dsh 1 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 18 Июля 2016 Поделиться Опубликовано 18 Июля 2016 @dsh, ого,и не знал что из level v можно получить координаты! Метода этого, к сожалению не нашел, у вас очень много функций на файлах из репозитория... Для себя решил делать так(не лучший вариант, но как умею) - получаю координаты всех аномалий. К их х,у,зэд прибавляю какие нибудь числа, и спавню то что нужно. А заранее можно, расставить аномалии-точи вокруг которых будет спавн мои спец.аномалий. Как по мне - вроде не костыль получился Не соответствует правилам. Ссылка на комментарий
naxac 2 477 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 @CRAZY_STALKER666, позиция вертекса на текущем уровне: level.vertex_position(int <level_vertex>) Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Zander_driver 10 343 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 выбираешь случайный левел вертекс. У него, соотв. методом, можно получить позицию, т.е. те самые координаты. Потом методом подбора находишь ближайший гейм вертекс Фу, это же в точности так же как в "Судьбе Зоны". А в ней, со слов вопрошающего будет каша со спавном, да и бред это малость... Не, в данном случае не годится. Надо все горбато, топорно и костыльно сделать. 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. Ссылка на комментарий
Sla-Sla 43 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 Всем доброго утра, у меня вопрос: каким образом в ЗП можно назначить текст кнопке с помощью скрипта? Кнопка на классе CUIButton, но для этого класса нет метода SetText. Ссылка на комментарий
Winsor 178 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 Уважаемые знающие, столкнулся с такой проблемой при использовании m_netpk. При чтении нетпакета, например, для cse_alife_inventory_item поле num_items иногда становиться равным 255, что влечет за собой чтение далее битых данных. при этом r_eof()==false, т.е. данные в пакете еще есть, но m_netpk пытается вычитать их больше, чем они там есть. сталкивался ли кто с таким? Благодарю за информацию. Ссылка на комментарий
naxac 2 477 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 каким образом в ЗП можно назначить текст кнопке с помощью скрипта? button:TextControl():SetText("text") 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Kirgudu 1 264 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 @Winsor, а почему ты думаешь, что данные там битые? В зависимости от значения num_items наполнение нет-пакета может меняться. Подробнее, например, здесь. Инструмент Ссылка на комментарий
Winsor 178 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 (изменено) @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) ? Изменено 19 Июля 2016 пользователем Winsor Ссылка на комментарий
Kirgudu 1 264 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 @Winsor, трудно сказать, я с таким не сталкивался. Собственно, в netpk до сих пор могут быть баги. Artos до момента своего исчезновения сам периодически находил в своих модулях и правил ошибки, да и последняя версия модулей, что лежит в «Сборочном цехе», тоже подверглась небольшим исправлениям по сравнению с оригиналом автора. Не исключено, что ты столкнулся с ещё не обнаруженной до сих пор ошибкой. Инструмент Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 (изменено) Такая проблема - вылетает без лога при переходе на новую секцию 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 Изменено 19 Июля 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти