Full Noob 1 Опубликовано 11 Августа 2019 Поделиться Опубликовано 11 Августа 2019 Значит взялся я ремкомплекты "отсебятские" делать для ТЧ. Логика такая: +Юзаем комплект - в инвентарь спавнится открытый ремкомплект. +Юзаем открытый ремкомплект - открывается окно с вариантами "Починить" и "Закрыть". Всё бы ничего, но почему-то после использования закрытого ремкомплекта колбэк use_object ломается. Подскажет кто в чём проблема? Скрытый текст --FUNCTION TO CHECK USED ITEM function mod_func_check_used_item(obj) mod_dbg("something used") if(obj~=nil) then local t_s_sect = obj:section() mod_dbg("cond now "..l_n_repairkit_cond) if(l_n_repairkit_cond==-1) then if(string.sub(t_s_sect,1,9)=="repairkit") then mod_func_respawn_kit(obj,true) elseif(string.sub(t_s_sect,1,16)=="opened_repairkit") then mod_func_respawn_kit(obj,true) local t_u_rep_act = ui_repairkit.mod_repair_action_ui(get_hud()) level.start_stop_menu(t_u_rep_act, true) end end end end --REPAIR FUNCTION function mod_func_repair_item(i_kit,n_slot) local t_i_repair = db.actor:item_in_slot(n_slot) local t_s_kittype = i_kit:section() local t_n_repairkit_cond = i_kit:condition() if(t_i_repair~=nil) then local t_s_sound = [[interface\inv_ruck]] --предмет сильно сломан --[[interface\inv_belt]] --звук пополнения local t_n_cond = t_i_repair:condition() local t_n_repaircond = 1-t_n_cond local t_n_newcond = 1 if(t_n_cond>0.26) then if(n_slot==6) then t_s_sound = [[interface\inv_belt]] --броня починена else t_s_sound = [[interface\inv_attach_addon]] --предмет починен end if(t_n_repairkit_cond<t_n_repaircond) then t_n_newcond = t_n_cond+t_n_repairkit_cond t_n_repairkit_cond = 0 else t_n_repairkit_cond = t_n_repairkit_cond-t_n_repaircond end t_i_repair:set_condition(t_n_newcond) end local snd_obj = xr_sound.get_safe_sound_object(t_s_sound) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end --SET NEW REPAIRKIT CONDITION function mod_set_newkit_condition(n_id) local t_i_newkit = level.object_by_id(n_id) if(t_i_newkit~=nil) then t_i_newkit:set_condition(l_n_repairkit_cond) else l_i_mod_repairkit = nil end l_n_repairkit_cond = -1 end function mod_func_respawn_kit(obj,open) l_n_repairkit_cond = obj:condition() local t_s_sect = obj:section() if(open==true) then t_s_sect = "opened_"..t_s_sect end l_i_mod_repairkit = alife():create(t_s_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) level.client_spawn_manager():add(l_i_mod_repairkit, -1, mod_set_newkit_condition) end Простите я забыл в спойлер код запихнуть, но сайт мне не позволяет отредактировать :D Ах да забыл! Вот это написано ещё в самом начале (чтобы не было лишних вопросов): Скрытый текст function mod_dbg(fmt,...) local con = get_console() con:execute(string.gsub(string.format(fmt,...), " ", "_")) con:execute("flush") end l_i_mod_repairkit = nil l_n_repairkit_cond = -1 Добавлено Опричник, 11 Августа 2019 Портянки под спойлер. Кнопка с "Глазом" на панели инструментов. Ссылка на комментарий
Full Noob 1 Опубликовано 12 Августа 2019 Поделиться Опубликовано 12 Августа 2019 (изменено) Методом тыка выяснил, что проблему вызывает колбэк на вход в онлайн комплекта: level.client_spawn_manager():add(l_i_mod_repairkit, -1, mod_set_newkit_condition) Видимо я не правильно записал сам колбэк? Не понимаю что не так. Изменено 12 Августа 2019 пользователем Full Noob Ссылка на комментарий
Kirgudu 1 204 Опубликовано 12 Августа 2019 Поделиться Опубликовано 12 Августа 2019 @Full Noob, level.client_spawn_manager():add(l_i_mod_repairkit.id, -1, mod_set_newkit_condition) Инструмент Ссылка на комментарий
Full Noob 1 Опубликовано 13 Августа 2019 Поделиться Опубликовано 13 Августа 2019 @Kirgudu, не помогло. Один фиг дебаговые сообщения о юзе предмета перестают появляться после использования комплекта. Ссылка на комментарий
AndreySol 215 Опубликовано 13 Августа 2019 Поделиться Опубликовано 13 Августа 2019 12 часов назад, Full Noob сказал: Методом тыка выяснил, что проблему вызывает колбэк на вход в онлайн комплекта: Ну так выясняй дальше, у тебя в ф-ции кэллбэка всего 7 строк кода. Закомментил одну - проверил, и так пока не найдешь ошибку. Ссылка на комментарий
Full Noob 1 Опубликовано 13 Августа 2019 Поделиться Опубликовано 13 Августа 2019 (изменено) @AndreySol, не помогло. Я закомментил весь колбэк, но ничего не поменялось. Спасает только закомменчивание самой строчки "заведения" колбэка, но мне без него никак, так как при попытке сделать set_condition происходит краш: Скрытый текст [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...l.k.e.r\gamedata\scripts\secretsmod_functions.script:123: attempt to call method 'set_condition' (a nil value) Изменено 13 Августа 2019 пользователем Full Noob Ссылка на комментарий
AndreySol 215 Опубликовано 13 Августа 2019 Поделиться Опубликовано 13 Августа 2019 6 часов назад, Full Noob сказал: так как при попытке сделать set_condition происходит краш: А ты уверен что имеется такая экспортирования ф-ция: "set_condition"? Ссылка на комментарий
Full Noob 1 Опубликовано 14 Августа 2019 Поделиться Опубликовано 14 Августа 2019 @AndreySol, всмысле? Если ты имеешь в виду "а можно ли НЕ на оружии применить set_condition", то я отвечу: да, можно. Только что поменял запуск функции спавна открытого комплекта на простой obj:set_condition(0.5). Это сработало. Если имелось в виду "можно ли получить condition НЕ оружия и перенести на другое НЕ оружие", то я уверен, что да (но это не точно). Но я попробовал написать так: Скрытый текст l_i_mod_repairkit = alife():create(t_s_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) l_i_mod_repairkit:set_condition(0.5) Результат можешь почитать в моём предыдущем посте. Ссылка на комментарий
Full Noob 1 Опубликовано 15 Августа 2019 Поделиться Опубликовано 15 Августа 2019 (изменено) Сильно пахнет маразмом. Появилась кое-какая мысль и я решил попробовать в конец колбэка на выход в онлайн дописать level.client_spawn_manager():remove(n_id,-1) Получил довольно экзотический вылет: Скрытый текст stack trace: 0023:03C9D16A xrGame.dll [error][ 183] : Невозможно создать файл, так как он уже существует. Ещё эксперементировал с вторым ИД (который -1 сейчас). Пробовал и 0 и db.actor:id() (вроде что 0 что актор ид одинаковые насколько я знаю, но я так на всякий). Изменено 15 Августа 2019 пользователем Full Noob Ссылка на комментарий
mole venomous 3 365 Опубликовано 19 Августа 2019 Поделиться Опубликовано 19 Августа 2019 Всем добрый день. Вопрос по restriction_stock. Возможно ли к фиксированной InvMax добавлять числовые значения, полученные из функции через массив. Т.е имеем функцию проверки, одет ли костюм и если да, то какой. Отсюда находим кол-во дополнительного места для рюкзака и прибавляем к InvMax. Или же нужно оперировать в самой функции restriction_of_stock(ItemObj,Fix)?(Где я и застрял, т.к. при каждом вызове функции InvMax постоянно увеличивается). Моих знаний здесь не хватает... Здесь могла быть ваша реклама. Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 21 Августа 2019 Поделиться Опубликовано 21 Августа 2019 Здрасьте. ТЧ 1.0006. Есть мод с выводом статиков на HUD. Требуется поймать начало/конец катсцены и нажатие клавиш [Num +/-], чтобы временно скрыть статики. Как отследить указанные события? Может, есть проверка вроде hud_off() == true/false или отслеживание действия level.hide_indicators? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
AndreySol 215 Опубликовано 21 Августа 2019 Поделиться Опубликовано 21 Августа 2019 3 часа назад, Norman Eisenherz сказал: Требуется поймать начало/конец катсцены Любая кат-сцена откуда-то запускается, из логики какого-то объекта. Там и добавь скрытие индикаторов. Ссылка на комментарий
Иван Собакин 0 Опубликовано 24 Августа 2019 Поделиться Опубликовано 24 Августа 2019 [COP] Мне нужно создать скрипт для поиска рандомного пустого смарта.Уже 3 неделю бъюсь. Помогите плз. Добавлено Murarius, 26 Августа 2019 Перемещено. Ссылка на комментарий
Дмитрий Зверев 0 Опубликовано 13 Сентября 2019 Поделиться Опубликовано 13 Сентября 2019 Всем привет. Есть функция, которая при нажатии на кнопку на gui начинает выполнять много других весёлых функций (с вероятностью 0,8 телепортировать актора в нужное место, после чего высчитывать вероятность, за сколько он до этого места "добрался"; с вероятностью 0,2 забрасывать его по другим координатам, где его ждут бандиты. Вдовесок - затемнение экрана, перемотка времени, сообщения о том, что актор добрался за N часов и т.п. Практически всё работает хорошо, но, как говорится, есть нюанс: 1) Иногда актора просто телепортирует в локацию (куда выставлена вероятность 0,8) без сообщения и без перемотки времени; 2) Иногда эктора телепортирует в нужную локацию, но приходят два сообщения (например, "вы добрались за 2 часа" и "вы добрались за 3 часа") и время отматывается ажно на 5 часов вперёдт. Вопрос: как это можно пофиксить? Я не ахти какой скриптер, так что, пожалуйста, подскажите, может, я что-то не дописал или ошибся в расчётах вероятности. Заранее спасибо! Скрытый текст function ui_map:button3_button_clicked() if math.random(1,100) < 80 then xr_effects.teleport_actor(nil, nil, {"way_to_f","look_to_f"}) level.add_pp_effector("black.ppe", 150, false) if math.random(1,10) <= 3 then news_manager.send_tip(db.actor, "arrived_to_farm_1_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {1}) end if math.random(1,10) < 6 then news_manager.send_tip(db.actor, "arrived_to_farm_2_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {2}) end if math.random(1,10) >= 6 then news_manager.send_tip(db.actor, "arrived_to_farm_3_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {3}) end else xr_effects.teleport_actor(nil, nil, {"random_event_vodokachka_way","random_event_vodokachka_look"}) news_manager.send_tip(db.actor, "arrived_to_vodokachka", 0, "default", 5000) level.add_pp_effector("black.ppe", 150, false) xr_effects.forward_game_time(nil, nil, {4}) end self:HideDialog() end Ссылка на комментарий
lordmuzer 743 Опубликовано 13 Сентября 2019 Поделиться Опубликовано 13 Сентября 2019 (изменено) 3 hours ago, Дмитрий Зверев said: 1) Иногда актора просто телепортирует в локацию (куда выставлена вероятность 0,8) без сообщения и без перемотки времени; Это потому что все 3 условия для сообщения отдельно вычисляют "вероятность". Може так выйти что не одно не сработает. 3 hours ago, Дмитрий Зверев said: 2) Иногда эктора телепортирует в нужную локацию, но приходят два сообщения (например, "вы добрались за 2 часа" и "вы добрались за 3 часа") и время отматывается ажно на 5 часов вперёдт. А это уже потому что с таким кодом может сработать больше одного условия для сообщения. Исправленный пример: Spoiler function ui_map:button3_button_clicked() if math.random(1,100) < 80 then xr_effects.teleport_actor(nil, nil, {"way_to_f","look_to_f"}) level.add_pp_effector("black.ppe", 150, false) local rnd = math.random(1,10) -- считаем "вероятность" один раз if rnd <= 3 then news_manager.send_tip(db.actor, "arrived_to_farm_1_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {1}) elseif rnd < 6 then news_manager.send_tip(db.actor, "arrived_to_farm_2_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {2}) elseif rnd >= 6 then news_manager.send_tip(db.actor, "arrived_to_farm_3_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {3}) end else xr_effects.teleport_actor(nil, nil, {"random_event_vodokachka_way","random_event_vodokachka_look"}) news_manager.send_tip(db.actor, "arrived_to_vodokachka", 0, "default", 5000) level.add_pp_effector("black.ppe", 150, false) xr_effects.forward_game_time(nil, nil, {4}) end self:HideDialog() end Изменено 13 Сентября 2019 пользователем lordmuzer 1 1 Ссылка на комментарий
Баба ЯГА 7 Опубликовано 16 Сентября 2019 Поделиться Опубликовано 16 Сентября 2019 Мужики! Вот, проигрывается , для примера, любой звук: local path = "characters_voice\\human_03\\stalker\\talk\\labux\\labux_28" -- string local so = sound_object( path ) -- userdata local pso = so:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) -- nil ВОПРОС: как узнать, что этот звук в данный момент проигрывается и остановить его принудительно? Что-то типа --> если звук SO сейчас проигрывается то ОСТАНОВИТЬ проигрывание Типа такого, но так, естественно, не работает... if so:playing() then so:stop() end Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
Kirgudu 1 204 Опубликовано 16 Сентября 2019 Поделиться Опубликовано 16 Сентября 2019 @Баба ЯГА, local pso = so:play(db.actor, 0, sound_object.s2d) if pso:playing() then pso:stop() end 1 1 Инструмент Ссылка на комментарий
Баба ЯГА 7 Опубликовано 16 Сентября 2019 Поделиться Опубликовано 16 Сентября 2019 2 часа назад, Kirgudu сказал: @Баба ЯГА, local pso = so:play(db.actor, 0, sound_object.s2d) if pso:playing() then pso:stop() end local pso = so:play(db.actor, 0, sound_object.s2d) if pso:playing() then pso:stop() end не пойдёт, pso возвращает nil , увы. Я написал это в первом своём посте, так не будет работать. Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
abramcumner 1 145 Опубликовано 17 Сентября 2019 Поделиться Опубликовано 17 Сентября 2019 9 часов назад, Баба ЯГА сказал: Я написал это в первом своём посте, так не будет работать. В твоем посте и у Kirgudu вызываются разные методы для проигрывания звука. Как написал Kirgudu, должно работать. 1 Ссылка на комментарий
Баба ЯГА 7 Опубликовано 17 Сентября 2019 Поделиться Опубликовано 17 Сентября 2019 4 часа назад, abramcumner сказал: В твоем посте и у Kirgudu вызываются разные методы для проигрывания звука. Как написал Kirgudu, должно работать. Да, ты прав, прошу прощения, я не заметил что в моём случае play_no_feedback, а в его - play. В любом случае, проблема решена ещё вчера двумя разными способа. Всем спасибо! Вопрос снимается. Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти