Купер 2 803 Опубликовано 2 Июля @liutyy , в принципе уже ответили... в более другом месте. Там в строках, отвечающих за перечисление наименований образцов оружия, имеется ограничение на определённое количество символов в каждой строке. Простейший вариант: сокращение наименований образцов в номенклатуре оружейки, если всё-таки не получится, то искать нормальный патчер под патч 1.0004, убирающий это ограничение, на основе Cut X-Ray / X-Ray Extensions. Собственно, что его искать ? Тут или тут. 1 4 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 11 Июля @liutyy , явно что-то не так делаешь / не доделываешь. 10.07.2024 в 19:25, liutyy сказал: Скачал, поставил, Что, куда и зачем? Чтобы правка заработала, оригинальный движок нужно предварительно "пропатчить" перед использованием. Вообще, сама правка, похоже, патченезависима в данном случае (1.0004/1.0006). Можно поробовать прямо отсюда взять более свежую "портативку" от @macronа (поискать в теме) и пропатчить движок с соответствующими комментариями в патчере. Естественно - тот, который от 4-го патча. Что, как, где - есть в описании в архиве с "компилятором" . @Hind , грубо говоря, никак. Без серьёзных правок движка и самих моделек. Расчёт урона такого типа (и по actor-у в том числе) работает по принципу "попал/не попал в кость", а их в самих модельках - строго определённое, константное количество. Скрытый текст config\creatures\actor.ltx ... [actor_damage] ;bone_name = <hit_scale>,<fwd_damage_anim_index>,<wound_scale> ;<hit_scale> - коэфф. изменения хита (уменьшения здоровья) ;<wound_scale> - коэфф. изменения величины открытой раны ... default = 1.0, -1, 1.0 bip01_pelvis = 1.0, 10, 1.5 bip01_spine = 1.0, 10, 1.5 ... UPD: @Hind, если под оригинал на update коллбеке, то, как минимум, через какой-либо таймер (простейший вариант для понимания сути). Коллбэк просто банально "сработать" не успевает. Слишком малы временнЫе интервалы. 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 13 Июля Скрытый текст Ребят, вот честно, без обид... 1 час назад, DarkSnowder сказал: с чем может быть связана пропажа оружия у НПС? Ну... наверное, не так что-то сделал, куда-то забыл что-то добавить... Перепутал, недоглядел... Причин можно придумать навскидку - очень много. Без фактического описания внесённых изменений гадать можно - до морковкиного заговенья. 1 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 23 Июля Weapon.cpp Скрытый текст float CWeapon::Weight() { float res = CInventoryItemObject::Weight(); if(IsGrenadeLauncherAttached()&&GetGrenadeLauncherName().size()){ res += pSettings->r_float(GetGrenadeLauncherName(),"inv_weight"); } if(IsScopeAttached()&&GetScopeName().size()){ res += pSettings->r_float(GetScopeName(),"inv_weight"); } if(IsSilencerAttached()&&GetSilencerName().size()){ res += pSettings->r_float(GetSilencerName(),"inv_weight"); } if(iAmmoElapsed) { float w = pSettings->r_float(*m_ammoTypes[m_ammoType],"inv_weight"); float bs = pSettings->r_float(*m_ammoTypes[m_ammoType],"box_size"); res += w*(iAmmoElapsed/bs); } return res; } 1 2 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 28 Июля @Anikot , до запятой инструкций не подскажу, к сожалению. Банально не помню за давностью лет . А куда смотреть... Всё это настраивается в файле gamemtl.xr. Суть реализации: взаимодействие "материала" мутанта с "материалами" различных типов поверхностей (асфальт и т.д.). m_boar.ltx ShaderEditor SDK Можно ещё сторонние утилиты попробовать для редактирования. Наподобие этого (на perl скриптах от @KD87), вот правда, опять не помню точно - возможность редактирования этой тулзой искомого . 2 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 8 Августа @liutyy , модеры в качестве тонтон-макутов сгодятся? См. abs.script -> function checkskillrank() --* тут много всего сначала: получаем ранг ГГ, проверяем ативные слоты и наличие оружие в нём, что не надо "портить" т.д. --* и ради чего всё затевалось: --* проверяем ранг ГГ и если состояние оружия выше заданного, "портим" его до нужного значения. if act_rank == "novice" and current_weap:condition() > 0.65 then current_weap:set_condition(0.65) end if act_rank == "experienced" and current_weap:condition() > 0.75 then current_weap:set_condition(0.75) end if act_rank == "veteran" and current_weap:condition() > 0.85 then current_weap:set_condition(0.85) end end end end end --* для брони аналогично. Вызывается сама функция там же: function procfunctions(what) ... checkskillrank() ... end А потом через кучу прокладок в итоге в bind_stalker.script на апдейт-коллбеке. 1 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 23 Августа Да движку "фиолетово" на самом деле. Скрытый текст void CAI_Stalker::on_after_take (const CGameObject *object) { if (!g_Alive()) return; if (!READ_IF_EXISTS(pSettings,r_bool,cNameSect(),"use_single_item_rule",true)) return; const CWeapon *new_weapon = smart_cast<const CWeapon*>(object); if (!new_weapon) return; TIItemContainer::iterator I = inventory().m_all.begin(); TIItemContainer::iterator E = inventory().m_all.end(); for ( ; I != E; ++I) update_conflicted (*I,new_weapon); } Формально к on/off вопросов даже больше. 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 27 Августа @DarkSnowder , рестрикторы с логикой sr_light. Тут или поиском по теме. Для уровней напрямую в sr_light.script табл.: local indoor_levels = { } 1 2 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 4 Сентября @Anikot Взрывающиеся объекты (бочки, канистры, динамиты и т.п.). weapons.ltx -> соответствующий объект: --* Ударная волна blast = 1.50 ; урон blast_r = 8 ; радиус действия blast_impulse = 250 ; кинетическая энергия ;delete blast_impulse_factor = 1 --* Осколки frags = 5 ; количество frags_r = 15 ; разлёт frag_hit = 0.75 ; урон frag_hit_impulse = 150 ; кинетическая энергия hit_type_blast = explosion ; тип урона для ударной волны hit_type_frag = burn ; тип урона для осколков Для мин, да: zone_mine_field.ltx: effective_radius = 1 ; радиус hit_type = explosion ; тип урона min_start_power = 0.99 ; минимальный урон max_start_power = 1.00 ; максимальный урон 6 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 10 Сентября Потому что половина здесь (в качестве примера): character_desc_yantar.xml -> <name>GENERATE_NAME_stalker</name> А половина в симуляции: character_desc_simulation.xml -> <name>zombie_name</name> 1 5 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 18 Сентября ui_wpn_params.script. Местами, кстати, подвирает. 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 21 Сентября Здесь что-то подобное обсуждалось. Правда, в общем виде. 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 27 Сентября @DarkSnowder , здесь ещё посмотри. Универсальная функция проверки предмет/количество в инвентаре ГГ. 1 1 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 11 Октября @Okichi , не совсем уверен, что именно искомое, но попробуй здесь посмотреть, что-то такое подобное @НаноБот делал в своё время, возможно какие-то разумные мысли возникнут. Оно, правда, на XRE реализовано. 2 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 13 Октября 15 часов назад, Balavnik сказал: Где хранится информация о загрузочных экранах локации? Похоже, вычитывается непосредственно движком при загрузке уровня. Где-то здесь, если не ошибаюсь: x_ray.cpp. void CApplication::Level_Set(u32 L) { if (L>=Levels.size()) return; Level_Current = L; FS.get_path ("$level$")->_set (Levels[L].folder); string_path temp; string_path temp2; strconcat (sizeof(temp),temp,"intro\\intro_",Levels[L].folder); temp[xr_strlen(temp)-1] = 0; if (FS.exist(temp2, "$game_textures$", temp, ".dds")) hLevelLogo.create ("font", temp); else hLevelLogo.create ("font", "intro\\intro_no_start_picture"); CheckCopyProtection (); } 15 часов назад, Balavnik сказал: Как сделать меняющиеся intro? Один из самых простых вариантов здесь. Суть идеи: вместо одной статической картинки используются динамические (в виде .seq элементов). Рабочие ссылки и возможные "подводные камни" там же в теме. 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 13 Октября @Капрал Хикс , размер - да. Тоже движком. Там даже в теме есть об этом. Собственно, оно же не зря в "старичке" XRE появилось и дальше пошло : Скрытый текст ;============================================ ;==========ПОЛНОЭКРАННЫЕ ЗАСТАВКИ============ ;=============FULLSCREEN INTROS============== ;============================================ ;0x004D8F24 16 ;0x0041302A 5 ;0x0041399B 5 ;0x004135F4 5 ;0x00413610 6 1 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 15 Октября @Balavnik Скрытый текст --* работы if type == "esc_corps" then t = { section = "logic@esc_corps_wounded", idle = 4, prior = 10, state = {0}, online = false, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.name == "esc_vagon_wounded" end } table.insert(sj, t) t = { section = "logic@esc_corps_wounded", idle = 0, prior = 10, state = {1}, online = true, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.name == "esc_vagon_wounded" end } table.insert(sj, t) end --* состояние if type == "esc_corps" then return function(gulag) if has_alife_info("tutorial_wounded_start") then return 1 else return 0 end end end 4 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано 29 Октября 2 часа назад, Balavnik сказал: Z_AMEBA. Где этот класс добавляется? В данном случае в движке (присутствует по умолчанию). В общем случае, если без использования и правок в исходниках, то c помощью class_registrator.script: здесь здесь здесь. 2 Поделиться этим сообщением Ссылка на сообщение
Купер 2 803 Опубликовано вчера в 03:36 @Пруткоф , XrCompress. Где-то там раньше была тема с более свежей версией. Но её, похоже, тамошние командиры благополучно снесли с лихим гиканьем и должным энтузиазмом. Здесь. RTFM как водится. 6 Поделиться этим сообщением Ссылка на сообщение