ZeeK 57 Опубликовано 24 Июля 2012 Поделиться Опубликовано 24 Июля 2012 Здрасьте, народ. Собрал функцию облучения гг радиацией при порченном костюме, но как обычно с первого раза не заработало, а ошибок я что то не замечаю. Подскажите, плиз function check_outfit_condition() if db.actor:item_in_slot(7) ~= nil and db.actor:item_in_slot(7):section() == "scientific_outfit" and db.actor:item_in_slot(7):condition() <=0.80 and level.name()=="zaton" then --когда костюм можно чинить (состояние больше или равно 80%) db.actor.radiation = 0.05 local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Внимание! Разгерметизация! Фильтры костюма не справляются!" local news_caption = game.translate_string("st_tip") local texture = "ui_inGame2_Hero" db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000) elseif not db.actor:item_in_slot(7):section() == "scientific_outfit" and level.name()=="zaton" then db.actor.radiation = 0.1 local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Пора умирать, упс..." local news_caption = game.translate_string("st_tip") local texture = "ui_inGame2_Hero" db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000) end end Используй теги "Код" и "Спойлер". Cyclone Не соответствует. N6260 Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 24 Июля 2012 Поделиться Опубликовано 24 Июля 2012 (изменено) Интересный тут вопрос возник... Есть некий объект, на который мы сохраняем ссылку. Пусть это будет game_object, как в xr_danger.script: db.storage[self.object:id()].enemy = best_danger:object() Затем с объектом по какой-то причине происходит destroy. На что указывает сохраненная ссылка ? nil ? Изменено 24 Июля 2012 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Shredder 49 Опубликовано 24 Июля 2012 Поделиться Опубликовано 24 Июля 2012 ZeeK, твой код будет рабоатать, если у тебя надет комбез "Сева" и ты находишься на Затоне, причём независимо от его состояния. Если в слоте вообще не будет комбеза - будет вылет. Думаю нужно как-то так: function check_outfit_condition() if db.actor:item_in_slot(7) and db.actor:item_in_slot(7):condition() <=0.80 then db.actor.radiation = 0.05 local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Внимание! Разгерметизация! Фильтры костюма не справляются!" local news_caption = game.translate_string("st_tip") local texture = "ui_inGame2_Hero" db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000) elseif not db.actor:item_in_slot(7) then --Комбеза нет вообще db.actor.radiation = 0.1 local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Пора умирать, упс..." local news_caption = game.translate_string("st_tip") local texture = "ui_inGame2_Hero" db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000) end end Ссылка на комментарий
panzyuza 41 Опубликовано 24 Июля 2012 Поделиться Опубликовано 24 Июля 2012 (изменено) У меня вопрос. Есть движковая функция для гейм_обьекта set_alien_control.Как я понял, она используеться в игре только раз при атаках контроллёра. А есть ли способ её использовать для нпс и прочего и как она работает? Точнее, нужно ли её выключать? Изменено 24 Июля 2012 пользователем panzyuza AVS_LOCATION_MOD Ссылка на комментарий
KD87 718 Опубликовано 24 Июля 2012 Поделиться Опубликовано 24 Июля 2012 (изменено) panzyuza, неверно. set_alien_control(bool) переключает камеру в положение "из глаз" кровососа. Применима только к объектам класса CAI_Bloodsucker, при применении к другим объектам в лучшем случае ничего не будет. Лучше скажи, что ты хотел добиться от нпс с ее помощью. Изменено 24 Июля 2012 пользователем KD87 Ссылка на комментарий
ZeeK 57 Опубликовано 24 Июля 2012 Поделиться Опубликовано 24 Июля 2012 твой код будет рабоатать, если у тебя надет комбез "Сева" и ты находишься на Затоне, причём независимо от его состояния. Если в слоте вообще не будет комбеза Shredder на это и было нацелено. То есть, написано верно будет, если заменить if db.actor:item_in_slot(7) ~= nil and db.actor:item_in_slot(7):section() == "scientific_outfit" and db.actor:item_in_slot(7):condition() <=0.80 and level.name()=="zaton" на if db.actor:item_in_slot(7):section() == "scientific_outfit" and db.actor:item_in_slot(7):condition() <=0.80 and level.name()=="zaton" ?? Не соответствует. N6260 Ссылка на комментарий
Кактус_523 1 Опубликовано 24 Июля 2012 Поделиться Опубликовано 24 Июля 2012 (изменено) И/или, взгляни, например в _g.start_game_callback() Довольно таки интересная с виду фитча. Можно ссыль на описание? Или лучше ткните туда, где она встречается. P.S.: Ковыряние в файлах и поиск по сайту ничего не дал. Изменено 24 Июля 2012 пользователем Кактус_523 МЯСО! Ссылка на комментарий
_Призрак_ 11 Опубликовано 24 Июля 2012 Поделиться Опубликовано 24 Июля 2012 Я не буду разбираться что у вас в коде не правильно, но объясните мне смысл вот этого: if db.actor:item_in_slot(7) ~= nil and db.actor:item_in_slot(7):section() == "scientific_outfit" and db.actor:item_in_slot(7):condition() <=0.80 ... ЗАЧЕМ? Вы вызываете аж 3 раза движковую функцию. Которая тоже время требует на выполнение. Притом такой код как выше выглядит не красиво. Почему не написать так: local slot_item_7 = db.actor:item_in_slot(7) if slot_item_7 and slot_item_7:section() == "scientific_outfit" and slot_item_7:condition() <=0.80 ... И понятней, и быстрей Freedom Ссылка на комментарий
Artos 99 Опубликовано 25 Июля 2012 Поделиться Опубликовано 25 Июля 2012 Кактус_523, эта "интересная фитча" - стандартая функция воторая и запускает собственно игру и естественно присутствует везде (ТЧ/ЧН/ЗП). Описывать то, как для запуска игры движек обращается к этой функции пока никому в голову не взбрело ... Если взглянешь в alife.ltx то в секции [alife] увидишь строку: start_game_callback = _G.start_game_callback; on starting new game or loading saved one - в которой сами разработчики дали тебе "описание". Добавлено через 16 мин.: _Призрак_ А еще "понятнее': local actor_outfit = db.actor:get_current_outfit() - и функция имеет понятное имя и нет ни какого гимора с номером слота, который в разных версиях игры порою смещен ... "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
panzyuza 41 Опубликовано 25 Июля 2012 Поделиться Опубликовано 25 Июля 2012 (изменено) KD87, понятно. Значит только к кровососам. Есть функция в xr_effects npc:set_alien_control( p[1] == "true" ). Не подскажешь, что передавать в качестве параметра (ид или сид обьекта)? Я понял, что true\false для включения и отключения. То есть, если монстр сделан на классе кровососа, то данная функция будет также применима. А чего от нпс хотел добиться? Хотел оживить игру. К примеру, в начале анимки punch переключить на нпс, и по прошествии секунд игрового времени обратно на актёра. Что-то вроде маленькой кат-сцены. Или во время атаки мутанта на нпс сначала взгляд нпс на монстра и потом обратно. Вообщем, простор идей большой. Изменено 25 Июля 2012 пользователем panzyuza AVS_LOCATION_MOD Ссылка на комментарий
KD87 718 Опубликовано 25 Июля 2012 Поделиться Опубликовано 25 Июля 2012 (изменено) panzyuza, какой сид? функция применяется к клиентскому объекту кровососа, а в качестве параметра ей передается bool - вкл/выкл, соответственно Изменено 25 Июля 2012 пользователем KD87 Ссылка на комментарий
ZeeK 57 Опубликовано 25 Июля 2012 Поделиться Опубликовано 25 Июля 2012 (изменено) _Призрак_ Вы вызываете аж 3 раза движковую функцию. Которая тоже время требует на выполнение. Притом такой код как выше выглядит не красиво. Почему не написать так: Ну может потому, что как понял, так и написал? Не все здесь имеют глубокие познания в программировании, чтобы понимать, как упрощенней записать функцию Во-первых, ты в разделе "Школа ..." и тебе подсказали, так зачем оправдывать свои незнания/недопонимания? Во-вторых, не нужно путать элементарные знания с "губокими", тебе подсказали простейшее, не требующее даже средних знаний. --/Artos Изменено 26 Июля 2012 пользователем Artos Не соответствует. N6260 Ссылка на комментарий
zitulok 0 Опубликовано 29 Июля 2012 Поделиться Опубликовано 29 Июля 2012 Я создал нового непися на кордоне и хотел чтобы он патрулировал, ходил с одной точки на другую останавливался на каждой точке и так бесконечно ходил, у меня получается так: он спавнится подходит к одной точке и уходит гулять по зоне, пожалуйста помогите. Вот скрипт может я где-то допустил ошибку. Профиль нового спавна в all.spawns Файл alife_l01_escape.ltx [870] ; cse_abstract properties section_name = stalker name = dark_stalker_voron position = 2.92000007629395,4.21000003814697,85.879997253418 direction = 0.0445535257458687,-0.000645029998850077,0.0144814234226942 ; cse_alife_trader_abstract properties character_profile = esc_dark_stalker_voron ; cse_alife_object properties game_vertex_id = 61 distance = 3.5 level_vertex_id = 42599 object_flags = 0xfffffffb custom_data = <<END [logic] cfg = scripts\esc_voron.ltx [smart_terrains] none = true [spawn] wpn_gauss END story_id = 9958 ; cse_visual properties visual_name = actors\soldier\soldier_spetsnaz ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 2 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 2 upd:timestamp = 0 upd:creature_flags = 0 upd:position = 2.92000007629395,4.21000003814697,85.879997253418 upd:o_model = 0 upd:o_torso = 0,0,0 upd:g_team = 0 upd:g_squad = 2 upd:g_group = 2 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_alife_human_abstract properties predicate5 = 2,2,1,2,0 predicate4 = 2,2,1,2 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties Точки новых путей в all.spawns Файл way_l01_escape.ltx [demon_ohr3_look] points = p0,p1 p0:name = wp00 p0:flags = 0x1 p0:position = 17.26,4.03,61.08 p0:game_vertex_id = 3061 p0:level_vertex_id = 293842 p1:name = wp01 p1:flags = 0x2 p1:position = 0.53,4.01,59.85 p1:game_vertex_id = 3065 p1:level_vertex_id = 326060 [demon_ohr3_walk] points = p0,p1 p0:name = wp00 p0:flags = 0x1 p0:position = 13.31,3.95,64.37 p0:game_vertex_id = 3065 p0:level_vertex_id = 326060 p0:links = p1(1) p1:name = wp01 p1:flags = 0x2 p1:position = 2.34,4.01,62.71 p1:game_vertex_id = 3061 p1:level_vertex_id = 293842 p1:links = p0(1) И вот сама логика Файл esc_voron.ltx [smart_terrains] none = true [logic] active = walker@demon_ohr3 [walker@demon_ohr3] path_walk = demon_ohr3_walk path_look = demon_ohr3_look danger = danger_condition@demon_ohr3 [danger_condition@demon_ohr3] ignore_distance = 0 Ссылка на комментарий
Struck 61 Опубликовано 29 Июля 2012 Поделиться Опубликовано 29 Июля 2012 zitulok, либо в этом дело pN:links - они у тебя не прописаны как раз для начальных точек путей(да и вообще криво), либо НПС не видит точку пути(она находится вне аи сетки/за уровнем) и уходит гулять(что в данном случае маловероятно). Как отследить что НПС был убит к примеру с гранаты или гранатомета?...если не возможно, то как отследить момент кидания гранаты и момент выстреливания подствольника/гранатомета? Ссылка на комментарий
zitulok 0 Опубликовано 29 Июля 2012 Поделиться Опубликовано 29 Июля 2012 (изменено) Я создал скрипты телепорта, как его заспавнить не через create а через all.spawns, дайте пожалуйста пример. Не путай конфиги для спавна со скриптами и подбери соответствующую тему, в зависимости от версии игры. И раз написал для all.spawn'а - в него и включай тобою написанное, предварительно ознакомившись как работать с ним. --/Artos Изменено 29 Июля 2012 пользователем Artos Ссылка на комментарий
GreadFiasco 2 Опубликовано 29 Июля 2012 Поделиться Опубликовано 29 Июля 2012 Подскажите пожалуйста, возможно ли изменить определённое значение в конфиге, через скрипт. К примеру... Я хочу что бы вес объекта в рюкзаке, изменился после выполнения функции в скрипте. Перепробовал несколько вариантов, но не что не работало. Один из примеров моих попыток function vsk94weight() local ltx = system_ini() if ltx:section_exist(wpn_vsk94_ttx) and ltx:line_exist(inv_weight, 2.82) then return ltx:r_float(inv_weight, 4) else return ltx:r_float(inv_weight, 1) end end Ссылка на комментарий
Zander_driver 10 333 Опубликовано 29 Июля 2012 Поделиться Опубликовано 29 Июля 2012 GreadFiasco Значение в конфиге, через скрипт изменить нельзя. Можно его только прочитать оттуда, что ты и делаешь в своем примере. Можно скриптом заменять один предмет на другой - точно такой же, но с другим весом. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
_Призрак_ 11 Опубликовано 30 Июля 2012 Поделиться Опубликовано 30 Июля 2012 Какой функцией можно получить ближайший левел_вертекс к данной позиции? Не перебирать же их все. Freedom Ссылка на комментарий
Driv3r 9 Опубликовано 30 Июля 2012 Поделиться Опубликовано 30 Июля 2012 Всем привет. Помогите, пожалуйста, разобраться. Итак, адаптировал я "Ограничение объема рюкзака" и "Магазинный мод (обоймы)". Ввел в resctrictor_stock.script, в таблицу - проверку всех обойм. Вот так: ... local _table = { _magazines = {"clip_8_9x18_fmj","clip_8_9x18_pmm" и т.д.} ... Всё прекрасно работает, но одно Но. Как только разряжаю оружие - вылет: Expression : e_entity Function : xrServer::Process_event_reject File : E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_event_reject.cpp Line : 12 Description : entity not found. id_parent=0 id_entity=19200 frame=841 Как сделать проверку на патроны для оружия? Ссылка на комментарий
boryan67 38 Опубликовано 30 Июля 2012 Поделиться Опубликовано 30 Июля 2012 Доброго времени суток всем! Artos, вопрос для меня актуальный по "отработавшим" свою логику рестрикторам. зачем оставлять по всей Зоне, хотя и невидимые, но никомму не нужные и по сути рудиментарные уже об'екты? Нельзя с этим не согласиться. Есть ли соображения куда взоры и стопы свои направить в поисках решения этой задачи? Другими словами, возможно ли установить, что данный конкретный рестриктор уже отработал и может быть удален? В принципе, даже проверял и где-то применяю - в самой логике рестриктора по окончании активной секции переключая на 'nil' - вызываю функцию удаления "самого себя". Идея понятна сама по себе. Если можно, подробнее о принципе определения "самого себя". Последующее удаление не представляется проблематичным. Заранее благодарен. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти