Kirgudu 1 264 Опубликовано 7 Ноября 2024 Поделиться Опубликовано 7 Ноября 2024 @imcrazyhoudini скинь, конечно, но я доберусь до проверки не ранее, чем в воскресенье, и не гарантирую, что смогу помочь. Нет, чисто со скриптовой точки зрения я проверю, что, например, story_id присваивается правильно и существует далее. А вот с логикой не особо в ладах, вряд ли получится понять, что там может ломаться. С этим к другим специалистам. 1 Инструмент Ссылка на комментарий
imcrazyhoudini 210 Опубликовано 13 Ноября 2024 Поделиться Опубликовано 13 Ноября 2024 @monk привет! Подсказать не сможешь касательно вопроса выше? Может, ещё что-то нужно? Ибо у тебя такое с Васяном и работает, а я репу чешу... ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
monk 2 859 Опубликовано 13 Ноября 2024 Поделиться Опубликовано 13 Ноября 2024 2 часа назад, imcrazyhoudini сказал: Подсказать не сможешь касательно вопроса выше? Я в скриптах полный ноль, во всём полагаюсь на своего друга-мастера. Раньше и меня вела дорога приключений, а потом вышел S.T.A.K.E.R 2 Ссылка на комментарий
Kirgudu 1 264 Опубликовано 14 Ноября 2024 Поделиться Опубликовано 14 Ноября 2024 (изменено) @monk я в скриптах подсказал и сделал что мог, проверил: story_id назначается как надо, ошибок нет. Однако после присвоения story_id там действительно идёт сбой логики. Вот я и подумал: может, Васяну ты в процессе своих экспериментов что-то в профиле нахимичил, спец. логику, флаги или ещё что-либо, что позволяет ему такое улучшение игнорировать (в хорошем смысле). Я такого не помню, но я-то как раз только в скрипты и лез, оставляя остальное на тебя. Изменено 14 Ноября 2024 пользователем Kirgudu Инструмент Ссылка на комментарий
ZeeK 57 Опубликовано 22 Декабря 2024 Поделиться Опубликовано 22 Декабря 2024 Доброго времени суток, коллеги - сталкеры! Кто нибудь разбирал за что отвечает параметр [forbidden_points] в faction_название_группировки? Не соответствует. N6260 Ссылка на комментарий
Kirgudu 1 264 Опубликовано 23 Декабря 2024 Поделиться Опубликовано 23 Декабря 2024 @ZeeK точно ничего не перепутал, есть пример? Насколько я помню, в классическом ЧН нет такого параметра у группировок. Есть параметр forbidden_point у смартов, который влияет на построение пути отрядов в войне группировок (да, можно запретить посещение точки отрядами определённой группировки), но это smart_terrain и sim_board. Инструмент Ссылка на комментарий
ZeeK 57 Опубликовано 25 Декабря 2024 Поделиться Опубликовано 25 Декабря 2024 @Kirgudu признаюсь, что подглядел в Sky Reclamation Project, например faction_freedom.ltx [forbidden_points] gar_smart_terrain_3_5 ; Depot Не соответствует. N6260 Ссылка на комментарий
Kirgudu 1 264 Опубликовано 26 Декабря 2024 Поделиться Опубликовано 26 Декабря 2024 16 часов назад, ZeeK сказал: подглядел в Sky Reclamation Project Понятно. Это те же яйца, только сбоку. В SRP взяли тот функционал, что я описал выше, и перенесли в настройки группировок. Так действительно удобней, поскольку для небольшого редактирования достаточно изменить только вынесенный в файлы конфиг группировки, а не пересобирать all.spawn, в котором находятся настройки смартов. Но по своему действию и та и эта реализации практически идентичны: оба параметра влияют на построение путей отрядов при войне группировок. Единственное, чтобы заработал вариант SRP, потребуются ещё и сопутствующие изменения в симуляционных скриптах, на ванильном ЧН не взлетит. 1 1 Инструмент Ссылка на комментарий
лщыыня 0 Опубликовано 12 Февраля Поделиться Опубликовано 12 Февраля Всем доброго времени суток! Хотелось бы узнать 2 вещи: В Славкер моде есть скрипт shoker_anomalies.script он видимо вытащил аномалии которые расположенные на болотах и прикрутил из шокер мода в свой, но как он это сделал я не разобрался, в бинд сталкере не нашел ничего подобного, может кто обьяснить? Скрытый текст local actor = db.actor function main() spawn_all() end --Спавним все аномалии function spawn_all(respawn) if load("spawn_anom",false)==false or respawn==true then -- Болота 121 аномалий\11 артефактов create_anom("zone_mine_electric",2,-295.39,1.24,-3.30,1,135) -- Электра около вышки-смертника create_anom("zone_field_acidic_weak",4,157.57,0.10,-166.98,1,135,"field") -- Отрава около вышки хуторной create_anom("zone_field_psychic_weak",5,272.07,2.46,-130.03,1,135,"field") -- Пси-аномалия около церкви на кладбище. create_anom("zone_field_thermal_weak",2,302.34,0.91,-125.80,1,135,"field") create_anom("zone_field_thermal_weak",3,298.07,0.78,-126.86,1,135,"field") -- Огненые поля у церкви. Суда арт засунь create_anom("zone_field_thermal_weak",2,305.80,0.72,-131.74,1,135,"field") spawn("af_cristall",vector():set(302.34,0.91,-125.80),1,135) create_anom("zone_buzz_average",1,-189.24,0.45,26.55,1,135)-- Ведмин студень на воде, здесь целых 2 арта create_anom("zone_buzz_average",1,-185.67,0.42,30.73,1,135) create_anom("zone_buzz_average",1,-183.06,0.61,27.40,1,135) create_anom("zone_buzz_average",1,-184.82,0.36,24.83,1,135) create_anom("zone_buzz_average",1,-187.30,0.26,24.21,1,135) create_anom("zone_buzz_average",1,-189.01,0.14,22.01,1,135) create_anom("zone_buzz_average",1,-186.50,0.24,21.18,1,135) create_anom("zone_buzz_average",1,-183.65,0.30,22.05,1,135) create_anom("zone_buzz_average",1,-180.98,0.58,25.27,1,135) create_anom("zone_buzz_average",1,-180.34,1.10,29.82,1,135) create_anom("zone_buzz_average",1,-186.93,0.53,29.80,1,135) spawn("af_mincer_meat",vector():set(-189.01,0.14,22.01),1,135) spawn("af_blood",vector():set(-184.82,0.36,24.83),1,135) create_anom("zone_mincer_average",3,104.08,1.40,-191.35,1,135) -- Мясорубка у мостика на хутор ЧН (?) create_anom("zone_mincer_strong",3,183.07,1.29,-106.17,1,135) -- Мясорубка у церкви create_anom("zone_mincer_average",3,216.67,2.17,-62.82,1,135) -- Ещё одна мясорубка create_anom("zone_zharka_static_weak",2,277.42,5.11,45.27,1,135) -- Термалки у сгоревшего хутора create_anom("zone_zharka_static_average",2,261.25,4.43,72.63,1,135) create_anom("zone_zharka_static_average",2,245.96,4.62,55.25,1,135) create_anom("zone_zharka_static_average",2,259.37,4.08,58.12,1,135) -- Огненое поле у сгоревшего хутора create_anom("zone_zharka_static_average",2,250.41,4.11,90.16,1,135) create_anom("zone_zharka_static_average",2,254.26,4.13,90.47,1,135) create_anom("zone_zharka_static_average",2,253.07,4.09,89.22,1,135) create_anom("zone_zharka_static_average",3,250.84,4.10,87.13,1,135) create_anom("zone_zharka_static_average",2,247.93,4.06,86.21,1,135) spawn("af_fireball",vector():set(250.84,4.20,87.13),1,135) spawn("af_dummy_glassbeads",vector():set(247.30,3.96,91.38),1,135) create_anom("zone_zharka_static_average",2,244.81,3.99,86.23,1,135) create_anom("zone_zharka_static_average",2,247.30,3.96,91.38,1,135) create_anom("zone_zharka_static_average",2,246.53,4.00,88.34,1,135) create_anom("zone_gravi_zone_strong",3,403.81,4.26,279.23,1,135) -- Воронка на дороге у моста (север) create_anom("zone_gravi_zone_strong",3,479.56,1.65,325.37,1,135) -- Воронка, механический двор create_anom("zone_gravi_zone_strong",3,480.33,1.45,323.05,1,135) create_anom("zone_gravi_zone_strong",3,478.26,1.16,321.00,1,135) spawn("af_medusa",vector():set(478.26,1.16,321.00),1,135) -- Медуза около механизированного двора create_anom("zone_gravi_zone_strong",3,477.48,1.34,323.11,1,135) create_anom("zone_field_psychic_weak",7,479.31,1.31,325.55,1,135,"field") -- Пси-Зона (МД, аномальное поле) create_anom("zone_gravi_zone_strong",3,476.14,1.59,324.64,1,135) create_anom("zone_gravi_zone_strong",3,476.95,1.46,321.70,1,135) create_anom("zone_gravi_zone_strong",3,479.07,1.43,318.92,1,135) create_anom("zone_field_thermal_weak",3,532.99,0.63,433.71,1,135,"field") -- Термалка у Механизированного двора create_anom("zone_field_psychic_strong",15,563.26,2.93,373.15,1,135,"field") -- Пси-Поле, ЛЭП) create_anom("zone_mine_electric_strong",3,563.26,2.93,373.15,1,135) -- Электро, ЛЭП) spawn("af_cristall_flower",vector():set(563.26,2.93,373.15),1,135) -- Цветок spawn("af_electra_moonlight",vector():set(563.26,2.93,373.15),1,135) -- Лунный свет, я щедрый create_anom("zone_mine_gravitational_strong",3,483.99,2.55,224.41,1,135,"field") -- Гравитация, ЛЭП 2) create_anom("zone_mosquito_bald_weak",2,480.42,2.55,225.11,1,135) -- Поле воронок create_anom("zone_mosquito_bald_weak",3,482.46,2.71,222.58,1,135) create_anom("zone_mosquito_bald_weak",3,487.74,3.54,220.23,1,135) create_anom("zone_mosquito_bald_weak",3,488.57,3.20,223.41,1,135) create_anom("zone_mosquito_bald_weak",3,489.59,2.81,227.60,1,135) create_anom("zone_mosquito_bald_weak",3,486.51,2.63,230.12,1,135) create_anom("zone_gravi_zone_strong",4,481.34,2.20,231.67,1,135) -- Главная разрывалка spawn("af_gravi",vector():set(481.34,2.20,231.67),1,135) -- Грави create_anom("zone_radioactive_average",5,469.04,1.77,209.11,1,135,"field") -- Радиация create_anom("zone_mosquito_bald_weak",2,457.80,0.48,126.62,1,135) -- На переходе между речками create_anom("zone_zharka_static_average",2,427.39,1.14,160.93,1,135) -- Жарка в поле create_anom("zone_field_acidic_weak",6,419.18,1.36,174.95,1,135,"field") -- Отрава в кустах create_anom("zone_mine_acidic_average",6,409.27,1.73,173.58,1,135,"field") -- Отрава в кустах с артом spawn("af_soul",vector():set(481.34,2.20,231.67),1,135) -- Душа поэта create_anom("zone_field_acidic_weak",6,402.42,1.89,169.73,1,135,"field") -- Отрава в кустах 2 create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") -- Отрава в кустах 3 create_anom("zone_mine_gravitational_weak",3,314.45,2.43,278.61,1,135) -- Разрывалки на большом мосту create_anom("zone_mine_gravitational_weak",3,326.24,2.87,285.10,1,135) create_anom("zone_gravi_zone_strong",3,209.78,2.48,310.32,1,135) -- Разрывалка на столбе create_anom("zone_mine_field_strong",3,-203.74,5.28,521.54,1,135,"field") -- Мина перед входом в убежище create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") -- Гипер-Симбион (Химический) create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_field_acidic_weak",6,371.84,1.84,31.12,1,135,"field") create_anom("zone_mine_gravitational_weak",3,371.84,1.84,31.12,1,135) create_anom("zone_mine_gravitational_weak",3,371.84,1.84,31.12,1,135) create_anom("zone_mine_gravitational_weak",3,371.84,1.84,31.12,1,135) create_anom("zone_mine_gravitational_weak",3,-57.03,1.10,450.29,1,135) -- Разрывалка у перехода на мост create_anom("zone_mine_gravitational_weak",3,41.22,1.30,423.44,1,135) -- Разрывалка в кустах create_anom("zone_field_thermal_weak",3,-76.91,0.65,269.29,1,135,"field") -- Термальное поле на одном из згоревших домов. create_anom("zone_mine_gravitational_weak",3,-100.78,1.21,305.49,1,135) -- Разрывалка на маленьком мосту create_anom("zone_mine_electric",3,-106.51,0.68,331.04,1,135) -- Электра у деревни (там ещё башня) create_anom("zone_field_acidic_weak",6,-152.16,2.01,307.69,1,135,"field") -- Химическая около деревни create_anom("zone_field_thermal_weak",3,-184.42,1.56,399.05,1,135,"field") -- Огненое поле на северо-западной станции create_anom("zone_mine_electric",3,-162.84,0.51,367.42,1,135) -- Электра между камышами create_anom("zone_mine_gravitational_weak",3,140.78,1.61,307.07,1,135) create_anom("zone_mine_electric",2,0.02,2.36,44.27,1,135) -- Электра на насосной станции create_anom("zone_field_thermal_weak",2,-0.62,4.09,13.32,1,135,"field") -- Огненое поле внутри НС create_anom("zone_mine_gravitational_weak",3,73.45,1.14,35.15,1,135) -- Гравитация в кустах create_anom("zone_gravi_zone_strong",3,269.90,9.85,-163.65,1,135) -- Разрывалка на башне церкви create_anom("zone_gravi_zone_weak",3,431.47,1.95,-175.90,1,135) -- Разрывалка на мосту к кордону create_anom("zone_field_thermal_weak",3,472.79,2.35,-164.45,1,135,"field") -- Термальное поле у перехода на кордон create_anom("zone_radioactive_average",20,-263.62,1.60,110.02,1,135,"field") -- Радиационно-Психический симбион create_anom("zone_field_psychic_weak",20,-263.62,1.60,110.02,1,135,"field") create_anom("zone_mine_gravitational_weak",3,-263.62,1.60,110.02,1,135) spawn("af_medusa",vector():set(-263.62,1.60,110.02),1,135) create_anom("zone_zharka_static_average",2,69.36,1.22,-85.62,1,135) -- Жарка в кустах create_anom("zone_mine_electric",3,143.13,0.10,-62.23,1,135) -- Электра в воде 1 create_anom("zone_mine_electric",3,329.97,0.11,-12.59,1,135) -- Электра в воде 2 create_anom("zone_gravi_zone_weak",3,124.38,1.49,36.46,1,135) -- Засасывалка между лодками create_anom("zone_mine_gravitational_weak",3,160.81,2.95,-59.27,1,135) -- Разрывалка в траве create_anom("zone_mine_gravitational_weak",3,147.02,1.28,460.31,1,135) -- Разрывалка в траве create_anom("zone_field_acidic_weak",6,186.40,1.93,341.20,1,135,"field") -- Кислота в кустах create_anom("zone_radioactive_average",20,31.12,1.28,267.74,1,135,"field") -- Радиация на куске воздухопровода create_anom("zone_mine_gravitational_weak",3,68.88,0.92,273.27,1,135) -- Разрывалка у мостика create_anom("zone_zharka_static_average",2,72.75,1.03,281.58,1,135) -- Жарка у куста и моста create_anom("zone_mine_gravitational_weak",3,-93.91,1.37,227.44,1,135) -- Разрывалка у башни create_anom("zone_gravi_zone_strong",3,-228.72,19.45,510.81,1,135) -- Засасывалки на мосте create_anom("zone_gravi_zone_strong",3,-226.41,18.10,502.46,1,135) -- Засасывалки на мосте create_anom("zone_field_thermal_weak",2,84.87,2.06,267.09,1,135,"field") -- Огненое поле у башни create_anom("zone_zharka_static_average",2,459.02,1.82,-50.17,1,135) -- Жарка в трупе create_anom("zone_mine_gravitational_weak",3,434.90,3.11,99.67,1,135) -- Разрывалка у башни\ЛЭП create_anom("zone_mine_gravitational_weak",3,360.14,1.25,182.89,1,135) -- Разрывалка между 2 мостами (Мех. Двор) create_anom("zone_mine_gravitational_weak",3,221.01,1.56,184.02,1,135) -- Разрывалка в кустах create_anom("zone_mine_gravitational_weak",3,-59.51,1.01,206.02,1,135) -- Разрывалка у башни create_anom("zone_mine_gravitational_weak",3,-98.54,0.97,461.85,1,135) -- Разрывалка в траве create_anom("zone_mine_electric",2,102.33,1.34,144.82,1,135) -- Электра в траве create_anom("zone_mine_gravitational_weak",3,-149.42,1.22,116.88,1,135) -- Разрывалка в траве create_anom("zone_mine_gravitational_weak",3,213.92,1.28,119.21,1,135) -- Разрывалка в траве create_anom("zone_mine_gravitational_weak",3,-115.41,1.29,-82.96,1,135) -- Разрывалка в траве create_anom("zone_zharka_static_average",2,-20.02,1.98,-178.00,1,135) -- Жарка на холмике save("spawn_anom",true) end end function create_anom(section,rad_anom,x,y,z,lv,gv,mode) -- con(section) if gv==nil then gv=db.actor:game_vertex_id() end if lv==nil then lv=db.actor:level_vertex_id() end if pos==nil then pos=db.actor:position() end local p_obj = alife():create(section,vector():set(x,y,z),lv,gv) local packet = net_packet() packet:w_begin(0) p_obj:STATE_Write(packet) packet:r_seek(2) 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:r_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) if mode == nil then packet:w_u8(last_spawn_time_present) end p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) -- add_spot_on_map(p_obj.id,"red_location","Аномалия") return p_obj end -- Вывод инфы в консоль function con(msg) get_console():execute(msg) end -- Записываем переменную function save(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end -- Загружаем переменную function load(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end -- Удаляем переменную function del(variable_name) if db.storage[db.actor:id()].pstor[variable_name] then db.storage[db.actor:id()].pstor[variable_name] = nil end end -- Функция спауна объекта function spawn(section,pos,lv,gv) -- vector():set(x,y,z) if gv==nil then gv=db.actor:game_vertex_id() end if lv==nil then lv=db.actor:level_vertex_id() end if pos==nil then pos=db.actor:position() end if section==nil then con("Не_указанная_секция") else return alife():create(section,pos,lv,gv) end end а второй вопрос ,как из того же шокера вытащить скрипт вертолёта на болотах Скрытый текст --[[------------------------------------------------------------------------------------------------ Патрульная схема вертолёта Автор: Shoker (c) -- СТОРИ МОДЕ --------------------------------------------------------------------------------------------------]] -- Таблица баз для вертолётов (1 зона на уровень), куда они улетают по окончаию local safe_zones = { marsh = vector():set(48, 16, -594), escape = vector():set(-35, -34, -1006), } local patrol_times = { -- Часы патруля [12] = true, [20] = true, } class "heli_patrol" function heli_patrol:__init( obj, storage ) self.object = obj self.hobj = obj:get_helicopter() self.a = storage self.hid = self.object:id() self.def_rocket_dalay = sm.ltx(obj:section(), "time_between_rocket_attack") self.hide_rocket_dalay = self.def_rocket_dalay-13000 if self.hide_rocket_dalay < 1 then self.hide_rocket_dalay = 2600 self.def_rocket_dalay = 2600 end -- Данные для респауна sm.save_var("sm_heli_this_id", obj:id()) sm.save_var("sm_patrol_started", true) end --' Обновление схемы при смене логики function heli_patrol:reset_scheme( loading ) self.engine_sound = self.a.engine self.hobj:TurnEngineSound( self.engine_sound ) self.smarts = self.a.smarts self.ways_cnt = table.getn(self.smarts) self.alert_dist_def = self.a.alert_d_def self.alert_dist = self.a.alert_d if loading then -- вызывается раз при загрузке сейва (но не при создании) self.way_point = sm.load_obj(self.hid, "sm_way_point", 1) self.combat_timer = sm.load_obj(self.hid, "sm_combat_timer", 0) self.pos_timer = sm.load_obj(self.hid, "sm_pos_timer", 0) self.fire_timer = sm.load_obj(self.hid, "sm_fire_timer", 0) self.fire_mode = sm.load_obj(self.hid, "sm_fire_mode", true) self.heli_state = sm.load_obj(self.hid, "sm_heli_state", "patrol") self.alert_dist = sm.load_obj(self.hid, "sm_alert_dist", self.alert_dist) else self.way_point = 1 self.combat_timer = 0 self.pos_timer = 0 self.fire_timer = 0 self.fire_mode = true self.heli_state = "patrol" end end function heli_patrol:save() sm.save_obj(self.hid, "sm_alert_dist", self.alert_dist) sm.save_obj(self.hid, "sm_way_point", self.way_point) sm.save_obj(self.hid, "sm_combat_timer", self.combat_timer) sm.save_obj(self.hid, "sm_pos_timer", self.pos_timer) sm.save_obj(self.hid, "sm_fire_timer", self.fire_timer) sm.save_obj(self.hid, "sm_fire_mode", self.fire_mode) sm.save_obj(self.hid, "sm_heli_state", self.heli_state) end local dead_id = 0 function heli_patrol:update( delta ) if xr_logic.try_switch_to_another_section(self.object, self.a, db.actor) then return end local smart_name = self.smarts[self.way_point] local smart, sp if smart_name=="base" then sp = safe_zones[level.name()] else smart = db.zone_by_name[smart_name] sp = smart:position() end local dta = self.object:position():distance_to(db.actor:position()) local hobj = self.hobj if hobj.m_dead then if dead_id~=self.hid then self:dead_callback(self.object, hobj) dead_id = self.hid end end if self.fire_timer<=time_global() then hobj.m_use_mgun_on_attack = self.fire_mode if self.fire_mode == true then --' перерыв в стрельбе пулемётом self.fire_mode = false self.fire_timer = time_global()+8000 else self.fire_mode = true self.fire_timer = time_global()+12000 end end if dta<=self.alert_dist and db.actor:alive() then ------------------------------------- if hobj:isVisible( db.actor ) then ------------------------------------------ hobj.m_time_between_rocket_attack = self.def_rocket_dalay hobj.m_syncronize_rocket = false self.alert_dist = self.alert_dist + 30 -- увеличиваем радиус обнаружения врага self.heli_state = "war" self.combat_timer = (time_global()+35000) hobj:LookAtPoint( db.actor:position(), true ) hobj:SetEnemy( db.actor ) hobj.m_use_rocket_on_attack = true if self.pos_timer<=time_global() then local p = db.actor:position() local x = p.x + math.random(25, 35) local y = p.y+30 local z = p.z + math.random(25, 35) hobj:SetDestPosition(vector():set(x, y, z)) hobj:LookAtPoint( db.actor:position(), true ) self.pos_timer=time_global()+15000 end ---------------------------------------- else ---------------------------------------- if self.heli_state=="war" then local c = db.actor:position() c.y = c.y+30 hobj.m_time_between_rocket_attack = self.hide_rocket_dalay hobj.m_syncronize_rocket = true hobj:GoPatrolByRoundPath(c , 40, self.object:direction()) hobj:LookAtPoint( db.actor:position(), true ) if self.combat_timer<=time_global() then self.heli_state = "patrol" -- забываем ГГ end end ------------------------------------------ end else self.heli_state="patrol" end if self.heli_state=="patrol" then -------------------------------------- hobj:ClearEnemy() self.alert_dist = self.alert_dist_def self.combat_timer = 0 hobj:SetDestPosition(vector():set(sp.x, sp.y+30, sp.z)) hobj:LookAtPoint(vector():set(sp.x, sp.y+30, sp.z), true) if self.object:position():distance_to(sp)<=35 then -- переключаемся на новый путь local cw2 = self.way_point+1 if cw2>self.ways_cnt then cw2 = 1 self:end_callback() end self.way_point = cw2 end -------------------------------------- end end --" Колбек на проход последней точки патруля function heli_patrol:end_callback() -- Данные для респауна sm.save_var("sm_heli_this_id", "nil") sm.save_var("sm_patrol_started", false) local sobj = alife():object(self.hid) alife():release(sobj, true) sm.timer_r("sm_surge_hides", 6) sm.call("sm_tips","send_tip", sm.get_text("st_heli_patrol_end"), nil,nil,10) end --/ Смена карты function on_level_change() local id = sm.load_var("sm_heli_this_id", "nil") if id~="nil" then local heli = alife():object(tonumber(id)) -- Данные для респауна sm.save_var("sm_heli_this_id", "nil") sm.save_var("sm_patrol_started", false) alife():release(heli, true) sm.timer_r("sm_surge_hides", 6) sm.timer_g("sm_spawn_helicopters", 0, 1, 5, level.name(), true) end end --/ Колбек, если ГГ спал во время патруля function check_sleep() sm.call("sm_tips","send_tip", sm.get_text("st_heli_patrol_sleep"),nil,5,10) sm.save_var("sm_heli_spawned", true) sm.timer_r("sm_surge_hides", 6) sm.timer_g("sm_spawn_helicopters", 0, 1, 5, level.name(), true) end --/ Колбек на смерть function heli_patrol:dead_callback( obj, hobj ) -- Данные для респауна sm.save_var("sm_heli_this_id", "nil") sm.save_var("sm_patrol_started", false) sm.timer_r("sm_surge_hides", 6) sm.timer_g("sm_spawn_helicopters", 0, 1, 5, level.name(), true) end --/ Новый патруль начался, новый вертолёт ещё не доступен function on_new_patrol() local id = sm.load_var("sm_heli_this_id", "nil") if id~="nil" then -- если уже есть вертолёт - сносим его local heli = alife():object(tonumber(id)) if heli then alife():release(heli, true) end -- Данные для респауна sm.save_var("sm_heli_this_id", "nil") sm.save_var("sm_patrol_started", false) end end function add_to_binder( npc, ini, scheme, section, storage ) printf( "DEBUG: add_to_binder: npc:name()='%s', scheme='%s', section='%s'", npc:name(), scheme, section ) local new_action = heli_patrol( npc, storage ) -- Зарегистрировать все actions, в которых должен быть вызван метод reset_scheme при изменении настроек схемы: xr_logic.subscribe_action_for_events( npc, storage, new_action ) end function set_scheme( npc, ini, scheme, section ) local a = xr_logic.assign_storage_and_bind( npc, ini, scheme, section ) a.logic = xr_logic.cfg_get_switch_conditions( ini, section, npc ) local smarts = utils.cfg_get_string(ini, section, "smarts", npc, false, "", nil) a.smarts = utils.parse_names(smarts) a.engine = utils.cfg_get_string( ini, section, "engine_sound", npc, false, "", true) a.alert_d = utils.cfg_get_number( ini, section, "alert_distance", npc, false, 70) a.alert_d_def = a.alert_d end --/ Спавним вертолёт function spawn_heli() if not safe_zones[level.name()] then return end if not sm.readCfg( "heli_enabled", "bol" ) then return end if sm.load_var("sm_heli_spawned", false) == true then return end if patrol_times[level.get_time_hours()] == nil then return end if not sm.IsSurge() and not sm.isStoryMode() and not sm.isStoryMode("heli") then on_new_patrol() if sm.call("m_sleep", "active")==true then check_sleep() return end sm.call("sm_tips","send_tip", sm.get_text("st_heli_patrol_start"), nil,nil,10) sm.call("m_hides", "Start") if level.name()=="marsh" then spawn_marsh_heli() end if level.name()=="escape" then spawn_escape_heli() end sm.timer_g("sm_spawn_helicopters", 0, 1, 5, level.name(), true) sm.save_var("sm_heli_spawned", true) end end function spawn_marsh_heli() local heli = sm.spawn("heli_marsh", safe_zones["marsh"], 1, 135) local t = sm_net_utils.Get_Data_Helicopter(heli) t.custom_data = "[logic]\ncfg = scripts\\shoker\\heli_marsh.ltx" t.startup_animation = "idle" --/ дефолтно: [$editor] t.engine_sound = "vehicles\\helicopter\\helicopter" sm.save_obj(heli.id, "i_am_special", true) sm_net_utils.Set_Data_Helicopter(t,heli) end function spawn_escape_heli() local heli = sm.spawn("heli_marsh", safe_zones["escape"], 1, 472) local t = sm_net_utils.Get_Data_Helicopter(heli) t.custom_data = "[logic]\ncfg = scripts\\shoker\\heli_escape.ltx" t.startup_animation = "idle" --/ дефолтно: [$editor] t.engine_sound = "vehicles\\helicopter\\helicopter" sm.save_obj(heli.id, "i_am_special", true) sm_net_utils.Set_Data_Helicopter(t,heli) end Если кто поможет буду очень признателен, осваиваю сейчас чн. Ссылка на комментарий
Купер 3 001 Опубликовано 13 Февраля Поделиться Опубликовано 13 Февраля @лщыыня 1. Скрытый текст function spawn_all(respawn) --* проверяем условия для спауна if load("spawn_anom",false)==false or respawn==true then --* создаём все нужные нам аномалии по заданным координатам. create_anom("zone_mine_electric",2,-295.39,1.24,-3.30,1,135) --* и артефакты. spawn("af_cristall",vector():set(302.34,0.91,-125.80),1,135) ... --* устанавливаем переменную проверки условия спауна save("spawn_anom",true) end end --* функция для создания объекта типа "аномалия" с учётом содержимого его нетпакета, вызывается в функции выше spawn_all -> create_anom(...). function create_anom(section,rad_anom,x,y,z,lv,gv,mode) ... end -- Вывод инфы в консоль function con(msg) get_console():execute(msg) end --* фунции для работы с хранилищем актора, сохраняем/читаем/удаляем переменую, вызывается в функции выше spawn_all -> load(...) / save(...) function save(variable_name, value) ... end function load(variable_name, value_if_not_found) ... end function del(variable_name) ... end --* функция для создания объекта, вызывается в функции выше spawn_all -> spawn(...) - для артефактов. function spawn(section,pos,lv,gv) -- vector():set(x,y,z) if gv==nil then gv=db.actor:game_vertex_id() end if lv==nil then lv=db.actor:level_vertex_id() end if pos==nil then pos=db.actor:position() end if section==nil then con("Не_указанная_секция") else return alife():create(section,pos,lv,gv) end end Вызывается на апдейте биндера группировок bind_faction.script -> update() Скрытый текст function faction_binder:update(delta) object_binder.update(self, delta) self.faction:update() shoker_anomalies.main() --* почему именно здесь, лучше не спрашивать. end 2. Можно, но потребуется, как минимум, интеграция авторских "вставок" (ООП, однако): тех функций, вызов которых в коде начинается на "sm."... (sm.ltx, sm.save_var, sm.load_obj / sm.save_obj, sm.timer_r / sm.timer_g, sm.call, sm_net_utils... ещё что-то). Либо разобраться, за что они отвечают (работа с переменными, таймеры, нетпакеты) и переписать их на имеющиеся аналоги. 1 1 Ссылка на комментарий
лщыыня 0 Опубликовано 15 Февраля Поделиться Опубликовано 15 Февраля @Купер Спасибо за помощь, Еще хотелось бы узнать за один вылет на болотах, толком в инете нет инфы может вы знаете: Скрытый текст * Detected CPU: AuthenticAMD , F15/M0/S0, 3590.00 mhz, 31-clk 'rdtsc' * CPU Features: RDTSC, MMX, SSE, SSE2 Initializing File System... using fs-ltx fsgame.ltx FS: 30804 files cached 33 archives, 4747Kb memory used. Init FileSystem 0.507367 sec 'xrCore' build 3795, Jun 25 2009 Initializing Engine... Starting INPUT device... Loading DLL: xrRender_R2.dll Loading DLL: xrRender_R3.dll refCount:m_pAdapter 1 command line Executing config-script "user.ltx"... [d:\s.t.a.l.k.e.r Чистое Небо\_appdata_\user.ltx] successfully loaded. Loading DLL: xrRender_R3.dll Loading DLL: xrGame.dll ! Unable to find Software\GSC Game World\STALKER-STCS\ in registry ! Player name registry key (InstallUserName) not found ! * [win32]: free[4046300 K], reserved[55144 K], committed[92796 K] * [ D3D ]: textures[0 K] * [x-ray]: crt heap[8473 K], process heap[2970 K], game lua[0 K], render[0 K] * [x-ray]: economy: strings[4017 K], smem[0 K] SOUND: OpenAL: enumerate devices... SOUND: OpenAL: EnumerationExtension Present devices Generic Hardware SOUND: OpenAL: system default SndDevice name is Generic Hardware SOUND: OpenAL: default SndDevice name set to Generic Software SOUND: OpenAL: All available devices: 1. Generic Software, Spec Version 1.1 (default) eax[0] efx[no] xram[no] 2. Generic Software, Spec Version 1.1 (default) eax[0] efx[no] xram[no] Executing config-script "user.ltx"... Executing config-script "d:\s.t.a.l.k.e.r Чистое Небо\gamedata\configs\rspec_extreme.ltx"... [d:\s.t.a.l.k.e.r Чистое Небо\gamedata\configs\rspec_extreme.ltx] successfully loaded. [d:\s.t.a.l.k.e.r Чистое Небо\_appdata_\user.ltx] successfully loaded. SOUND: Selected device is Generic Software * sound: EAX 2.0 extension: absent * sound: EAX 2.0 deferred: absent * sound : cache: 65537 kb, 4856 lines, 13820 bpl Starting RENDER device... * GPU [vendor:10DE]-[device:2208]: NVIDIA GeForce RTX 3080 Ti * CREATE: DeviceREF: 4 * Texture memory: 3072 M * GPU shading: vs(0/4.0/40), ps(0/4.0/40) * GPU vertex cache: unrecognized, 24 * NVidia MGPU: Logical(1), Physical(1) * Starting rendering as 2-GPU. * DVB created: 1536K * DIB created: 512K ! Renderer doesn't support blender 'effects\shadow_world' * HWDST/PCF supported and used - r__tf_aniso 16 - r2_tf_mipbias 0. Starting engine... ! Unable to find Software\GSC Game World\STALKER-STCS\ in registry ! Player name registry key (InstallUserName) not found ! ! Unable to find Software\GSC Game World\STALKER-STCS\ in registry Loading DLL: xrGameSpy.dll ! Invalid ogg-comment version, file: d:\s.t.a.l.k.e.r Чистое Небо\gamedata\sounds\music\wasteland2.ogg refCount:pBaseZB 1 refCount:pBaseRT 1 * DVB created: 1536K * DIB created: 512K - r__tf_aniso 16 - r2_tf_mipbias 0. * GPU shading: vs(0/4.0/40), ps(0/4.0/40) * GPU vertex cache: unrecognized, 24 * NVidia MGPU: Logical(1), Physical(1) * Starting rendering as 2-GPU. *** RESET [4338 ms] "d:\s.t.a.l.k.e.r Чистое Небо\bin\xrengine.exe" * phase time: 0 ms * phase cmem: 130493 K Кэширование объектов... Loading objects... Loading models... * [prefetch] time: 1820 ms * [prefetch] memory: 0Kb ! Unable to find Software\GSC Game World\STALKER-STCS\ in registry ! Player name registry key (InstallUserName) not found ! * phase time: 1885 ms * phase cmem: 121411 K Сервер: Старт... * phase time: 66 ms * phase cmem: 108278 K Сервер: Загрузка симуляции жизни... * phase time: 1 ms * phase cmem: 108278 K Загрузка игры "marsh_2011-09-10_0921.sav"... * Loading spawn registry... * 11404 spawn points are successfully loaded * Loading objects... * 20823 objects are successfully loaded * Game marsh_2011-09-10_0921 is successfully loaded from file 'd:\s.t.a.l.k.e.r Чистое Небо\_appdata_\savedgames\marsh_2011-09-10_0921.sav' (1.153s) * phase time: 1152 ms * phase cmem: 165068 K Сервер: Соединение... * phase time: 21 ms * phase cmem: 165113 K Клиент: Соединение с localhost... * client : connection accepted - <> * phase time: 11 ms * phase cmem: 165145 K Открытие потока... * phase time: 2 ms * phase cmem: 165145 K Загрузка формы объектов... * phase time: 2266 ms * phase cmem: 276093 K Загрузка шейдеров... * phase time: 371 ms * phase cmem: 277614 K Загрузка геометрии... * [Loading VB] 65533 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65506 verts, 2047 Kb * [Loading VB] 56742 verts, 1773 Kb * [Loading VB] 65531 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65533 verts, 2047 Kb * [Loading VB] 65522 verts, 2047 Kb * [Loading VB] 65530 verts, 2047 Kb * [Loading VB] 65525 verts, 2047 Kb * [Loading VB] 65517 verts, 2047 Kb * [Loading VB] 65528 verts, 2047 Kb * [Loading VB] 65516 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65513 verts, 2047 Kb * [Loading VB] 65534 verts, 2047 Kb * [Loading VB] 65507 verts, 2047 Kb * [Loading VB] 65510 verts, 2047 Kb * [Loading VB] 65515 verts, 2047 Kb * [Loading VB] 65501 verts, 2046 Kb * [Loading VB] 65534 verts, 2047 Kb * [Loading VB] 65534 verts, 2047 Kb * [Loading VB] 65533 verts, 2047 Kb * [Loading VB] 11053 verts, 345 Kb * [Loading VB] 65533 verts, 2047 Kb * [Loading VB] 65533 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65534 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 65535 verts, 2047 Kb * [Loading VB] 50268 verts, 1570 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 741387 indices, 1448 Kb * [Loading VB] 65533 verts, 767 Kb * [Loading VB] 65533 verts, 767 Kb * [Loading VB] 65535 verts, 767 Kb * [Loading VB] 65535 verts, 767 Kb * [Loading VB] 65535 verts, 767 Kb * [Loading VB] 65535 verts, 767 Kb * [Loading VB] 65535 verts, 767 Kb * [Loading VB] 65534 verts, 767 Kb * [Loading VB] 65535 verts, 767 Kb * [Loading VB] 65533 verts, 767 Kb * [Loading VB] 65534 verts, 767 Kb * [Loading VB] 65534 verts, 767 Kb * [Loading VB] 65534 verts, 767 Kb * [Loading VB] 65535 verts, 767 Kb * [Loading VB] 65534 verts, 767 Kb * [Loading VB] 65534 verts, 767 Kb * [Loading VB] 65532 verts, 767 Kb * [Loading VB] 22720 verts, 266 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 1048575 indices, 2047 Kb * [Loading IB] 466236 indices, 910 Kb * phase time: 505 ms * phase cmem: 277799 K Загрузка базы пространств... * phase time: 36 ms * phase cmem: 289189 K Загрузка детальных объектов... * [DETAILS] VertexConsts(256), Batch(61) * [DETAILS] 22936 v(20), 11468 p * [DETAILS] Batch(61), VB(447K), IB(67K) * phase time: 22 ms * phase cmem: 289230 K Загрузка секторов и порталов... * Loading HOM: d:\s.t.a.l.k.e.r Чистое Небо\gamedata\levels\marsh\level.hom * phase time: 8 ms * phase cmem: 289541 K Загрузка ИИ объектов... * phase time: 2 ms * phase cmem: 289541 K Клиент: Создание... * phase time: 12 ms * phase cmem: 289541 K Загрузка текстур... * t-report - base: 951, 466069 K * t-report - lmap: 11, 11265 K * phase time: 12585 ms * phase cmem: 326974 K Клиент: Синхронизация... * phase time: 4 ms * phase cmem: 326974 K * [win32]: free[2621920 K], reserved[108264 K], committed[1464056 K] * [ D3D ]: textures[631310 K] * [x-ray]: crt heap[326971 K], process heap[47707 K], game lua[64550 K], render[222 K] * [x-ray]: economy: strings[13820 K], smem[4015 K] * MEMORY USAGE: 394906 K * End of synchronization A[1] R[1] * Saving spawns... * Saving objects... * 20824 objects are successfully saved * Game marsh_2011-09-10_1028.sav is successfully saved to file 'd:\s.t.a.l.k.e.r Чистое Небо\_appdata_\savedgames\marsh_2011-09-10_1028.sav' stack trace: 0023:053DA96A xrGame.dll Вылет происходит когда я пытаюсь вернутся с проводником на базу ЧН, пробовал разные варианты, сразу после начала игры могу вернутся, после тестов выяснилось что вылет появляется только после того как Лебедев говорит пора ударить главную базу ренегатов "МехДвор", то есть группировка ЧН набралась достаточно сил и привысила ренегатовские пысы: В начале я думал что поломал игру модом который изменяет награду за Мех двор но нет,буду признателен за ответ(вычитал в сети только то что сам xrGame.dll может быть битый или не знаю). Ссылка на комментарий
gam 117 Опубликовано 15 Февраля Поделиться Опубликовано 15 Февраля 13.02.2025 в 05:29, Купер сказал: Вызывается Есть вероятность, не зданного квеста те (квест выдан но не сдан). Но это уточнить нет возможности пока. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти