aka_sektor 1 464 Опубликовано 23 Февраля Поделиться Опубликовано 23 Февраля Такой вопрос, как там движок дружит с квестами? Возможно такое, чтобы можно было добавлять новые квесты, скрипты, модели и прочее, а потом загружать сохранение? Может кто-то решил этот момент? Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB Ссылка на комментарий
Pavel_2000 5 Опубликовано 2 Марта Поделиться Опубликовано 2 Марта Подключил новую локацию к зп после запаковки а потом распаковки готового алл спавна заметил что много путей walk и look перешли в файл way новой локки Так вот вопрос. Это не критично или я что то сделал не так? Добавлено Купер, 2 Марта Перемещено из темы. Ссылка на комментарий
SoP 117 Опубликовано 3 Марта Поделиться Опубликовано 3 Марта Ну если будешь использовать эти пути в своих работах в смартах и логике НПС - конечно нужно соответственно переименовывать, смотреть, что там в look и тестировать потом. Если планируешь все заново пути расставлять - просто удали этот файл путей в СДК. Скачать ассеты для Unity и UE || Контент для CG художников Ссылка на комментарий
WinCap 314 Опубликовано 31 Марта Поделиться Опубликовано 31 Марта Здравствуйте. Подскажите, пожалуйста, возможно ли из скриптов определить, как и в каком положении перемещается Actor? Спринтует он, бежит, идёт или прыгает? S.T.A.L.K.E.R. CoP Objects (upd 28.10.24) Ссылка на комментарий
WinCap 314 Опубликовано 9 Апреля Поделиться Опубликовано 9 Апреля Здравствуйте. Подскажите, пожалуйста, как реализовать схему для зомби, когда они лежат на земле, как бы мёртвые, а при подходе ГГ встают и атакуют? S.T.A.L.K.E.R. CoP Objects (upd 28.10.24) Ссылка на комментарий
h0N0r 324 Опубликовано 9 Апреля Поделиться Опубликовано 9 Апреля 2 часа назад, WinCap сказал: как реализовать схему для зомби С ТЧ берёшь mob_fake_death.script, дополняешь modules.script, блок - Загрузка модулей монстров: load_scheme("mob_fake_death", "mob_fake_death", stype_mobile) В gulag_general.script находишь блок local job_type_by_scheme и добавляешь: ["mob_fake_death"] = "point_job", Логика: [mob_fake_death] on_info = {=dist_to_actor_le(4)} mob_home@zombie или mob_walker@zombie Ещё есть движ. правка, отключает их видимость (как врагов), когда они в этой схеме. https://bitbucket.org/sv3nk/la-code/commits/67b6d5ea63424d9bacee9e93e34a4e8be759d258 1 2 https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий
WinCap 314 Опубликовано 26 Мая Поделиться Опубликовано 26 Мая Здравствуйте. Помогите разобраться с очередной аномалией Зоны. Я как-то вдруг заметил, что при переходе в секцию "walker" из любой другой, NPC идут не на первую точку пути, а на ближайшую к ним. Подскажите, пожалуйста, так всегда было, с оригинальной игры, или это я чего-то "накосячил"? S.T.A.L.K.E.R. CoP Objects (upd 28.10.24) Ссылка на комментарий
Kirgudu 1 180 Опубликовано 26 Мая Поделиться Опубликовано 26 Мая @WinCap, судя по скриптам, так оно и в оригинале. Смотрим xr_walker.script: action_walker_activity:activate_scheme(loading, npc) --> action_walker_activity:reset_scheme(loading, npc) --> self.move_mgr:reset(...) Далее в move_mgr.script: move_mgr:reset(...) --> сброс self.current_point_index = nil (плюс self.can_use_get_current_point_index = false до окончания экстраполяции в extrapolate_callback) --> move_mgr:setup_movement_by_patrol_path() где видим такую развилочку: if self.current_point_index then self.object:set_start_point(self.current_point_index) self.object:set_patrol_path(self.path_walk, patrol.next, patrol.continue, true) else -- наш случай self.object:set_patrol_path(self.path_walk, patrol.nearest, patrol.continue, true) end 1 1 Инструмент Ссылка на комментарий
WinCap 314 Опубликовано 26 Мая Поделиться Опубликовано 26 Мая (изменено) 56 минут назад, Kirgudu сказал: так оно и в оригинале. где видим такую развилочку: Я правильно понимаю, что это, скорее всего, сделано, чтобы находясь в середине пути NPC, после save/load’а, продолжил путь с ближайшей точки, а не топал на самое начало? Надо как-то выкручиваться. Придётся поставить в начале пути ещё один одноточечный путь и промежуточную секцию логики. Изменено 26 Мая пользователем WinCap 1 S.T.A.L.K.E.R. CoP Objects (upd 28.10.24) Ссылка на комментарий
Kirgudu 1 180 Опубликовано 26 Мая Поделиться Опубликовано 26 Мая 26 минут назад, WinCap сказал: находясь в середине пути NPC, после save/load’а, продолжил путь с ближайшей точки Точную причину мы, не общаясь с разработчиками, не узнаем, но очень похоже на правду. Я бы тоже так сделал. 2 Инструмент Ссылка на комментарий
bsanek628 1 Опубликовано 28 Мая Поделиться Опубликовано 28 Мая (изменено) Господа, подскажите гайд / инструкцию, который можно почитать, как добавить в игру, в данном случае в ЗП, новые боеприпасы? Ну, как новые, 12х76 "Дротик" вырезанный хочу в игру добавить, для начала. И улучшенный 7,62х54 7Н14 из ТЧ/ЧН. Для обучения, я думаю, пойдёт. ЗЫ. от А до Я, начиная от модели, иконки и описания, до настройки в конфиге, прописке этого патрона в нужных файлах, чтобы игра его читала и не вылетала, прописке торговцам, в тайники и т.д. Ибо полный нуб в этом. Изменено 28 Мая пользователем bsanek628 Ссылка на комментарий
Norman Eisenherz 297 Опубликовано 28 Мая Поделиться Опубликовано 28 Мая По образу и подобию ТЧ: искать в [config\] и [meshes\] упоминания ammo_12x76_dart, делать так же. Для совместимости с ЗП можно скопировать все файлы и настройки обычной дроби, а после задать buck_shot = 1 (одна пуля) и поправить иконку/текст/текстуру. Это не даст точного понятия, что за что отвечает (надо читать справочник или выяснять методом тыка), но это позволит добавить патроны в игру. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
bsanek628 1 Опубликовано 28 Мая Поделиться Опубликовано 28 Мая (изменено) С этим ладно. Меня также интересует как и куда добавить этот патрон, в какие файлы, чтобы игра видела обновку и не вылетала, а также добавление торговцам и в лут тайников. Плюс сделать "подсветку" патрона при наведении курсора на оружие. Изменено 28 Мая пользователем bsanek628 Ссылка на комментарий
Zander_driver 10 331 Опубликовано 28 Мая Поделиться Опубликовано 28 Мая @bsanek628 Ну очевидно надо добавить секцию патрона в список боеприпасов соответствующих конфигов оружия. Подсветку оттуда же из этих списков сам подтянет движок. А по торговцам и тайникам надо спецов по ЗП дождаться, я им не являюсь. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
Norman Eisenherz 297 Опубликовано 28 Мая Поделиться Опубликовано 28 Мая Искать упоминания похожих патронов в конфигах со словами trade и treasure (ЗП: secret) в названии. В этом плане игра не отличается от ТЧ: все данные введены вручную, без рандома и часто одинаковыми простынями "не продается / продается по одной цене для всех NPC" – ссылочные секции есть только в настройках лута в [death_generic.ltx] и входящих файлах. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Купер 2 792 Опубликовано 28 Мая Поделиться Опубликовано 28 Мая Там только один нюанс: CoP движок рассчитан на два типа боеприпасов на калибр. Баги полезут, емнип, "по мелочёвке". Вроде неправильной иконки на HUD-e etc. 1 Ссылка на комментарий
Norman Eisenherz 297 Опубликовано 29 Мая Поделиться Опубликовано 29 Мая @bsanek628 В ЗП ввиду спавна тайников россыпью конфиг является текстовым описанием, хотя и не совсем отделен от объектов в игре: с одной стороны, новые предметы не учитываются без правок [all.spawn] и добавления секции [secret] в custom_data каждого объекта; с другой стороны, изменение количества предметов или удаление имеющихся секций конфига в текущей игре все же приводит к пересчету, хотя и по неизвестной логике – 4 предмета, если в конфиге один, два предмета при указании трех и т. п. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
SWEAW 2 Опубликовано 30 Мая Поделиться Опубликовано 30 Мая Всем привет. Подскажите, пожалуйста, как изменить trade_manager.script, чтобы торговцы обновляли ассортимент не раз в реальные сутки, а раз в несколько игровых, и, не менее важно, чтобы обновление ассортимента не вызывалось сейв-лоадом (потому что это по сути своей абуз). Знаю, что то ли в ОП-2.2, то ли в ОГСР, в Аномали и ее производных есть такие фичи, но грамотно их оттуда выдернуть, даже покурив несколько гайдов и уроков, не получается, там несколько другие файлы и их структура. Сам пытался заменить упоминания time_global() в вышеописанном скрипте на game.time(): Скрытый текст local trade_manager = { } function trade_init(npc, cfg) --' printf("TRADE INIT[%s]", npc:name()) --' if trade_manager[npc:id()] == nil then trade_manager[npc:id()] = {} --' end trade_manager[npc:id()].cfg_ltx = cfg trade_manager[npc:id()].config = ini_file(cfg) -- коэфициенты покупки local str = utils.cfg_get_string(trade_manager[npc:id()].config, "trader", "buy_condition", npc, true, "") if str == nil then abort("Incorrect trader settings. Cannot find buy_condition. [%s]->[%s]", npc:name(), cfg) end trade_manager[npc:id()].buy_condition = xr_logic.parse_condlist(npc, "trade_manager", "buy_condition", str) -- коэфициенты продажи str = utils.cfg_get_string(trade_manager[npc:id()].config, "trader", "sell_condition", npc, true, "") if str == nil then abort("Incorrect trader settings. Cannot find sell_condition. [%s]->[%s]", npc:name(), cfg) end trade_manager[npc:id()].sell_condition = xr_logic.parse_condlist(npc, "trade_manager", "sell_condition", str) -- список закупки str = utils.cfg_get_string(trade_manager[npc:id()].config, "trader", "buy_supplies", npc, false, "") if str ~= nil then trade_manager[npc:id()].buy_supplies = xr_logic.parse_condlist(npc, "trade_manager", "buy_supplies", str) end -- buy_item_condition_factor str = utils.cfg_get_string(trade_manager[npc:id()].config, "trader", "buy_item_condition_factor", npc, false, "", "0.7") if str ~= nil then trade_manager[npc:id()].buy_item_condition_factor = xr_logic.parse_condlist(npc, "trade_manager", "buy_item_condition_factor", str) end end function update(npc) local tt = trade_manager[npc:id()] if tt == nil then printf("TRADE [%s]: tt is nil", npc:name()) return end if tt.update_time ~= nil and tt.update_time < game.time() then return end tt.update_time = game.time() + 3600000 local str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_condition) if(str=="" or str==nil) then abort("Wrong section in buy_condition condlist for npc [%s]!", npc:name()) end if tt.current_buy_condition ~= str then --'printf("TRADE [%s]: buy condition = %s", npc:name(), str) npc:buy_condition(tt.config, str) tt.current_buy_condition = str end str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.sell_condition) if(str=="" or str==nil) then abort("Wrong section in buy_condition condlist for npc [%s]!", npc:name()) end if tt.current_sell_condition ~= str then printf("TRADE [%s]: sell condition = %s", npc:name(), str) npc:sell_condition(tt.config, str) tt.current_sell_condition = str else printf("TRADE [%s]: current = %s sell = %s", npc:name(), tostring(tt.current_sell_condition), tostring(str)) end str = tonumber(xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_item_condition_factor)) if tt.current_buy_item_condition_factor ~= str then npc:buy_item_condition_factor(str) tt.current_buy_item_condition_factor = str end if tt.buy_supplies == nil then return end str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_supplies) if(str=="" or str==nil) then abort("Wrong section in buy_condition condlist for npc [%s]!", npc:name()) end if tt.current_buy_supplies ~= str then if tt.resuply_time ~= nil and tt.resuply_time < game.time() then return end --'printf("TRADE [%s]: buy_supplies = %s", npc:name(), str) npc:buy_supplies(tt.config, str) tt.current_buy_supplies = str tt.resuply_time = game.time() + 24*3600000 end end function save(obj, packet) local tt = trade_manager[obj:id()] set_save_marker(packet, "save", false, "trade_manager") --' Сохраняем присутствует ли инициализированная торговля в принципе. if tt == nil then printf("TRADE SAVE [%s]: ignored", obj:name()) packet:w_bool(false) return else packet:w_bool(true) end packet:w_stringZ(tt.cfg_ltx) printf("TRADE SAVE [%s]: current_buy_condition = %s", obj:name(), tostring(tt.current_buy_condition)) if tt.current_buy_condition == nil then packet:w_stringZ("") else packet:w_stringZ(tt.current_buy_condition) end printf("TRADE SAVE [%s]: current_sell_condition = %s", obj:name(), tostring(tt.current_sell_condition)) if tt.current_sell_condition == nil then packet:w_stringZ("") else packet:w_stringZ(tt.current_sell_condition) end printf("TRADE SAVE [%s]: current_buy_supplies = %s", obj:name(), tostring(tt.current_buy_supplies)) if tt.current_buy_supplies == nil then packet:w_stringZ("") else packet:w_stringZ(tt.current_buy_supplies) end local cur_tm = game.time() if tt.update_time == nil then packet:w_s32(-1) else packet:w_s32(tt.update_time - cur_tm) end if tt.resuply_time == nil then packet:w_s32(-1) else packet:w_s32(tt.resuply_time - cur_tm) end set_save_marker(packet, "save", true, "trade_manager") end function load(obj, packet) set_save_marker(packet, "load", false, "trade_manager") local a = packet:r_bool() if a == false then printf("TRADE LOAD [%s]: ignored", obj:name()) return end trade_manager[obj:id()] = {} local tt = trade_manager[obj:id()] tt.cfg_ltx = packet:r_stringZ() printf("TRADE LOAD [%s]: cfg_ltx = %s", obj:name(), tostring(tt.cfg_ltx)) tt.config = ini_file(tt.cfg_ltx) a = packet:r_stringZ() printf("TRADE LOAD [%s]: current_buy_condition = %s", obj:name(), tostring(a)) if a ~= "" then tt.current_buy_condition = a obj:buy_condition(tt.config, a) end a = packet:r_stringZ() printf("TRADE LOAD [%s]: current_sell_condition = %s", obj:name(), tostring(a)) if a ~= "" then tt.current_sell_condition = a obj:sell_condition(tt.config, a) end a = packet:r_stringZ() printf("TRADE LOAD [%s]: current_buy_supplies = %s", obj:name(), tostring(a)) if a ~= "" then tt.current_buy_supplies = a end local cur_tm = game.time() a = packet:r_s32() if a ~= -1 then tt.update_time = cur_tm + a end a = packet:r_s32() if a ~= -1 then tt.resuply_time = cur_tm + a end set_save_marker(packet, "load", true, "trade_manager") end ----------- NOT TO DELETE!!!!!!!!! called from engine function get_buy_discount(npc_id) local str = utils.cfg_get_string(trade_manager[npc_id].config, "trader", "discounts", nil, false, "", "") if(str=="") then return 1 end local sect = xr_logic.pick_section_from_condlist(db.actor, nil, xr_logic.parse_condlist(nil, "trade_manager", "discounts", str)) str = utils.cfg_get_number(trade_manager[npc_id].config, sect, "buy", nil, false, 1) return str end ----------- NOT TO DELETE!!!!!!!!! called from engine function get_sell_discount(npc_id) local str = utils.cfg_get_string(trade_manager[npc_id].config, "trader", "discounts", nil, false, "", "") if(str=="") then return 1 end local sect = xr_logic.pick_section_from_condlist(db.actor, nil, xr_logic.parse_condlist(npc, "trade_manager", "discounts", str)) str = utils.cfg_get_number(trade_manager[npc_id].config, sect, "sell", nil, false, 1) return str end Cуть и размерность вроде одинаковая, только одна для времени ИРЛ, вторая для игрового. Но в игре обновление перестало происходить вообще, хотя и вылетов не было. Вторая проблема, с отвязкой от сейв-лоада, вообще с мертвой точки не двигается, не могу понять, почему даже оригинальные реальные сутки напрочь игрой игнорируются, сбиваясь сохранением-загрузкой. Два-три дня уже над этим сижу, близких референсов не нашел, сам пока не вывожу. Ссылка на комментарий
abramcumner 1 141 Опубликовано 30 Мая Поделиться Опубликовано 30 Мая 5 часов назад, SWEAW сказал: Два-три дня уже над этим сижу Не вижу следов логирования в коде. Пока ты точно не установишь, что происходит, понимание может приходить годами и так и не прийти. Стырь откуда-нибудь функцию log/dbglog/... Добавь в найденные тобой места вывод в лог времени, чисел, записываемых/читаемых из нет-пакета, и прочего. Дополняй логирование до тех пор, пока не будешь точно знать, какие условия выполняются или не выполняются и почему. В принципе в этот момент, ты уже будешь знать решение. Если нет, возвращайся с логом. Ровно также и с заменой на игровое время. Не должно быть ситуации "но в игре обновление перестало происходить вообще, хотя и вылетов не было". С помощью логов ты легко увидишь, почему обновление перестало проиходить. 1 Ссылка на комментарий
SWEAW 2 Опубликовано 30 Мая Поделиться Опубликовано 30 Мая 2 часа назад, abramcumner сказал: Стырь откуда-нибудь функцию log/dbglog/... Добавь в найденные тобой места вывод в лог времени, чисел, записываемых/читаемых из нет-пакета, и прочего. Мне и этот дефолтный ЗПшный скрипт не поддается, потому что ни опыта в скриптинге, ни достаточного времени на изучения LuA, ни энтузиазма/понимания по отношению к любому виду программирования нет. Ресурсов хватает пока лишь на попытки адаптаций того, что уже в шаблонном или похожем виде где-то было или есть, собственно за этим я сюда и обратился, возможно, изначально некорректно обозначив просьбу: я ищу код или файлы скриптов из разных модов, где реализованы описанные механики (отвязка ассортимента торговли от сейв-лоада и его обновление по игровому времени). Скачивать целиком моды по 20-30-40 гигабайт ради поиска нескольких текстовых файлов - времязатратно и нерационально. Если ни у кого таких файлов под рукой нет, то ищу указания на ошибку в коде или его дополнения от тех, кто уже с подобным сталкивался/имеет достаточный опыт в этом деле, ведь, как мне кажется, для них это будет на несколько порядков проще, чем мне еще больше пытаться усложнять (добавлять функции) и так плохо воспринимаемую информацию без гарантии по итогу найти решение самостоятельно. Если такого рода помощь в этой теме не получить и она предназначена для другого, подскажите, пожалуйста, куда можно обратиться. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти