Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Roman82 4 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) Всем привет, все с наступающим праздником. Возник вопрос. Как выставить проверку на наличие боеприпасов в инвентаре ГГ? Итемная проверка на них не работает, на оружие и все остальное работает, а вот на боеприпасы, гранаты нет. Перепробовал кучу схем, ничего. Например, function have_ammo() return db.actor:object("ammo_5.45x39_fmj") ~= nil end Что за бред? Это не бред, а твои банальные ошибки синтаксиса в скрипте. Добавь скобку - и "бред" исчезнет. --/Artos Добавлено через 55 мин.: Это не бред, а твои банальные ошибки синтаксиса в скрипте. Добавь скобку - и "бред" исчезнет. --/Artos Да нет. Дело не в этом. Это я здесь ошибся, забыл скобку поставить. Вопрос актуален. Я так понял, боеприпасы и гранаты идут отдельно от всех вещей в игре. Перерыл все моды, нигде подобной проверки не нашел... Изменено 14 Апреля 2012 пользователем Roman82 Ссылка на комментарий
ColR_iT 171 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) Roman82, всё прекрасно работает. Твой способ проверяет наличие у актора патронов, но всё же советую, явно возвращать логическое значение: if db.actor:object("ammo_5.45x39_ap")~=nil then return true else return false end Да и понятие "не работает" весьма неоднозначно. P.S. В чистой игре используется проверка на наличие боеприпасов при помощи функции object, так что плохо искал, если искал... Изменено 14 Апреля 2012 пользователем ColR_iT Ссылка на комментарий
Artos 99 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) Roman82 Ты бы вначале почитал бы вообше материалы по моддингу. При чем тут что-то "отдельно" от всего? Любой тип/класс предмета/объекта - стоит особняком от других. Но если у актора есть в инвентаре какой-то предмет, то проверка db.actor:object(section_item) ~= nil работает для ВСЕХ без исключения. Заменяешь section_item на свои "ammo_5.45x39_fmj" иль "grenade_f1" иль "ammo_vog-25" и все должно получаться. Если же у тебя не получается - учи матчасть! Добавлено через 3 мин.: ColR_iT Строка return db.actor:object("ammo_5.45x39_fmj") ~= nil полностью эквиваленттна твоему варианту, т.к. возвращает только булевы значения в любом случае. Если же необходимо проверять и db.actor в игре(?), то тогда безопасный код таков: return (db.actor ~= nil and db.actor:object("ammo_5.45x39_fmj") ~= nil) или if db.actor and db.actor:object("ammo_5.45x39_ap") ~= nil then return true else return false end Изменено 14 Апреля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Roman82 4 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) Artos Матчасть я выучил 5 лет назад. Все-равно не получается. Смысл в том, что я должен принести еду, аптечку, боеприпасы и гранаты сталкеру. Пишется диалог, ставится прекондишены и так далее. Короче, еду, аптечку определяет, гранаты и боеприпасы нет, хотя они в рюкзаке есть. И естественно диалог не появляется. Диалог - <dialog id="agroprom_dezerter_about_supply"> <precondition>agroprom_dialog.have_ammo</precondition> <precondition>agroprom_dialog.have_grenade</precondition> <precondition>agroprom_dialog.have_1_medkit</precondition> <precondition>agroprom_dialog.have_2_tushenka</precondition> <precondition>agroprom_dialog.have_2_bread</precondition> <dont_has_info>agroprom_dezerter_about_supply_talk_end</dont_has_info> <phrase_list> <phrase id="0"> <text>dezerter_about_supply_01</text> <next>2</next> </phrase> <phrase id="2"> <text>dezerter_about_supply_02</text> <next>3</next> </phrase> <phrase id="3"> <text>dezerter_about_supply_03</text> <next>4</next> </phrase> <phrase id="4"> <text>dezerter_about_supply_04</text> <next>5</next> <next>14</next> </phrase> <phrase id="5"> <text>dezerter_about_supply_05</text> <next>6</next> </phrase> <phrase id="6"> <text>dezerter_about_supply_06</text> <next>7</next> </phrase> <phrase id="7"> <text>dezerter_about_supply_07</text> <next>8</next> </phrase> <phrase id="8"> <text>dezerter_about_supply_08</text> <next>9</next> </phrase> <phrase id="9"> <text>dezerter_about_supply_09</text> <next>10</next> </phrase> <phrase id="10"> <text>dezerter_about_supply_10</text> <next>11</next> </phrase> <phrase id="11"> <text>dezerter_about_supply_11</text> <next>12</next> </phrase> <phrase id="12"> <text>dezerter_about_supply_12</text> <next>13</next> </phrase> <phrase id="13"> <text>dezerter_about_supply_13</text> <give_info>agroprom_dezerter_about_supply_talk_end</give_info> </phrase> <phrase id="14"> <text>dezerter_about_supply_14</text> <give_info>agroprom_dezerter_about_supply_talk_end</give_info> </phrase> </phrase_list> </dialog> Скрипт - function have_n_items(section,number) local actor = db.actor if actor then local cnt=0 actor:iterate_inventory(function (dummy, item) if item:section()==section then cnt=cnt+1 end end, nil) return cnt>=number end return false end function have_1_medkit() return have_n_items("medkit_army",1) end function have_2_tushenka() return have_n_items("tushenka",2) end function have_2_bread() return have_n_items("bread",2) end function have_ammo() return db.actor:object("ammo_5.45x39_fmj") ~= nil end function have_grenade() return db.actor:object("grenade_rgd5") ~=nil end Пробовал все ваши варианты. Все-равно не работает. Кстати, в схеме have_n_items тоже не хочет работать. Убираю прекондишены на гранату и боеприпасы, диалог начинает работать. Такие вот дела. Изменено 14 Апреля 2012 пользователем Roman82 Ссылка на комментарий
ColR_iT 171 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) Roman82, для проверок патронов и гранат, всё же следовало бы задавать необходимое количество. Твоя функция have_n_items использует второй параметр number, если его не задать, то инициализация пройдёт как nil, а сравнивать число с нил бессмысленно. Так что либо дописывай количество, либо ставь проверку: function have_n_items(section,number) if number == nil then number = 1 end local actor = db.actor if actor then local cnt=0 actor:iterate_inventory(function (dummy, item) if item:section()==section then cnt=cnt+1 end end, nil) return cnt>=number end return false end Изменено 14 Апреля 2012 пользователем ColR_iT Ссылка на комментарий
Roman82 4 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) ColR_iT Да нет. Этот вариант я тоже пробовал. Ноль. К тому же, при дополнении данной схемы if number == nil then number = 1 end происходит безлоговый вылет. Я уже что только не пробовал. И главное, ни в одном моде я не нашел проверок на боеприпасы. Вот что странно. Изменено 14 Апреля 2012 пользователем Roman82 Ссылка на комментарий
Artos 99 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) Roman82: ...Перерыл все моды, нигде подобной проверки не нашел... ... И главное, ни в одном моде я не нашел проверок на боеприпасы. Вот что странно. ... Матчасть я выучил 5 лет назад. Как видно рыл в модах пятилетней давности, когда они только появлялись ... и были единичны и в пару килобайт Глупо, подозревать, что подобных проверок нет в модах: метания гранат (от xStream), в схеме стрельбы неписями из подствольников и в схеме менеджера оружия. Не говори глупости! В любом мало-мальски глобальном моде таких проверок море ... Странно не отсутствие таких проверок в модах и в оригинальной игре, они там есть и у всех работают, а то, что именно у тебя не работает. Вот и думай, почему же у всех работает, а только у тебя отказывается ... А вот это: Убираю прекондишены на гранату и боеприпасы, диалог начинает работать.Скорее говорит об ошибке скрипта. Если бы потрудился бы последовать совету ColR_iT и расшифровал бы более понятн что же подразумеваешь под "работает" - возможно было бы и более конкретно что-то сказать. И, видно понятие лога в твоих "учениях" матчасти отсутствовало ... а то бы давно бы вывел в лог нужную информацию и не гадал бы на кофейной гуще. Изменено 14 Апреля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
ColR_iT 171 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 Roman82, только что проверил - всё работает! Вот содержимое моего файла: function have_n_items(section,number) if number == nil then number = 1 end local actor = db.actor if actor then local cnt=0 actor:iterate_inventory(function (dummy, item) if item:section()==section then cnt=cnt+1 end end, nil) return cnt>=number end return false end function have_1_medkit() if have_n_items("medkit_army",1) then log1("--Have medkit") else log1("!!Not have medkit") end end function have_2_tushenka() if have_n_items("conserva",2) then log1("--Have two conserva") else log1("!!Not have conserva") end end function have_2_bread() if have_n_items("bread",2) then log1("--Have two bread") else log1("!!Not have bread") end end function have_ammo() if have_n_items("ammo_5.45x39_ap",2) then log1("--Have two ammo") else log1("!!Not have ammo") end end function have_grenade() if have_n_items("grenade_rgd5",2) then log1("--Have two grenade") else log1("!!Not have grenade") end end function check_all () have_1_medkit() have_2_tushenka() have_2_bread() have_ammo() have_grenade() end Функция log1 выводит в консоль текст в скобках и при вызове функции check_all из диалога, я в консоли увидел пять строк: Have medkit Have two conserva Have two bread Have two ammo Have two grenade Так что делай выводы. Ссылка на комментарий
Roman82 4 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) ColR_iT, Artos Друзья, дело в том что в консоле и у меня все работает! А в диалоге нет. А теперь, самое интересное. Знаете в чем было дело? В схеме патроны и гранаты на поясе! Как я сразу не допер... К ним же там фэйки добавляются. Отключил схему, все заработало. Такие вот пироги. Ради бога прошу прощения за все это. Кто бы мог подумать. Спасибо большое за помощь. Изменено 14 Апреля 2012 пользователем Roman82 Ссылка на комментарий
Zander_driver 10 334 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 Вобщем, созрел вопрос, в той области с которой я раньше дела не имел, а пришлось. С чем работаю: ТЧ 1,0004 + Пак локаций из "Сообщества мапперов", последняя из выложенных в их шапке версий, на чистую игру (т.е. не АМК) В чем состоит цель: сделать на предбаннике стоянку новой группировки, Военных нато. Группировку сделал, прописал как полагается, для теста зачислил в нее Волка - все нормально, Волк стал натовцем и пошел гулять из деревни т.к. в деревне работы для него такого нету. Теперь, создаю смарт-террейн и респавнер на предбаннике, дописываю новый гулаг в скрипт, и ничего не происходит - на предбаннике никто не появляется. [11625] ; cse_abstract properties section_name = smart_terrain name = predb_mnato_smart_terrain position = -550.030944824219,14.6607055664063,286.763793945313 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 3881 distance = 9.09999942779541 level_vertex_id = 105016 custom_data = <<END [smart_terrain] type = predb_mnato_smart_terrain capacity = 8 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 20.5595703125 ; cse_alife_space_restrictor properties restrictor_type = 3 ; se_smart_terrain properties [11626] ; cse_abstract properties section_name = respawn name = predb_respawn_military_nato_post position = -550.030944824219,14.6607055664063,286.763793945313 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 3881 distance = 10 level_vertex_id = 105016 object_flags = 0xffffff3e custom_data = <<END [respawn] respawn_section = prb_milnato_respawn_1 max_count = 8 min_count = 4 max_spawn = 2 idle_spawn = medium conditions = 100 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1 ; cse_alife_space_restrictor properties restrictor_type = 0 ; se_respawn properties [predb_mnato_smart_terrain_kamp] points = p0 p0:name = name00 p0:position = -559.256103515625,14.6880102157593,282.203582763672 p0:game_vertex_id = 3881 p0:level_vertex_id = 92380 [predb_mnato_smart_terrain_walker_1_walk] points = p0,p1,p2 p0:name = name00 p0:position = -557.199768066406,14.3911476135254,284.340942382813 p0:game_vertex_id = 3881 p0:level_vertex_id = 94401 p0:links = p1(1) p1:name = name01 p1:position = -538.838684082031,17.3168258666992,290.285552978516 p1:game_vertex_id = 3881 p1:level_vertex_id = 121121 p1:links = p2(1) p2:name = name02 p2:position = -552.039306640625,14.2716541290283,307.063873291016 p2:game_vertex_id = 3881 p2:level_vertex_id = 101861 p2:links = p0(1) [predb_mnato_smart_terrain_walker_2_walk] points = p0,p1,p2 p0:name = name00 p0:position = -566.4130859375,14.8234539031982,262.069152832031 p0:game_vertex_id = 3880 p0:level_vertex_id = 80983 p0:links = p1(1) p1:name = name01 p1:position = -554.135864257813,15.1366109848022,262.086944580078 p1:game_vertex_id = 3880 p1:level_vertex_id = 98577 p1:links = p2(1) p2:name = name02 p2:position = -553.250915527344,14.7384147644043,272.294494628906 p2:game_vertex_id = 3881 p2:level_vertex_id = 100733 p2:links = p0(1) if type == "predb_mnato_smart_terrain" then for i = 1, 6 do t = { section = "logic@predb_mnato_smart_terrain_kamp", idle = 0, prior = 8-i, state = {0,1}, in_rest = "", out_rest = "" } table.insert(sj, t) end for i = 1, 2 do t = { section = "logic@predb_mnato_smart_terrain_walker_"..i, idle = 0, prior = 9-i, state = {0,1}, in_rest = "", out_rest = "" } table.insert(sj, t) end end if type == "predb_mnato_smart_terrain" then return function (gulag) return 0 end end -------------------------------------------------------------------------- -- Dynamic ltx -------------------------------------------------------------------------- function load_ltx(gname, type) if type == "predb_mnato_smart_terrain" then ltx = "[logic@predb_mnato_smart_terrain_kamp]\n".. "active = kamp@predb_mnato_smart_terrain\n".. "[kamp@predb_mnato_smart_terrain]\n".. "center_point = kamp\n".. "[logic@predb_mnato_smart_terrain_walker_1]\n".. "active = walker_1@predb_mnato_smart_terrain\n".. "[walker@predb_mnato_smart_terrain_1]\n".. "path_walk = walk_1\n".. "[logic@predb_mnato_smart_terrain_walker_2]\n".. "active = walker_2@predb_mnato_smart_terrain\n".. "[walker@predb_mnato_smart_terrain_2]\n".. "path_walk = walk_2\n" return ltx end return nil end if gulag_type == "predb_mnato_smart_terrain" then return npc_community == "military_nato" end Где тут искать ошибку - не могу взять в толк. Подскажите кто разбирается в данном вопросе. Если я не всю необходимую информацию привел - поправьте. голова уже кругом идет, мог и забыть что-то, все что требуется выложу. Заранее спасибо. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
Artos 99 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 Zander_driver 1. Появиться на локации у тебя кто-нибудь должен! Твой респавнер на локации предбанника обязан при старте игры заспавнить как минимум 4-х неписей и далее отреспавнивать по паре ... А вот останутся ли они в игре и на локации - это уже иной вопрос. Поставь вывод в лог строки при создании этим респавнером неписей и смотри - получат ли они работу или будут удалены. 2. Очень странно, что ты засунул работы для гулага на одной локации в скрипт работ для другой (gulag_escape.script). В чем заключается такой "экономный" смысл, когда ничего не мешает и везде именно так и делается писать работы и пр. параметры гулагов именно в скрипт работ для конкретной локации, регистрируя его в xr_gulag.script. 3. Заодно не мешает показать начало xr_gulag.script, где регистрируется и собственно новая локация в табличке level_groups. Если не зарегистрирована локация то ... откуда твои респавнящиеся неписи будут получать свойство squad? Не уверен что дефолтный 0 даст возможность работать именно в твоем гулаге. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Zander_driver 10 334 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 (изменено) Вынес гулаг в отдельный файл local t = {} local ltx = "" function load_job(sj, gname, type, squad, groups) if type == "predb_mnato_smart_terrain" then for i = 1, 6 do t = { section = "logic@predb_mnato_smart_terrain_kamp", idle = 0, prior = 8-i, state = {0,1}, in_rest = "", out_rest = "" } table.insert(sj, t) end for i = 1, 2 do t = { section = "logic@predb_mnato_smart_terrain_walker_"..i, idle = 0, prior = 9-i, state = {0,1}, in_rest = "", out_rest = "" } table.insert(sj, t) end end end function load_states(gname, type) return 0 end --'------------------------------------------------------------------------ --' Dynamic ltx --'------------------------------------------------------------------------ function load_ltx(gname, type) if type == "predb_mnato_smart_terrain" then local ltx = "[logic@predb_mnato_smart_terrain_kamp]\n".. "active = kamp@predb_mnato_smart_terrain\n".. "[kamp@predb_mnato_smart_terrain]\n".. "center_point = kamp\n".. "[logic@predb_mnato_smart_terrain_walker_1]\n".. "active = walker_1@predb_mnato_smart_terrain\n".. "[walker@predb_mnato_smart_terrain_1]\n".. "path_walk = walk_1\n".. "[logic@predb_mnato_smart_terrain_walker_2]\n".. "active = walker_2@predb_mnato_smart_terrain\n".. "[walker@predb_mnato_smart_terrain_2]\n".. "path_walk = walk_2\n" return ltx end return nil end function checkStalker(npc_community, gulag_type, npc_rank, se_obj) if gulag_type == "predb_mnato_smart_terrain" then return npc_community == "military_nato" end news_manager.send_tip(db.actor, "check_stalker", nil, nil, 12000) end function checkMonster(npc_community, gulag_type) return false end В gulag_escape.script соответственно все изменения закомментил, и вот level_gulags = {gulag_general, gulag_escape, gulag_garbage, gulag_agroprom, gulag_agroprom_underground, gulag_dark_valley, gulag_labx18, gulag_bar, gulag_military, gulag_radar, gulag_radar_u, gulag_yantar, gulag_pripyat, gulag_kishka, gulag_sarcofag, gulag_deadcity, gulag_predbannik} level_groups = {l01_escape = 1, l02_garbage = 2, l03_agroprom = 3, l03u_agr_underground = 4, l04_darkvalley = 5, l04u_labx18 = 6, l05_bar = 7, l06_rostok = 8, l07_military = 9, l08_yantar = 10, l08u_brainlab = 11, l10_radar = 12, l10u_bunker = 13, l11_pripyat = 14, l12_stancia = 15, l12u_sarcofag = 16, l12u_control_monolith = 17, l12_stancia_2 = 18, predbannik = 19} local gulag_tasks_file_name = "misc\\gulag_tasks.ltx" local gulag_tasks_ltx = ini_file( gulag_tasks_file_name ) local job_position_threshold = 120 --'50 -- расстояние до места работы при котором персонаж в онлайне считается достигшим места работы local job_idle_after_death = 600 -- в течении такого периода времени после смерти персонажа его работа будет недоступна idle_nil = nil idle_once = -1 idle_none = -2 local path_fields = { "path_walk", "path_main", "path_home", "center_point" } ----------------------------------------------------------------------- class "gulag" -- конструктор function gulag:__init(smrttrn, type, squad, groups, npc_info, capacity) self.smrttrn = smrttrn self.name = smrttrn:name() self.type = type self.squad = squad self.groups = groups or {} self.npc_info = npc_info self.capacity = capacity -- общая ёмкость гулага -- self.capacity_non_exclusive - ёмкость гулага для неэксклюзивных персонажей self.population = 0 -- Население гулага self.population_comed = 0 -- Уже пришедшее население гулага self.population_non_exclusive = 0 -- Неэксклюзивное население self.Object = {} -- объекты по id. Значения: nil-нету такого, true-есть в офлайне, game_object-есть в онлайн self.Object_begin_job = {} -- по id. true/nil достиг ли объект места своей работы self.Object_didnt_begin_job = {} -- по id. начинал ли объект хотя бы раз любую работу с момента добавления под смарт self.ObjectJob = {} -- по id. номер работы для каждого персонажа self.JobLoaded = {} -- для каждой работы загруженные из save данные self.Job_avail_in_state = nil self.state = 0 self.stateBegin = nil self.casualities = 0 end -- загрузка работ function gulag:load_jobs() self.Job = {} -- работы self.Job_avail_in_state_0 = {} gulag_tasks.loadJob( self.Job, self.name, self.type, self.squad, self.groups, self ) self:init_ltx( self.name, self.type ) table.sort( self.Job, function(a,b) return a.prior > b.prior end ) self:prepare_jobs_for_new_state() local capacity = 0 for i, job in ipairs( self.Job ) do if self:job_exists_in_state_0( job ) then table.insert( self.Job_avail_in_state_0, job ) capacity = capacity + 1 end if type( job.online ) == "string" then job.online_condlist = job.online job.online = xr_logic.parse_condlist( self.smrttrn, "gulag:setup_job_online", "job_online", job.online_condlist ) end end self.capacity = math.min( capacity, self.capacity ) self.capacity_non_exclusive = self.capacity -- printf("LOAD JOBS %s", tostring(self.name)) -- DEBUG -- self:validate_jobs() end -- проверки правильности набора работ. -- а) в любом состоянии кол-во 100-но доступных работ должно быть >= ёмкости смарта function gulag:validate_jobs() local jobs_avail_in_states = {} -- а) for i, job in ipairs( self.Job ) do if job.predicate == nil and job.idle == 0 and job.timeout == nil and job.fill_idle == nil then for j, state in ipairs( job.state ) do jobs_avail_in_states[state] = (jobs_avail_in_states[state] or 0) + 1 end end end for i, v in ipairs( jobs_avail_in_states ) do if v < self.capacity then print_table( self.Job ) abort( "[smart_terrain %s] type=%s state=%d capacity=%d: too few absolutely available jobs", self.name, self.type, i, self.capacity ) end end end -- подготовка гулага к работе function gulag:initialize() self.ObjectJobPathName = {} --' по id. имя патрульного пути места работы персонажа self.restrictors = {} --' по id. назначенные гулагом рестрикторы для каждого персонажа self:prepare_jobs() self.calculateStates = gulag_tasks.loadStates( self.name, self.type ) local ini = self.smrttrn:spawn_ini() local sect = "smart_terrain" if not ini:section_exist( sect ) then sect = "gulag1" end self.state_switch_0 = xr_logic.parse_condlist( self.smrttrn, "gulag1", "switch_0", utils.cfg_get_string(ini, sect, "switch_0", self.smrttrn, false, "", "") ) self.state_switch_1 = xr_logic.parse_condlist( self.smrttrn, "gulag1", "switch_1", utils.cfg_get_string(ini, sect, "switch_1", self.smrttrn, false, "", "") ) self.JobLoaded = nil end -- подготовить работы. -- подготовить данные о местоположении каждой работы; о объекте, который на ней занят. -- подсчитать ёмкость = min(кол-во работ в 0 состоянии, поле capacity в custom data) function gulag:prepare_jobs() local ptrl, path_name local job_loaded local empty_table = {} for i, job in ipairs( self.Job ) do job.num = i path_name = self:get_job_path_name( job ) ptrl = patrol( path_name ) job.path_name = path_name job.game_vertex_id = ptrl:game_vertex_id( 0 ) job.level_id = game_graph():vertex(job.game_vertex_id):level_id() job.position = ptrl:point( 0 ) job_loaded = self.JobLoaded[i] or empty_table job.begin = job_loaded.begin job.fill_idle = job_loaded.fill_idle job.idle_after_death_end = job_loaded.idle_after_death_end end local job for obj_id, jobN in pairs( self.ObjectJob ) do job = self.Job[jobN] job.object = obj_id self.ObjectJobPathName[obj_id] = job.path_name end end Я тут менял только первые две таблицы - где тут что еще изменить надо, не вижу... все последующее без изменений осталось. В итоге этих действий - при начале новой игры (точнее при попытке) вылет FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: error in error handling stack trace: Поставь вывод в лог строки при создании этим респавнером неписейА кстати как это сделать? Разве, используя данные респавнера, сам спавн производит скрипт? Я думал что раз в алл-спавне прописано, то этим движок занимается... Пара уточнений... Уйти своим ходом заспавненные нпс не могли, если они были. В этом паке тестовый левел-чейнджер почти от порога Сидоровича переносит на предбанник, я его настроил так чтобы переносил именно туда где должен располагаться новый гулаг. И еще одно - на локации предбанника изначально бродит некоторое количество неписей, но они все относятся к группировке одиночки. Соотв-но, места в гулаге занимать не должны, и не занимают, бродят вдалеке не проявляя интереса к этому месту. Но самих нпс более десятка. Это может как-то влиять? Изменено 15 Апреля 2012 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
Artos 99 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 Zander_driver, перебирайся с подобными ковыряниями и гданиями в соответствующий топик "[soC] Ковыряемся в файлах", т.к. к скрипам твои проблемы имеют самое последнее отношение. Там же (и в этом топике) почитай уже понаписанное про респавнеры. Вообще советую вначале подучить матчасть по статьям создания смартов/гулагов и потренироваться на каком-нибудь простеньком на том же Кордоне, а не замахиваться на все новое (локация+смат+гулаг+респавн+группировка+...), тем более делаешь все методом "тыка" и "в темную" (без инфы в логах). Если заглянешь в se_respawn.script, то даже по комментам разрабов игры и закомменированным строкам вывода в лог можно многое понять (было бы желание). Сам респавнер действительно спавнится движком по твоей инфе из алл.спавно, но с какого такого ... респавном неписей движек должен заниматься? Не путай переходы для ГГ с "переходами" для неписей. Тебе скорее всего и с этим еще придется повозиться ... но это уже потом, а пока - неписи НЕ используют переходов по которым ходит актор. Ну и как с респавнером, поставив вывод в лог в smart_terrain.script ты сможешь не гадать, а видеть идет/пришел/начал работу и сколько таких в твоем гулаге. И если нет таких - разбирайся, почему же твой гулаг не принимает на работу. Что мешает "ручками" заспавнить подходящих неписей и отследить - идут ли они в гулаг или нет и почему? "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Zander_driver 10 334 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 Вы меня не так поняли. Я прекрасно знаю что переходы для ГГ и переходы для неписей - не одно и то же. Я говорил о том что своим ходом они не могли оттуда уйти, т.к. я в очень короткое время сам туда прибегаю. Вот и все. Засим, отправляюсь заниматься воплощением того что вы мне посоветовали, спасибо) надеюсь переползать в ковырялки с последующими вопросами мне уже не придется, и все благополучно разрешится. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
wikreznow 0 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 Повторюсь - Возможно, ли убрать свет от ламп на статике при помощи all.spawn, то есть источник света удаляется, а освещение вокруг него остается, хочу полностью удалить освещение от ламп. И еще одно можете ли привести пример спавна ветряка (ветрогенератор) через all.spawn как в «Истории Прибоя» или «Paradise Lost beta» просмотрел весь all.spawn ИП так и не нашел как заспавнить, если спавнить просто модель вылетает и жалуется на анимацию.Заранее благодарен. Ссылка на комментарий
Clayman 104 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 Возмржно я и не прав, но насколько я понимаю - для статики освещение просчитывается на этапе компиляции локации от статических источников света и потом его никак не уберешь. Ссылка на комментарий
FANAT 117 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 В некотрых оружейных конфигах есть эти параметры, hit_probability_gd_novice = 0.80 hit_probability_gd_stalker = 0.85 hit_probability_gd_veteran = 0.90 hit_probability_gd_master = 0.95 но, не понятно, что именно они означают, где то стоят такие коменты, hit_probability_gd_novice = 0.80 ; точность стрельбы, hit_probability_gd_stalker = 0.85 ; когда оружие в руках НПС hit_probability_gd_veteran = 0.90 ; в зависимости от уровня hit_probability_gd_master = 0.95 ; сложности игры а где то, стоят коменты, в которых говорится, что это урон, которое наносит оружие в зависимости от уровня сложности.. Мог бы просто перевести слово "probability" - вопрос бы сразу отпал. Вероятность попадания НПС по ГГ в зависимости от сложности. Cyclone Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения' Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации Ссылка на комментарий
Saruman 8 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 (изменено) FANAT, читай коменты в одно предложение, это тоже самое что в actor.ltx но для данного оружия персонально Изменено 15 Апреля 2012 пользователем Saruman S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1 Vkontakte Добавление нового транспорта в сталкер Ссылка на комментарий
Marafon6540 765 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 (изменено) Коллеги, возник вопрос. Есть девайс. При его использовании на экран выводится окно. В этом окне я вывожу текстовую переменную: if string.len(opisTXT) > 0 then wopisTXT = CUIStatic() wopisTXT:SetWindowName("wopisTXT") wopisTXT:SetAutoDelete(true) wopisTXT:SetText("Рецепт: "..opisTXT) wopisTXT:SetTextColor(255,155,255,0) wopisTXT:SetFont(GetFontGraffiti19Russian()) wopisTXT:Init(600,140,320,200) self:AttachChild(wopisTXT) end Сама переменная opisTXT имеет (для примера) такой вид: Артефакт Капли получается путем совместной трансмутации в аномалии Карусель сразу четырех ингредиентов: Хвост собаки, Водка, Бинт, Выверт. Преобразование происходит в течении 5-10 минут. По идее этот текст должен выводиться в прямоугольник (wopisTXT:Init(600,140,320,200), а на практике - все выводится в одну строку и на экране я вижу только первые 4-5 слов, все остальное - улетает за край монитора. Не подскажете в чем моя ошибка? Есть ли возможность вывести такую переменную в несколько строк в указанный диапазон координат экрана? Изменено 15 Апреля 2012 пользователем Marafon6540 Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
AndreySol 215 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 SoC v 1.0005 В секции детектора 'detector_advances' есть такой параметр: night_vision_particle = damage_fx\heli_burnОн имеет какое-то значение для детектора ? Marafon6540 Проблема похоже в том, что окно класса CUIStatic по умолчанию не умеет отображать многострочный текст. И похоже методов класса, устанавливающих такое свойство нет. Решить проблему можно прописав Ваше окно в xml-файле, к примеру так: <st_wopisTXT x="600" y="140" width="320" height="200"> <text align="c" complex_mode="1" x="1" y="1" a="250"></text> </st_wopisTXT> здесь параметр complex_mode="1" как раз и обеспечивает многострочное отображение текста. Затем создать окно, использовав этот xml-файл: local xml = CScriptXmlInit() xml:ParseFile("имя_файла.xml")-- файл-описатель элементов -- wopisTXT = xml:InitStatic("st_wopisTXT", self) ну и далее, используйте wopisTXT для всех остальных манипуляций с окном. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти