<?xml version="1.0"?>
<rss version="2.0"><channel><title/><link>https://falcon-lair.com/blogs/blog/26-solyanka-gaydov-po-fiksam-moddingu-i-linux-geymingu/</link><description><![CDATA[
<p>
	Здарова, Пипл! Я здесь буду писать о всем связанном с фиксами SFW на линуксе, фиксами самого мода, и моддинговых утилит.
</p>

<p>
	 
</p>

<p>
	Надеюсь, это может упростить жизнь.
</p>
]]></description><language>ru</language><item><title>&#x417;&#x410; &#x420;&#x415;&#x421;&#x41F;&#x423;&#x411;&#x41B;&#x415;&#x41A;&#x423;!!!</title><link>https://falcon-lair.com/blogs/entry/63-za-respubleku/</link><description><![CDATA[
<p>
	<span style="font-size:20px;"><strong>ЗРАААСЬТЬ!</strong></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;"><strong>Я ТАК П0ДУМАЛ, ШТО РЕСПУБЛЕКА НЕ АБРЕЧЕНА БЫТЬ ПАРТИЕЙ ЖУЛЕКОВ И ВАРОВ,</strong></span>
</p>

<p>
	<span style="font-size:20px;"><strong>ПАСКОЛЬКО ТАМ ФЕГУРИРУЕТ МАЁ ЛЕЦО.</strong></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;"><strong>Я, КАКПОЛАГАЕЦА, ЩЕТАЮ, ШТО Я В РЕСПУБЛЕКЕ ГЛАГНЭ,</strong></span>
</p>

<p>
	<span style="font-size:20px;"><strong>ТАК-КАГ Я НАСТОЯЩЕ ГЕГАНТ МЫСЛЕ И ГЕНИ!!!</strong></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;"><strong>П0Д МАИМ РУКАВОЦТВАМ РЕСПУБЛЕКА ОБРЕЧЕНА НА РАСЦВЕТ,</strong></span>
</p>

<p>
	<span style="font-size:20px;"><strong>ТАК КАК Я ИГРАЮ Н0ВУЮ КАЛЕФОРНИЙСКУЮ РЕСПУБЛЕКУ ДЭЙВА.</strong></span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;"><strong>РЕСПУБЛЕКА ВАНЛАВ!!! ДОЛОЙ ПАРТИЮ ЛЕГИОНОВ!!!</strong></span>
</p>
]]></description><guid isPermaLink="false">63</guid><pubDate>Sun, 28 Dec 2025 06:39:28 +0000</pubDate></item><item><title>&#x41A;&#x438;&#x448;&#x43A;&#x438; &#x41F;&#x440;&#x43E;&#x434;&#x430;&#x436;&#x438; &#x41A;&#x43D;&#x438;&#x433;</title><link>https://falcon-lair.com/blogs/entry/58-kishki-prodazhi-knig/</link><description><![CDATA[
<p>
	<span style="color:#e74c3c;"><u><strong>ВСЕХ ЗАДОЛБАВШАЯ ПРОДАЖА КНИГ!!!</strong></u></span>
</p>

<p>
	<span style="color:#e74c3c;"><u><strong>ЭТА ЗАПИСЬ БЛОГА ДОБАВЛЕНА ДЛЯ САМОЛЮБОВАНИЯ.</strong></u></span>
</p>

<p>
	 
</p>

<p>
	Функция продажи, из диалога Йерлинг
</p>

<pre class="ipsCode" id="ips_uid_5349_7">
scn aaaSFWbtcBooksToCaps


int HowMuchToSale
ref rBook
int Count
int BookPrice
int iRewardXP

Begin Function { HowMuchToSale }
    If (GetINIFloat "BooksToCapsOptions:iFixedPrice" "BooksToCaps.ini") &gt; 0
        BookPrice = GetINIFloat "BooksToCapsOptions:iFixedPrice" "BooksToCaps.ini"
    Else
        BookPrice = Ceil ((Player.GetAV Science)/5 + (Player.GetAV Repair)/5 + (Player.GetAV Medicine)/5 + (Player.GetAV Barter)/5 + (Player.GetAV Survival)/5)
    EndIf

    If (GetINIFloat "BooksToCapsOptions:iRewardXP" "BooksToCaps.ini") &gt; 0
        iRewardXP = GetINIFloat "BooksToCapsOptions:iRewardXP" "BooksToCaps.ini"
    Else
        iRewardXP = 10
    EndIf

    If aaaSFWbtcBookPerkQuest.BookPerk &gt; 99

        foreach rBook &lt;- aaaSFWbtcBooksFormList
        
            Count = (Player.GetItemCount rBook)
            
            If Count &gt; 0
                
                If Count &gt; HowMuchToSale
                    Count = HowMuchToSale
                EndIf
                
                Player.RemoveItem rBook Count
                Player.AddItem f (Count * BookPrice)
                RewardXP (Count * iRewardXP)
                
                ; aaaSFWbtcBookPerkQuest.BookPerk += Count
                
                HowMuchToSale -= Count
                
                If HowMuchToSale == 0
                    Break
                EndIf
                
            EndIf
        loop

    Else

        foreach rBook &lt;- aaaSFWBooksFormList
        
            Count = (Player.GetItemCount rBook)
            
            If Count &gt; 0
                
                If Count &gt; HowMuchToSale
                    Count = HowMuchToSale
                EndIf
                
                Player.RemoveItem rBook Count
                Player.AddItem f (Count * BookPrice)
                RewardXP (Count * iRewardXP)
                
                aaaSFWbtcBookPerkQuest.BookPerk += Count
                
                HowMuchToSale -= Count
                
                If HowMuchToSale == 0
                    Break
                EndIf
                
            EndIf
        loop

    EndIf

    
    If aaaSFWbtcBookPerkQuest.DoOnceBookPerk == 0 &amp;&amp; aaaSFWbtcBookPerkQuest.BookPerk &gt; 19
        aaaSFWbtcBookPerkQuest.DoOnceBookPerk = 1
        ShowMessage aaaSFWBookPerkSpoiler
    EndIf
    If aaaSFWbtcBookPerkQuest.DoOnceBookPerk == 1 &amp;&amp; aaaSFWbtcBookPerkQuest.BookPerk &gt; 99
        aaaSFWbtcBookPerkQuest.DoOnceBookPerk = 2
        Player.AddPerk aaaSFWBookPerk
        StartQuest aaaSFWbtcBookPerkQuest
        ShowMessage aaaSFWBookPerkMsg
    EndIf
        
End</pre>

<p>
	Как видим, это скрипт-функция, вместе с циклом, но настроенная на то, что если перка продажи книг нет -- продавать обычные книги. В противном случае, при наличии перка, продаются книги из отбраковки перка.
</p>

<p>
	 
</p>

<p>
	Логика крайне проста: Мы получаем переменную "сколько продать" и идём по всем ячейкам форм-листа, и обрабатываем только те ячейки, внутри которых лежат книги. Пустые, с нулём книг пропускаем.
</p>

<p>
	 
</p>

<p>
	Дальше интересней -- в том случае, если количество книг в ячейке меньше-равно количества для продажи, то для текущей итерации цикла мы используем количество книг в ячейке, и за эту итерацию мы их продаём. Иначе, если количество больше, чем нужно продать, мы присваиваем переменной Количество Число для Продажи.
</p>

<p>
	 
</p>

<p>
	После успешной продажи мы отнимаем от числа Продажи значение Количество, и таким образом ничего не забываем.
</p>

<p>
	 
</p>

<p>
	Когда количество для продажи равно нулю -- мы прерываем цикл, чтобы не гонять его впустую и не вызывать ошибки.
</p>

<p>
	 
</p>

<p>
	Так-же, при продаже обычных книг (Не отбраковки!) мы прибавляем значение переменной перка.
</p>

<p>
	 
</p>

<p>
	Стоит упомянуть и то, что мы читаем 3 переменные из конфига BooksToCaps.ini . В конкретно данном скрипте у нас есть цена каждой книги, и получаемый опыт за книгу.
</p>

<p>
	 
</p>

<p>
	В самом конце скрипта -- рутина, связанная с показом сообщений о перке, и запуском квеста перка. Я специально не делал запуск квеста перка вместе с игрой, со скриптом проверки наличия перка, чтобы сэкономить процессорное время на операциях скрипта, так-что добавляемый перк носит чисто косметический характер.
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<pre class="ipsCode" id="ips_uid_5349_9">
scn aaaSFWbtcBookPerkScript


int BookPerk ;Used in Function
int DoOnceBookPerk ;Used in Function

int i
float BookRandom
int LuckAffects

int SFWBookGeneric1000Count
int SFWBookGeneric725Count
int SFWBookGeneric450Count

Begin GameMode

    If GetGameLoaded || GetGameRestarted
        LuckAffects = GetINIFloat "BooksToCapsOptions:bLuckAffects" "BooksToCaps.ini"
    EndIf
    
    while (Player.GetItemCount aaaSFWBooksFormList)
    
        If (Player.GetItemCount (ListGetNthForm aaaSFWBooksFormList i))
            
            Player.RemoveItem (ListGetNthForm aaaSFWBooksFormList i) 1 1
            If LuckAffects == 1
                BookRandom = GetRandomPercent + ((Player.GetAV Luck) / 2)
            Else
                BookRandom = GetRandomPercent + 2.5
            EndIf
            If BookRandom &gt; 101
                SFWBookGeneric1000Count += 1
            ElseIf BookRandom &gt; 99
                SFWBookGeneric725Count += 1
            ElseIf BookRandom &gt; 96
                SFWBookGeneric450Count += 1
            Else
                Player.AddItem aaaSFWBooksAll 1 1
            EndIf
        Else
            i += 1
      
            If eval i &gt;= (ListGetCount aaaSFWBooksFormList)
                i = 0
            EndIf
        EndIf
        
    loop

    
    If SFWBookGeneric1000Count || SFWBookGeneric725Count || SFWBookGeneric450Count
        ShowMessage aaaSFWbtcBooksVALUABLEmsg
    EndIf
    
    If SFWBookGeneric1000Count
        Player.AddItem SFWBookGeneric1000 SFWBookGeneric1000Count 1
        SFWBookGeneric1000Count = 0
    EndIf
    
    If SFWBookGeneric725Count
        Player.AddItem SFWBookGeneric725 SFWBookGeneric725Count 1
        SFWBookGeneric725Count = 0
    EndIf
    
    If SFWBookGeneric450Count
        Player.AddItem SFWBookGeneric450 SFWBookGeneric450Count 1
        SFWBookGeneric450Count = 0
    EndIf
End



Begin MenuMode 1009

    If GetGameLoaded || GetGameRestarted
        LuckAffects = GetINIFloat "BooksToCapsOptions:bLuckAffects" "BooksToCaps.ini"
    EndIf
    
    while (Player.GetItemCount aaaSFWBooksFormList)
    
        If (Player.GetItemCount (ListGetNthForm aaaSFWBooksFormList i))
            
            Player.RemoveItem (ListGetNthForm aaaSFWBooksFormList i) 1 1
            If LuckAffects == 1
                BookRandom = GetRandomPercent + ((Player.GetAV Luck) / 2)
            Else
                BookRandom = GetRandomPercent + 2.5
            EndIf
            If BookRandom &gt; 101
                SFWBookGeneric1000Count += 1
            ElseIf BookRandom &gt; 99
                SFWBookGeneric725Count += 1
            ElseIf BookRandom &gt; 96
                SFWBookGeneric450Count += 1
            Else
                Player.AddItem aaaSFWBooksAll 1 1
            EndIf
        Else
            i += 1
      
            If eval i &gt;= (ListGetCount aaaSFWBooksFormList)
                i = 0
            EndIf
        EndIf
        
    loop

    
    If SFWBookGeneric1000Count || SFWBookGeneric725Count || SFWBookGeneric450Count
        ShowMessage aaaSFWbtcBooksVALUABLEmsg
    EndIf
    
    If SFWBookGeneric1000Count
        Player.AddItem SFWBookGeneric1000 SFWBookGeneric1000Count 1
        SFWBookGeneric1000Count = 0
    EndIf
    
    If SFWBookGeneric725Count
        Player.AddItem SFWBookGeneric725 SFWBookGeneric725Count 1
        SFWBookGeneric725Count = 0
    EndIf
    
    If SFWBookGeneric450Count
        Player.AddItem SFWBookGeneric450 SFWBookGeneric450Count 1
        SFWBookGeneric450Count = 0
    EndIf
End</pre>

<p>
	Это скрипт перка. Здесь можно заметить, что цикл выполняется по принципу IF -- если в форм-листе есть книги, то цикл работает, а если нет -- то пропускает выполнение, тоесть, цикл для экономии процессорного времени не гоняет строки массива впустую.
</p>

<p>
	 
</p>

<p>
	Далее происходит вот что: Цикл обрабатывает одну ячейку форм-листа до те пор, пока она не исчерпается. Этим занят индекс i ... Когда ячейка исчерпывается на предмет наличия книг -- счётчик i прибавляется, и выполнение переходит на следующую ячейку. Конечно, когда счётчик выходит за предел форм-листа, то он сбрасывается на 0.
</p>

<p>
	 
</p>

<p>
	Принцип работы таков, что за итерацию цикла отнимается одна обычная книга (Не отбраковка!), далее, либо прибавляется книга отбраковки, пригодная для продажи, либо прибавляется счётчик одной из Ценных Книг, от Очень ценной, до "Довольно" ценной.
</p>

<p>
	 
</p>

<p>
	В конце скрипта проверяются счётчики Ценных Книг -- если хотя-бы одна больше нуля, то выводится сообщение о находке. Далее идёт секция добавления ценных книг согласно счётчику, с последующим обнулением счётчика.
</p>

<p>
	 
</p>

<p>
	Конечно-же ценные книги / отбраковка добавляются случайно. Здесь есть переменная BookRandom, с типом плавающая запятая. Функция GetRandomPercent даёт число от 0 до 99. И если указано влияние удачи в конфиге, то Удача делённая на 2 прибавляется к случайному числу. Если же влияние удачи отключено, то к рандомному числу прибавляется 2,5 -- эквивалент Удачи 5
</p>

<p>
	Коэффициенты поиска книг указаны как 1%, 2% и 3% -- от самой ценной до менее ценной.
</p>

<p>
	Число не попавшее в диапазон нахождения ценной книги преобразовывается в книгу-отработку
</p>

<p>
	 
</p>

<p>
	 
</p>

<pre class="ipsCode" id="ips_uid_5349_11">
[BooksToCapsOptions]

; Влияет ли удача на нахождение ценных книг
; Если 0 - то нет, если 1 - то да
bLuckAffects=1

; Фиксированная цена в крышках (целое число)
; Если 0 - то цена будет рассчитываться согласно навыкам
iFixedPrice=0

; Количество Очков Опыта за каждую проданную книгу
iRewardXP = 10
</pre>

<p>
	 
</p>

<p>
	 
</p>

<p>
	Как видим в скрипте предусмотрено всё для того, чтобы не потерять ценные книги.
</p>

<p>
	В том-числе были поправлены условия диалогов Йерлинг, чтобы потеря ценных книг при первой продаже была минимальной, а затем их и вовсе потерять было нельзя.
</p>
]]></description><guid isPermaLink="false">58</guid><pubDate>Thu, 13 Jul 2023 14:00:00 +0000</pubDate></item><item><title>&#x427;&#x442;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x435;&#x441;&#x43B;&#x438; &#x43D;&#x435; &#x441;&#x432;&#x43E;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; NV &#x43D;&#x430; Linux</title><link>https://falcon-lair.com/blogs/entry/56-chto-delat-esli-ne-svorachivaetsya-nv-na-linux/</link><description><![CDATA[
<p>
	Естественно, для того, чтобы игру можно было сворачивать - нужно поставить NVSE-плагин OneTweak.
</p>

<p>
	 
</p>

<p>
	Но что если вы используете NVHR, и игра при переключении окон зависает?
</p>

<p>
	 
</p>

<p>
	Все достаточно очевидно, вы скорее-всего включили консоль NVHR, и когда фокус переходит с главного окна на консоль - OneTweak не может захватить событие переключения, потому-что консоль является окном самого Вегаса, а значит, игра думает, что она по-прежнему находится в фокусе.
</p>

<p>
	 
</p>

<p>
	Что делать? - Отключить консоль NVHR, и игра будет нормально сворачиваться. <span>:-)</span>
</p>
]]></description><guid isPermaLink="false">56</guid><pubDate>Thu, 25 Aug 2022 06:23:11 +0000</pubDate></item><item><title>&#x41D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x44B;&#x435; &#x444;&#x43B;&#x430;&#x433;&#x438; &#x434;&#x43B;&#x44F; FNV Edit, &#x437;&#x430;&#x43C;&#x435;&#x442;&#x43A;&#x430; &#x434;&#x43B;&#x44F; &#x441;&#x435;&#x431;&#x44F;</title><link>https://falcon-lair.com/blogs/entry/55-neobhodimye-flagi-dlya-fnv-edit-zametka-dlya-sebya/</link><description><![CDATA[
<p>
	-IKnowWhatImDoing﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿ -AllowMasterFilesEdit -IKnowIllBreakMyGameWithThis -cp-general:1251 -cp-trans:1251
</p>

<p>
	 
</p>

<p>
	Конец записи
</p>
]]></description><guid isPermaLink="false">55</guid><pubDate>Wed, 24 Aug 2022 09:19:00 +0000</pubDate></item><item><title>GECK Extender, &#x444;&#x438;&#x43A;&#x441; &#x440;&#x435;&#x434;&#x430;&#x43A;&#x442;&#x43E;&#x440;&#x430; &#x434;&#x438;&#x430;&#x43B;&#x43E;&#x433;&#x43E;&#x432; &#x434;&#x43B;&#x44F; Win8-10 &#x438; Linux</title><link>https://falcon-lair.com/blogs/entry/54-geck-extender-fiks-redaktora-dialogov-dlya-win8-10-i-linux/</link><description><![CDATA[
<p>
	Как вы видели, редактор диалогов в гекке﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿﻿ нормально работает на вин 7 и 11, но на других актуальных вендах списки реплик и тем практически пустые. Этот﻿﻿﻿﻿﻿﻿﻿﻿﻿ же баг десятой венды вточности воспроизводит Wine.
</p>

<p>
	 
</p>

<p>
	Пустые они по одной причине: в гекке используется﻿﻿﻿﻿﻿﻿﻿ какая то недокументированная функция для виджетов списков, отчего вьюпорт списков сжат до 0-2 строк. Тоесть, все в списке﻿ есть, просто сам список невидимый.
</p>

<p>
	 
</p>

<p>
	ИСПРАВЛЕНИЕ.﻿﻿﻿
</p>

<p>
	<span style="font-size:1.4rem;">Берем GECK Extender и ставим в его конфиге﻿ значение ﻿bListEditFix﻿﻿﻿=﻿﻿1</span>
</p>

<p>
	<span style="font-size:1.4rem;">﻿</span>
</p>

<p>
	<span style="font-size:1.4rem;">Приятного моддинга! :-)</span>
</p>
]]></description><guid isPermaLink="false">54</guid><pubDate>Wed, 24 Aug 2022 08:54:23 +0000</pubDate></item><item><title>&#x41C;&#x430;&#x43D;&#x443;&#x430;&#x43B; &#x43F;&#x43E; Textures BSA Optimizer (Ordenador.exe)</title><link>https://falcon-lair.com/blogs/entry/53-manual-po-textures-bsa-optimizer-ordenadorexe/</link><description><![CDATA[
<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	<span style="font-size:36px;"><strong><a href="https://www.nexusmods.com/skyrim/mods/12801" rel="external nofollow" style="background-color:transparent;color:#ededed;">https://www.nexusmods.com/skyrim/mods/12801</a></strong></span>
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	 
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	Как вы наверное знаете, старый оптимизатор архивов и текстур по какой-то причине падает при попытке оптимизировать все архивы, и кажется, будто он безнадёжно<span>﻿<span>﻿</span><span>﻿</span><span>﻿</span><span>﻿</span><span>﻿</span><span>﻿<span>﻿</span></span></span><span> </span>сломан и не работает. Это не так, и вот почему: Мне удалось выяснить причину.
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	 
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	Он падает на обработке архивов из-за того, что не любит длинные имена и цифры в названиях, а значит, вы должны свои архивы переименовать на время оптимизации.<span>﻿</span>
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	Пример: GunRunnersArsenal - SFWR - Meshes_SFW-F3.bsa &gt;&gt; GRA - SFWR - Meshes_SFW-F(three).bsa
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	 
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	Так-же будьте очень внимательны: Нужные файлы BSA нужно<span>﻿</span><span> </span>очень аккуратно выбрать вручную, избегая файлов из других модов и Fallout - AI!.bsa - чтобы программа не упала и ничего не испортилось.
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	Помните: Оптимизатор текстур использует видеокарту, а значит, во время оптимизации играть ни во что нельзя!
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	 <span>﻿</span>
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	В остальном всё обычно: Во вкладке оптимизации текстур используйте профиль Medium - это безопасная конвертация с генерацией мипмапов (больше на этой вкладке ничего трогать не нужно). Будьте<span>﻿</span><span> </span>так-же очень бдительны: Опция Resize в оптимизации текстур может искарёжить текстуры интерфейса и карты.<span>﻿</span>
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	 <span>﻿</span><span>﻿</span>
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	На вкладке оптимизации BSA выберите сжатие и дедубликацию внутренних одинаковых<span> </span><span>﻿<span>﻿</span></span>файлов.
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	 <span>﻿</span>
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	=======
</p>

<p style="background-color:rgba(10,10,10,.8);color:#d6d6d6;font-size:14px;">
	После оптимизаций<span>﻿</span><span> </span>не<span> </span><span>﻿</span>забудьте<span>﻿</span><span> </span><span>﻿</span>дефрагментировать<span>﻿</span><span> </span><span>﻿</span>диск
</p>
]]></description><guid isPermaLink="false">53</guid><pubDate>Wed, 24 Aug 2022 08:48:38 +0000</pubDate></item></channel></rss>
