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 Ссылка на комментарий
naxac 2571 Опубликовано 29 Мая 2019 Поделиться Опубликовано 29 Мая 2019 Привет. Товарищи, кто пробовал вывести CUIScrollView одними скриптами без xml в ТЧ? Может, у кого вышло? Ссылка на комментарий
AndreySol 215 Опубликовано 29 Мая 2019 Поделиться Опубликовано 29 Мая 2019 3 часа назад, naxac сказал: CUIScrollView одними скриптами Ну, судя по набору экспортированных ф-ций, всего достаточно для создания скриптами этого контрола. В чем проблема ? Ссылка на комментарий
naxac 2571 Опубликовано 29 Мая 2019 Поделиться Опубликовано 29 Мая 2019 @AndreySol, проблема в том, что при AddWindow в такой скролл весь гуй виснет. Можешь привести рабочий пример, может, я что-то не так делаю? Ссылка на комментарий
lordmuzer 743 Опубликовано 29 Мая 2019 Поделиться Опубликовано 29 Мая 2019 @naxac попробуй вместо AddWindow делать AttachChild Ссылка на комментарий
naxac 2571 Опубликовано 29 Мая 2019 Поделиться Опубликовано 29 Мая 2019 @lordmuzer, нет, тогда окно не добавится в скроллбар, а просто статически приаттачится к контролу, т.е. прокрутить его нельзя будет. Ссылка на комментарий
lordmuzer 743 Опубликовано 29 Мая 2019 Поделиться Опубликовано 29 Мая 2019 (изменено) Точно, туплю. Как раз для CUIScrollView нужно делать AddWindow А как именно виснет ? Высота есть у всех UI элементов ? И работает ли если CUIScrollView инитить из xml в таком случае. Изменено 29 Мая 2019 пользователем lordmuzer Ссылка на комментарий
naxac 2571 Опубликовано 29 Мая 2019 Поделиться Опубликовано 29 Мая 2019 @lordmuzer, если делать с xml, то всё работает, да. Виснет на том месте, где делаю AddWindow (list, true), по-тихому, без вылета, просто окно не показывается совсем. Ссылка на комментарий
Norman Eisenherz 354 Опубликовано 29 Мая 2019 Поделиться Опубликовано 29 Мая 2019 Тот же вопрос по счетчику хилок… Потестил оригинальный мод – после 3-й или 4-й загрузки (не важно, один сейв или разные) случается безлоговый вылет. Судя по результатам частичного исключения кода, ошибка все-таки не в таблице, а в выводе статиков. Знаю, что мод написан еще под ТЧ 1.0004 – может, с тех пор что-то поменялось в способе вывода? В текущей версии (Steam 1.0006) повыключал все скриптовые моды, и все равно вылет после нескольких загрузок. Кто-нибудь, попробуйте повесить у себя на апдейт оригинальный мод (hud_med) – случается ли вылет? Ссылка на комментарий
lordmuzer 743 Опубликовано 30 Мая 2019 Поделиться Опубликовано 30 Мая 2019 @naxac если есть возможность - скинь скрипты. Аж интересно стало. У меня в скриптах есть AddWindow - ничего не зависает. Ссылка на комментарий
AndreySol 215 Опубликовано 31 Мая 2019 Поделиться Опубликовано 31 Мая 2019 @naxac Если еще интересно, насчет CUIScrollView, то глянул я в исходники: при скриптовом создании конторла не вызывается метод Init. Соответственно, имеем зависание\вылет при вызове AddWindow. 1 Ссылка на комментарий
Norman Eisenherz 354 Опубликовано 4 Июня 2019 Поделиться Опубликовано 4 Июня 2019 (изменено) Здрасьте. Можно ли проверить наличие открытых диалоговых окон без перебора инфо-поршней ui_…? Видел упоминания о функции level.main_input_receiver, но где бы найти пример ее использования (кроме закрытия текущего окна через GetHolder():start_stop_menu)? Может, просто есть какая-то проверка на отображение HUD? Изменено 4 Июня 2019 пользователем Norman Eisenherz Ссылка на комментарий
naxac 2571 Опубликовано 5 Июня 2019 Поделиться Опубликовано 5 Июня 2019 @Norman Eisenherz, проверка того, что все движковые окна закрыты: if level.main_input_receiver() == nil then Цитата проверка на отображение HUD? В X-Ray Extensions для этого есть функция level.has_indicators(). В обычной ТЧ вроде никак не проверить. 1 Ссылка на комментарий
AndrewMor 533 Опубликовано 6 Июня 2019 Поделиться Опубликовано 6 Июня 2019 (изменено) Всем привет, возник вопрос. Спавню скриптово аномалии (всякие Жарки, Электры и прочие). Код спавна: Скрытый текст local obj = alife():create(section, pos, lv, gv) local rad_new_anom = math.random(2,4) create_anom(obj, rad_new_anom, "anom_on) function create_anom(p_obj, rad_anom, mode) local packet = net_packet() p_obj:STATE_Write(packet) local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_u32 = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local cse_alife_object__unk3_u32 = packet:r_s32() local shape_count = packet:r_u8() for i=1,shape_count do local shape_type = packet:r_u8() if shape_type == 0 then local center = packet:r_vec3() local radius = packet:r_float() else local box = packet:r_matrix() end end local restrictor_type = packet:r_u8() local cse_alife_custom_zone__unk1_f32 = packet:r_float() local cse_alife_custom_zone__unk2_u32 = packet:ru8( _s32() local on_off_mode_enabled_time = packet:r_s32() local on_off_mode_disabled_time = packet:r_s32() local on_off_mode_shift_time = packet:r_s32() local offline_interactive_radius = packet:r_float() local artefact_spawn_places_count = packet:r_u16() local cse_alife_anomalous_zone__unk1_u32 = packet:r_s32() local last_spawn_time_present = packet:r_u8() if packet:r_elapsed() ~= 0 then abort("left=%d", packet:r_elapsed()) end packet:w_u16(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_u32) packet:w_s32(level_vertex_id) packet:w_s32(object_flags) if mode~=nil then custom_data = mode end packet:w_stringZ(custom_data) packet:w_s32(story_id) packet:w_s32(cse_alife_object__unk3_u32) packet:w_u8(1) packet:w_u8(0) local sphere_center = vector() sphere_center:set(0, 0, 0) packet:w_vec3(sphere_center) radius = rad_anom packet:w_float(radius) packet:w_u8(restrictor_type) packet:w_float(cse_alife_custom_zone__unk1_f32) cse_alife_custom_zone__unk2_u32 = bit_not(0) packet:w_s32(cse_alife_custom_zone__unk2_u32) packet:w_s32(on_off_mode_enabled_time) packet:w_s32(on_off_mode_disabled_time) packet:w_s32(on_off_mode_shift_time) packet:w_float(offline_interactive_radius) packet:w_u16(artefact_spawn_places_count) packet:w_s32(cse_alife_anomalous_zone__unk1_u32) packet:w_u8(last_spawn_time_present) p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) return p_obj end Все прекрасно спавнится ( в данном случае в Предбаннике). Но когда дело доходит до радиации, начинается фигня. Радиация спавнится, но почему-то не в Предбаннике, а где-то между Кордоном и Болотами. См. скрин Вот в чем здесь причина? Или Радиацию надо как-то по-другому спавнить? upd: пробовал спавнить аномалии на Свалке - все то же самое. Аномалии спавнятся на Свалке, радиация - между Кордоном и Болотами. Изменено 6 Июня 2019 пользователем AndrewMor Ссылка на комментарий
temass 0 Опубликовано 6 Июня 2019 Поделиться Опубликовано 6 Июня 2019 Приветствую всех! Подскажите пожалуйста, как заспавнить чего либо(бочки, мутни, нпс) вокруг ГГ, в радиусе ну скажем 10м.? Ссылка на комментарий
Space.Marine 466 Опубликовано 6 Июня 2019 Поделиться Опубликовано 6 Июня 2019 4 часа назад, temass сказал: как заспавнить чего либо(бочки, мутни, нпс) вокруг ГГ Повелитель Зоны от Shoker-а. Ссылка на комментарий
naxac 2571 Опубликовано 7 Июня 2019 Поделиться Опубликовано 7 Июня 2019 (изменено) @AndrewMor, радиоактивные зоны относятся к классу cse_alife_anomalous_zone, а разные жарки, электры, воронки и т.д. - это se_zone_anom. Пакеты, соответственно, немного отличаются, у радиации нет последнего поля, которое у тебя зовётся last_spawn_time_present. Может, дело в этом? Поставь проверку перед чтением/записью local last_spawn_time_present if not packet:r_eof() then last_spawn_time_present = packet:r_u8() end ... if last_spawn_time_present then packet:w_u8(last_spawn_time_present) end А ещё вот перед этим p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) Нужно сначала поставить чтение пакета на начало: packet:r_seek(0) Изменено 7 Июня 2019 пользователем naxac Ссылка на комментарий
AndrewMor 533 Опубликовано 7 Июня 2019 Поделиться Опубликовано 7 Июня 2019 @naxac, Спасибо, попробую. Ссылка на комментарий
AndrewMor 533 Опубликовано 7 Июня 2019 Поделиться Опубликовано 7 Июня 2019 (изменено) @naxac, Попробовал для начала вот это: Нужно сначала поставить чтение пакета на начало: packet:r_seek(0) Радиация спавнится по нужным координатам, но все без исключения аномалии перестают наносить урон. Спавнятся, на детекторе видны, но - пустышки. А вот конструкции if not packet:r_eof() then last_spawn_time_present = packet:r_u8() end ... if last_spawn_time_present then packet:w_u8(last_spawn_time_present) end сработали. Все спавнится и наносит урон, как и задумано. Спасибо за помощь, может еще кому пригодится. Изменено 7 Июня 2019 пользователем AndrewMor 1 Ссылка на комментарий
AndreySol 215 Опубликовано 7 Июня 2019 Поделиться Опубликовано 7 Июня 2019 (изменено) @AndrewMor Ты бы лучше, вместо прямой работы с нет-пакетом, использовал какой-нить модуль, ну хотя бы того же Artos'а. Меньше проблем бы было... Изменено 7 Июня 2019 пользователем AndreySol Ссылка на комментарий
aka_sektor 1478 Опубликовано 7 Июня 2019 Поделиться Опубликовано 7 Июня 2019 Подскажет кто, что нужно изменить в логике дверей бункера Сидоровича, чтобы они изначально были октрыты? [logic] active = ph_door@locked [ph_door@locked] locked = true snd_open_start = trader_door_unlock on_info = {+esc_trader_can_leave} ph_door@closed %=play_snd(device\door_servomotor)% [ph_door@closed] closed = true locked = false on_use = ph_door@open %-esc_close_door% snd_open_start = trader_door_open_start snd_close_start = trader_door_close_start snd_close_stop = trader_door_close_stop [ph_door@open] closed = false locked = false on_use = ph_door@closed on_info = {+esc_close_door} ph_door@closed snd_open_start = trader_door_open_start snd_close_start = trader_door_close_start snd_close_stop = trader_door_close_stop Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти