Перейти к контенту

[SoC] Ковыряемся в файлах


Halford

Рекомендуемые сообщения

@liutyy , в принципе уже ответили... в более другом месте.

Там в строках, отвечающих за перечисление наименований образцов оружия, имеется ограничение на определённое количество символов в каждой строке.

Простейший вариант: сокращение наименований образцов в номенклатуре оружейки, если всё-таки не получится, то искать нормальный патчер под патч 1.0004, убирающий это ограничение, на основе Cut X-Ray / X-Ray Extensions.

Собственно, что его искать :biggrin:?

Тут или тут.

  • Согласен 1
  • Полезно 4

Поделиться этим сообщением


Ссылка на сообщение

@liutyy , явно что-то не так делаешь / не доделываешь.

10.07.2024 в 19:25, liutyy сказал:

Скачал, поставил,

Что, куда и зачем?

Чтобы правка заработала, оригинальный движок нужно предварительно "пропатчить" перед использованием. Вообще, сама правка, похоже, патченезависима в данном случае (1.0004/1.0006). Можно поробовать прямо отсюда взять более свежую "портативку" от @macronа (поискать в теме) и пропатчить движок с соответствующими комментариями в патчере. Естественно - тот, который от 4-го патча. Что, как, где - есть в описании в архиве с "компилятором" :biggrin:.

 

@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

Поделиться этим сообщением


Ссылка на сообщение
Скрытый текст

Ребят, вот честно, без обид...

1 час назад, DarkSnowder сказал:

с чем может быть связана пропажа оружия у НПС?

Ну... наверное, не так что-то сделал, куда-то забыл что-то добавить... Перепутал, недоглядел...

Причин можно придумать навскидку - очень много.

Без фактического описания внесённых изменений гадать можно - до морковкиного заговенья.

  • Согласен 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

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

Поделиться этим сообщением


Ссылка на сообщение

@Anikot , до запятой инструкций не подскажу, к сожалению. Банально не помню за давностью лет :biggrin:. А куда смотреть...
Всё это настраивается в файле gamemtl.xr. Суть реализации: взаимодействие "материала" мутанта с "материалами" различных типов поверхностей (асфальт и т.д.).
m_boar.ltx

di-ORP86P.jpeg

 

ShaderEditor SDK
di-WHZFP2.jpeg

 

Можно ещё сторонние утилиты попробовать для редактирования. Наподобие этого (на perl скриптах от @KD87), вот правда, опять не помню точно - возможность редактирования этой тулзой искомого :biggrin:.

 

  • Нравится 2
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

@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

Поделиться этим сообщением


Ссылка на сообщение

Да движку "фиолетово" на самом деле.

Скрытый текст
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

Поделиться этим сообщением


Ссылка на сообщение

@DarkSnowder , рестрикторы с логикой sr_light. Тут или поиском по теме.
Для уровней напрямую в sr_light.script табл.:

local indoor_levels = {
}

 

  • Нравится 1
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение

@Okichi , не совсем уверен, что именно искомое, но попробуй здесь посмотреть, что-то такое подобное @НаноБот делал в своё время, возможно какие-то разумные мысли возникнут. Оно, правда, на XRE реализовано.

  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение
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

Поделиться этим сообщением


Ссылка на сообщение

@Капрал Хикс , размер - да. Тоже движком. Там даже в теме есть об этом. Собственно, оно же не зря в "старичке" XRE появилось и дальше пошло :biggrin::

Скрытый текст
;============================================
;==========ПОЛНОЭКРАННЫЕ ЗАСТАВКИ============
;=============FULLSCREEN INTROS==============
;============================================
		;0x004D8F24 16
		;0x0041302A 5
		;0x0041399B 5
		;0x004135F4 5
		;0x00413610 6		

 

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

@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 часа назад, Balavnik сказал:

Z_AMEBA. Где этот класс добавляется?

В данном случае в движке (присутствует по умолчанию).

В общем случае, если без использования и правок в исходниках, то c помощью class_registrator.script:

здесь здесь здесь.

  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...