Labadal 68 Опубликовано 14 Ноября 2021 Поделиться Опубликовано 14 Ноября 2021 (изменено) upd: 2. Функция on_actor_pay(). (та, что выше, рассчитана для оружия, в котором всего один патрон, эта - подойдет для любого) function on_actor_pay() local curr_ammo_yes = db.actor:active_item():get_ammo_in_magazine() =============================================--свой код писать только ниже этой полоски -- тут код того, что вы хотите сделать при выстреле =============================================--свой код писать только выше этой полоски if curr_ammo_yes== 0 then start_timer() end end Изменено 14 Ноября 2021 пользователем Labadal God save Hatsune Miku! Ссылка на комментарий
Капрал Хикс 534 Опубликовано 18 Ноября 2021 Поделиться Опубликовано 18 Ноября 2021 Всем привет. Решил тут прикрутить-таки звуки приветствия и прощания Сахарову для ТЧ, на манер ЧН... Скрытый текст --дописано yan_professor_hello = {min_snd = 1, max_snd = 1, rnd = 100, prior = 5, rnd_id = id(), into_id = id(), max_ids = {}}, yan_professor_goodbye = {min_snd = 1, max_snd = 1, rnd = 100, prior = 5, rnd_id = id(), into_id = id(), max_ids = {}}, Скрытый текст --дописано [yan_professor_hello_rnd] yan_general_ecolog = 0,scenario\yantar\yan_sakharov_meet_ [yan_professor_goodbye_rnd] yan_general_ecolog = 0,scenario\yantar\yan_sakharov_meet_bye_ Соотв. звуки добавлены в нужную папку. А вот с файлом логики Сахарова у меня непонятки. Скрытый текст [logic] active = walker@yan_start actor_dialogs = actor_dialogs combat_ignore = combat_ignore trade = misc\trade_ecolog.ltx inv_max_weight = 10000 [walker@yan_start] path_walk = yan_ucheniy_walk_talk path_look = yan_ucheniy_look_talk combat_ignore_cond = always on_info = {-yantar_kruglov_phrase_2 +yantar_scientists_talk} remark@yan_professor_talk_1 on_info2 = {+yantar_kruglov_phrase_2} walker@yan_1 danger = danger_condition@yan_ecolog def_state_standing = yan_professor_wait def_state_moving1 = yan_professor_walk def_state_moving2 = yan_professor_walk def_state_moving3 = yan_professor_walk meet = no_meet [remark@yan_professor_talk_1] snd = yantar_professor_to_kruglov_1 anim = yan_professor_wait target = logic@scientist_out_rest, yan_scientist on_timer = 5000 | %+yantar_kruglov_phrase_1% on_info = {+yantar_professor_phrase_2} remark@yan_professor_talk_2 combat_ignore_cond = always danger = danger_condition@yan_ecolog meet = no_meet [remark@yan_professor_talk_2] snd = yantar_professor_to_kruglov_2 anim = yan_professor_wait target = logic@scientist_out_rest, yan_scientist on_timer = 5000 | walker@yan_1 %+yantar_kruglov_phrase_2% combat_ignore_cond = always danger = danger_condition@yan_ecolog meet = no_meet [walker@yan_1] path_walk = yan_ucheniy_walk path_look = yan_ucheniy_look combat_ignore_cond = always on_info = {+yan_actor_talk_ucheniy} walker@yan_2 on_info2 = {+yan_find_scientist_done} walker@scientist_quest_good danger = danger_condition@yan_ecolog def_state_standing = yan_professor_wait def_state_moving1 = yan_professor_walk def_state_moving2 = yan_professor_walk def_state_moving3 = yan_professor_walk meet = meet@yan_general_scientist_1 ;Дописано on_actor_dist_le = 2 | remark@yan_professor_hello on_actor_dist_ge = 4 | remark@yan_professor_goodbye [walker@scientist_quest_good] path_walk = yan_ucheniy_walk_talk path_look = yan_ucheniy_look_talk combat_ignore_cond = always on_info = {+yantar_scientist_talk_helmet} remark@talk_about_helmet danger = danger_condition@yan_ecolog def_state_standing = yan_professor_wait def_state_moving1 = yan_professor_walk def_state_moving2 = yan_professor_walk def_state_moving3 = yan_professor_walk meet = meet@yan_general_scientist_1 ;Дописано on_actor_dist_le = 2 | remark3@yan_professor_hello on_actor_dist_ge = 4 | remark3@yan_professor_goodbye [remark@talk_about_helmet] snd = yantar_professor_radiation_quest_2 anim = yan_professor_wait target = logic@scientist_out_rest, yan_scientist meet = no_meet combat_ignore_cond = always on_signal = sound_end | walker@go_to_room %-yantar_scientist_talk_helmet% danger = danger_condition@yan_ecolog [walker@go_to_room] path_walk = yan_general_scientist_room_walk path_look = yan_general_scientist_room_look on_signal = make_helmet | remark@make_helmet combat_ignore_cond = always danger = danger_condition@yan_ecolog meet = no_meet def_state_standing = yan_professor_wait def_state_moving1 = yan_professor_walk def_state_moving2 = yan_professor_walk def_state_moving3 = yan_professor_walk [remark@make_helmet] anim = mode_shlem target = 920 combat_ignore_cond = always on_signal = action_end | walker@go_to_actor danger = danger_condition@yan_ecolog meet = no_meet [walker@go_to_actor] path_walk = yan_ucheniy_walk_talk path_look = yan_ucheniy_look_talk combat_ignore_cond = always on_info = {+yan_kill_brain_task_start} walker@yan_2 danger = danger_condition@yan_ecolog def_state_standing = yan_professor_wait def_state_moving1 = yan_professor_walk def_state_moving2 = yan_professor_walk def_state_moving3 = yan_professor_walk meet = meet@yan_general_scientist_1 ;Дописано on_actor_dist_le = 2 | remark3@yan_professor_hello on_actor_dist_ge = 4 | remark3@yan_professor_goodbye [walker@yan_2] path_walk = yan_ucheniy_walk_talk path_look = yan_ucheniy_look_talk combat_ignore_cond = always on_info = {-yan_actor_talk_ucheniy} walker@yan_1 on_info2 = {+yantar_scientist_talk_helmet} remark@talk_about_helmet meet = meet@yan_general_scientist_1 danger = danger_condition@yan_ecolog def_state_standing = yan_professor_wait def_state_moving1 = yan_professor_walk def_state_moving2 = yan_professor_walk def_state_moving3 = yan_professor_walk [meet@yan_general_scientist] meet_state = 2 | yan_professor_wait@yantar_professor_talk_1 meet_state_wpn = 2 | yan_professor_wait@yantar_professor_talk_1 victim = 2 | actor victim_wpn = nil use = true use_wpn = false [meet@yan_general_scientist_1] meet_state = 1 | yan_professor_wait@yantar_professor_talk_1 meet_state_wpn = 1 | yan_professor_wait@yantar_professor_talk_1 victim = 1 | actor victim_wpn = nil use = true use_wpn = false abuse = false precond = usability [meet@no_talk] meet_state = 1 | yan_professor_wait@yantar_professor_talk_1 meet_state_wpn = 1 | yan_professor_wait@yantar_professor_talk_1 victim = 1 | actor victim_wpn = nil use = false use_wpn = false abuse = false [danger_condition@yan_ecolog] ignore_distance = 0 [actor_dialogs] id = yantar_general_ucheniy_talk_start,yantar_general_ucheniy_talk_end [combat_ignore] combat_ignore_cond = always ;Дописано [remark@yan_professor_hello] anim = yan_professor_wait snd = yan_professor_hello on_signal = sound_end | walker@yan_1 [remark@yan_professor_goodbye] anim = yan_professor_wait snd = yan_professor_goodbye on_signal = sound_end | walker@yan_1 [remark2@yan_professor_hello] anim = yan_professor_wait snd = yan_professor_hello on_signal = sound_end | walker@yan_2 [remark2@yan_professor_goodbye] anim = yan_professor_wait snd = yan_professor_goodbye on_signal = sound_end | walker@yan_2 [remark3@yan_professor_hello] anim = yan_professor_wait snd = yan_professor_hello on_signal = sound_end | walker@scientist_quest_good [remark3@yan_professor_goodbye] anim = yan_professor_wait snd = yan_professor_goodbye on_signal = sound_end | walker@scientist_quest_good В общем, при приближении ближе 2 метров по идее должен здороваться, при удалении более чем на 4 метра прощаться. Но работает только прощание изредка и то при этом, Сахарова можно поймать при подходе к столу так, что будет звучать только рандомное прощание. Где я с логикой накосячил? 1 Ссылка на комментарий
Colder 12 Опубликовано 28 Ноября 2021 Поделиться Опубликовано 28 Ноября 2021 Всем привет. Возможно ли в рексисторе проверить нахождение в нем мутантов? Ссылка на комментарий
naxac 2 447 Опубликовано 29 Ноября 2021 Поделиться Опубликовано 29 Ноября 2021 (изменено) @Colder , что-то вроде такого (если вызывать из логики) function some_monster_inside(actor, rest) local obj for k,v in pairs(db.storage) do obj = level.object_by_id(k) if obj and alife():object(k) and IsMonster(obj) then if rest:inside(obj:position()) then return true end end end return false end Изменено 29 Ноября 2021 пользователем naxac 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Colder 12 Опубликовано 29 Ноября 2021 Поделиться Опубликовано 29 Ноября 2021 Подскажите откуда можно вытащить скрипт отлова мини-карты? Ссылка на комментарий
Rod_K 1 Опубликовано 30 Ноября 2021 Поделиться Опубликовано 30 Ноября 2021 (изменено) Подскажите, пожалуйста, есть ли способ вывести систему репутации на худ и представить её в виде шкалы, где плохая репутация окрашивается в красный, хорошая в зеленый соответственно? Возможно что-то подобное уже было реализовано, если да, то прошу оповестить. Платформа ТЧ. https://infamous.fandom.com/wiki/Karma?file=Meter.jpg P.S. В скриншотах показываю как в идеале должно это выглядить. Игра на скрине, если что, игра Infamous. Изменено 30 Ноября 2021 пользователем Rod_K Ссылка на комментарий
Colder 12 Опубликовано 30 Ноября 2021 Поделиться Опубликовано 30 Ноября 2021 Создал фриплейный старт игры https://yadi.sk/i/ya2rFPr8BFbS-A Пытаюсь заспавнить предметы в инвентарь так: Скрытый текст Сама кнопка function ui_main_menu_new:novice_on_start() local console = get_console() console:execute("g_game_difficulty gd_novice") self:StartGame() start_game_novice() end Функция function start_game_novice() local spawn_items = { "wpn_pm", "medkit", "conserva", "zvezda_2", "bandage" } for i = 1,2 do table.insert(spawn_items, "ammo_9x18_fmj") end local k,v = 0,0 for k,v in pairs(spawn_items) do alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end Может кто подсказать как все таки заспавнить предметы. Скрытый текст function start_game_novice() local ini = ini_file("misc\\items_link.ltx") if not ini then ini=system_ini() end if ini:section_exist("generic_list") then local n = ini:line_count("generic_list") local key = math.random(0,n-1) local result, item, num = ini:r_line("generic_list",key,"","") return item, num end end в ltx [generic_list] wpn_pm = 0.7 Тоже не выходит Ссылка на комментарий
I am Dead 916 Опубликовано 30 Ноября 2021 Поделиться Опубликовано 30 Ноября 2021 (изменено) 7 часов назад, Colder сказал: скрипт отлова мини-карты? Скрытый текст function init_minimap() local wnd = get_main_window() minimap_static = wnd:GetStatic( "minimap" ) back_static = wnd:GetStatic( "minimap:background" ) frame_static = wnd:GetStatic( "minimap:level_frame" ) compass_static = wnd:GetStatic( "minimap:compass" ) end P.S Можешь посмотреть тут еще https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/dsh/dsh_ui_minimap.script#L94 Изменено 30 Ноября 2021 пользователем I am Dead 1 1 Ссылка на комментарий
Rod_K 1 Опубликовано 2 Декабря 2021 Поделиться Опубликовано 2 Декабря 2021 Здравствуйте, не могу разобраться как работает модуль m_netpk от Artos'a, хочу попробовать как в примере переместить вентилятор из бункера на тумбочку в лагере новичков, но не чего не происходит. Ссылка на комментарий
Капрал Хикс 534 Опубликовано 4 Декабря 2021 Поделиться Опубликовано 4 Декабря 2021 И всё-таки что за ерунда с вылетом вида: stack trace: 0023:05175AF0 xrGame.dll [error][ 87] : Параметр задан неверно. Делаем квиксейв клавишей F6, при попытке загрузиться с него клавишей F7 (или другой назначенной) - вылет выше, при попытке загрузиться с него из меню - всё грузится нормально... Ссылка на комментарий
mole venomous 3 429 Опубликовано 5 Декабря 2021 Поделиться Опубликовано 5 Декабря 2021 1 час назад, Капрал Хикс сказал: Параметр задан неверно Ну вот очень знакомые слова. Значит где-то встречал. Здесь видел или себя, но у себя я всегда назначаю клавиши F5/F8. Если такой вылет и был у меня, то либо вначале игры на базовых настойках, либо он возможен на моих тоже... Здесь могла быть ваша реклама. Ссылка на комментарий
Капрал Хикс 534 Опубликовано 5 Декабря 2021 Поделиться Опубликовано 5 Декабря 2021 7 часов назад, mole venomous сказал: Ну вот очень знакомые слова. Страница 556 этой темы, я уже сталкивался с подобным и мне помогли, а тут опять эта ерунда вылезла. Клавиша быстрой загрузки роли не играет, пробовал назначить F9 - та же петрушка с вылетом. Из меню грузится нормально. Ерунда какая-то... Ссылка на комментарий
Капрал Хикс 534 Опубликовано 8 Декабря 2021 Поделиться Опубликовано 8 Декабря 2021 Может такое быть, что вылет вида: stack trace: 0023:05175AF0 xrGame.dll [error][ 87] : Параметр задан неверно. вызван тем, что какой-то из скриптов сохранён в формате UTF-8, а не ANSI? Я просто не знаю, на что подумать ещё. Ссылка на комментарий
Rod_K 1 Опубликовано 8 Декабря 2021 Поделиться Опубликовано 8 Декабря 2021 Приветствую всех! Созрело несколько вопросов, на которые (хотя бы на некоторые) хотелось бы получить ответ, либо же дельный совет. 1. Подскажите как в главном меню можно изменить разрешение видео с 1024х768 на 1920х1080 без правок двига? 2. Как можно сменить имя и иконку гг по ходу игры? 3. Есть ли способ вывести на худ переработанную карму (репутацию) гг и представить ее в числовом виде (то есть, допустим, при обыске персонажа карма уменьшается, на худ приходит уведомление + число на худе уменьшается на 5 показателей)? 4. Как можно вывести иконку гг на худ и сделать ее динамической (то есть настроить сменяемость картинок таким образом, чтобы получилась анимация (примерно как в 1 думе)). 5. Есть ли способ вывода любого изображения на сам худ инвентаря? (Допустим, на место где указано имя и иконка гг) 6. Также интересует момент с выводом абсолютно рандомной динамической картинки на карту пда, чтобы, допустим, закрасить недоступные локации, а потом эти картинки убрать. 7. Существует ли на чистом тч нормальный пак с анимациями применения предметов из инвентаря. Интересует именно в высоком разрешении анимации, допустим, как от LADS, но на чистой ТЧ. 8. Прошу скинуть скрипты на тч, которые не дают игроку открыть пда, инвентарь и диалоговое окно. Платформа разработки, соответственно, ТЧ. Заранее спасибо! Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 9 Декабря 2021 Поделиться Опубликовано 9 Декабря 2021 Новые окна в интерфейсе: 1. Позади существующих окон или в свободной области, авто-скрытие вместе с HUD: get_hud():Add/RemoveCustomStatic(имя), где имя – ссылка на XML-описание окна или хотя бы пустышки в [config\ui\ui_custom_msgs.xml]. 2. Поверх существующих окон, скрывать вручную (в катсценах по инфо-поршням или привязкой к [scripts\xr_effects.script] disable_ui, при использовании оптики через апдейт и т. д.): get_hud():Add/RemoveDialogToRender(cuiw), где cuiw – окно класса CUIWindow или любого из дочерних классов со скриптовым описанием. Вариант: level.add/remove_dialog_to_render(cuiw). Обязательно сохранять такие окна в переменные и чистить их в actor_binder:net_destroy(), если окна могут быть открытыми при перезагрузке (включая смерть при открытом инвентаре). 3. Привязкой к движковым окнам – например, к инвентарю: инфо-поршень ui_inventory + inv = level.main_input_receiver(), затем inv:AttachChild(cuiw). При перезагрузке хотя бы закрывать дочерние окна, а лучше удалять при каждом выходе из инвентаря. Варианты анимации текстур: 1. Цикл с запуском от случайного кадра: текстовый файл с именем текстуры, расширением SEQ и описанием "кадров/с имя имя …" Образец – анимированный указатель мыши. Можно ставить несколько одинаковых кадров для вывода дольше секунды или с долями, вроде "2 кадра в секунду + 3 копии = 1,5 секунды на кадр". 2. Анимация с набором кадров в общей текстуре: XML-описание под заголовком <a_static> (не везде работает) или скриптовый вызов InitAnimStatic(окно, родитель). Образец – анимированные кольца и кубики в заголовках "Энциклопедии". 3. Теги анимации light_anim и xform_anim в XML-описании – мигание с циклом 1 или 2 секунды, поворот на месте, масштаб ±. Список доступных вариантов – [gamedata\lanims.xr]. 4. Скриптовая замена текстуры окна по таймеру с привязкой к time_global() через апдейт. Способ запретить диалог или инвентарь, ЕМНИП, в чистом ТЧ только один: отследить любое окно через апдейт level.main_input_receiver() ~= nil или отдельно по инфо-поршням ui_trade / ui_inventory / ui_talk / ui_pda, после чего закрыть окно wnd = level.main_input_receiver() через level.start_stop_menu(wnd) или wnd:GetHolder():start_stop_menu(wnd). Скрипт реагирует на событие вывода окна, так что долю секунды будет и само окно, и взаимодействие с ним. Для закрашивания области карты с учетом перемещения можно, разве что, создать метку level.map_add_object_spot(id, имя, "") с непрозрачной текстурой, но это еще надо сослаться на id какого-то объекта – можно на id рестриктора, если область с логикой, вроде аномалии, тайника или зоны "убрать оружие". 2 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
AndreySol 215 Опубликовано 10 Декабря 2021 Поделиться Опубликовано 10 Декабря 2021 @Rod_K Практически все ваши хотелки - только под правку движка, некоторые частично можно реализовать скриптовыми кривыми костылями(уже примерно написал NE). Если вы надеетесь на чудо, что кто-то вам щас вынет зайчика из шляпы - забудьте. 1 4 Ссылка на комментарий
I am Dead 916 Опубликовано 13 Декабря 2021 Поделиться Опубликовано 13 Декабря 2021 @Rod_K Половину списка можно сделать и без правок движка( мб и больше ),ноо,в исходя из данных вопросов, ПОКА ЧТО не в твоём случае 1 Ссылка на комментарий
Colder 12 Опубликовано 16 Декабря 2021 Поделиться Опубликовано 16 Декабря 2021 (изменено) Прошу помощи! Не срабатывает проверка: Скрытый текст function generic_object_binder:use_callback(obj, who) if self.use_flag == nil and self.object:section()~="m_trader" then self.object:set_nonscript_usable(false) self.use_flag = true end if self.object:alive() or self.used then return end local knife = who:item_in_slot(0) if who:id() ~= db.actor:id() or (knife~=nil and who:active_slot() == 0) then local wnd = mutant_lut.MutaNTlut(obj,who) level.start_stop_menu(wnd, true) wnd.owner = self self.used = true else news_manager.send_tip(db.actor,"1 есть!") if db.actor:item_in_slot(0):condition() <= 0.20 then news_manager.send_tip(db.actor,"2 есть!") end return end end Изменено 16 Декабря 2021 пользователем Colder Ссылка на комментарий
Sla-Sla 43 Опубликовано 24 Декабря 2021 Поделиться Опубликовано 24 Декабря 2021 Всем привет, пилил озвучку ГГ во время убийства мутантов на ЗП, все ок, звуки запускаются, но обрываются спустя 2 секунды. С файлами звуков все окей, вне игры воспроизводятся полностью. С чем это может быть связано? Код в bind_monster.script, в функции death_callback: local snd_ppc = { [clsid.bloodsucker_s] = {'ppc\\kill\\humanoid_1','ppc\\kill\\monster_1'} } if snd_ppc[victim:clsid()] then sound_object(snd_ppc[victim:clsid()][math.random(#snd_ppc[victim:clsid()])]):play(db.actor,0,sound_object.s2d) end Ссылка на комментарий
dsh 3 824 Опубликовано 24 Декабря 2021 Поделиться Опубликовано 24 Декабря 2021 Скорее всего, твой sound_object удаляет уборщик мусора, вот звук и выключается. Сохраняй его где-нибудь. Или play_no_feedback используй, должно помочь. 1 1 2 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти