We now on XenForo 2.3! Testing on the way!
zhenek, привет. Извини, долго отсутствовал потому, что днюху праздновал.
Первый способ добавления иконок через скрипт с привязкой к длц идентификатору ты уже знаешь.
Второй способ(без скриптов), просто иконки в ресурс пихаешь и используешь их в файлах локализации:
Code:
[GusIDVP_RUS X2BodyPartTemplate]
DisplayName="<img src='img:///UILibrary_IDVP.IDVP_Icon'> [IDVP] Гас Тарболс"
[SteroidIDVP_RUS X2BodyPartTemplate]
DisplayName="<img src='img:///UILibrary_IDVP.IDVP_Icon'> [IDVP] Бобби `Анаболик` Гонтарски"
....
где UILibrary_IDVP - ресурс с иконками и IDVP_Icon - название иконки.
 
vwtrotsky, может быть ты знаешь ответ на мой вопрос?
Как сделать, чтобы новобранцы спавнились не с дефолтным автоматом, а с рандомным? (В том случае, если у меня есть куча идентичных по статам автоматов, к примеру)
 
vwtrotsky, с днюхой тебя! :-)

Ох ты ж блин! А я мудрил с длц и скриптами))) второй способ гораздо проще.
Ну ничего, зато можно сказать немного расширил кругозор )

Ещё есть вопрос, но напишу как домой приеду, с телефона неудобно)
 
Добрый вечер!

Намедни сделал тут маленький перевод вот этого мода на добавочный класс бойцов: Steam Workshop :: Paladin Class for LWP & LW2
Добавляет класс паладин - поддержка/штурмовик с навыками энергощита, как у адвентовких щитоносцев.
+ в архиве два совсем маленьких перевода модов beatdown skill (Steam Workshop :: Beatdown Skill) и extract coprses (Steam Workshop :: Extract Corpses).
Делал для себя, но может кому пригодится.
---------------------------------------------------------------------------------
А у меня ещё меж тем вопрос: Кто нибудь знает как выключить ограничение на 100 навыка в LW2?
 

Attachments

vwtrotsky, подскажи, в каком файле зашита информация про кнопки на тактическом экране ( Завершение Хода, Поворот камеры налево и пр)
 
  • Мне нравится
Reactions: Gonanda
Может кто знает где прописаны функции этих кнопок?
 
  • Мне нравится
Reactions: Gonanda
Machine Gun Kelly, это чтоб раздавались автоматы из модов с лутом? Х.З. я такое не смотрел, так что пока не подскажу. Надо будет глянуть на досуге.

zhenek, для тактического экрана ресурсы тянутся из файлов gfxTacticalHUD_SF.upk и TacticalResources_SF.upk
Ты чем просматриваешь ресурсы зашитые в upk?
 
  • Мне нравится
Reactions: Gonanda and zhenek
vwtrotsky, биг спасибо!!
[DOUBLEPOST=1490082900][/DOUBLEPOST]vwtrotsky, либо через UE, либо через Notepad+
но во втором случае сперва какая-то билебереда идет, а потом код
хз чем правильно если честно :-)
 
Last edited:
  • Мне нравится
Reactions: Gonanda
zhenek, Ты чем просматриваешь ресурсы зашитые в upk? Я для быстрого просмотра ресурсов в upk файлах пользуюсь еще старым UE Viewer`ом. Большинство архивов можно просмотреть на предмет графических ресурсов.
 
vwtrotsky, вооо, вот им сегодня попробую)

на самом деле я хочу вытянуть оттуда параметры на эту кнопку, чтобы впихнуть в код.
Делаю мод на подтверждение окончания хода через крестик сверху)
Хз получится нет, но думаю сам процесс будет полезным, для общего развития)

Общий смысл структуры мода понимаю.
В локализации - прописывается название окна, само сообщение с параметрами да или нет.

В скриптах прописывается при каких условиях окно всплывает.
Код я скомуниздил с одного мода, только немного его адаптирую к моим условиям.
Посмотрим че выйдет. Просто ради самого процессса интересно этим заниматься ;)
 
  • Мне нравится
Reactions: Gonanda
zhenek, это случаем не с умного завершения хода с перезарядкой и овервотчем? Не помню, правда, как называется...
 
  • Мне нравится
Reactions: Gonanda
vwtrotsky, нет, я немного не об этом.
Как известно, новобранец aka лемминг спавнится у нас с дефолтным автоматом (собственно, в ванильной версии игры, она такая одна).
У меня к примеру, стоит мод Steam Workshop :: M4A1 (и ещё много подобного оружия). В своем количестве они неограничены, как и дефолтное оружие. По правилам "принадлежности" - полностью аналогичны (т.е. доступны всем классам, кроме пулеметчика и снайпера).

Как сделать, чтобы новоприбывшие бойцы (При найме, или начале новой игры) спавнились со случайным, доступным им оружием, а не с дефолтным автоматом?
 
Machine Gun Kelly, ну стандартные средства, раздающие случайным образом оружие новобранцам, на ум не приходят. Нужно писать отдельный скриптовый мод для этого. Но это уже мод управляющий модами, что не очень правильно. Было бы проще, если бы авторы модов, добавляющих оружие, сами добавляли раздачу этого оружия солдатам при спавне(случайно или нет, это уже не столь важно).
Можно попробовать закрепить определенный вид оружия за определенным классом, добавив его в список классового оружия. Если поставить на первую позицию списка, то при получении класса боец будет уже вооружен этим оружием. Но это будет не случайная раздача.
 
vwtrotsky, тогда у меня к тебе ещё два вопроса, если не против.

1. Как отключить автозамену оружия при получении класса? Т.е. чтобы пушка которую я выдал ему в бытность новобранцем, не заменялась бы на дефолт автомат при становлении хакером/ниндзей/рейнджером/гренадером/разрушителем (Т.е. классы использующие автоматы, а не специальное оружие)

2. Собственно, где найти списки классового оружия для автозамены?
 
Machine Gun Kelly, тут не все так просто. В игре все поделено по классам с пресетами на каждый класс. Т.е. новичёк(Rookie) - это тоже класс, но с ограниченными возможностями кастомизации и возможностью(по дефолту) носить только винтовку. По этому при получении бойцом повышения с новичка до бойца со специализацией(уже боец с классом) происходит замена класса и смена пресетов для бойца, в том числе и смена оружия.
Классы бойцов описываются в ванили в XCOM2\XComGame\Config\DefaultClassData.ini а в лонг варе 2 в XCOM2\XComGame\Mods\LW_Overhaul\Config\XComClassData.ini
В лонг варе 2 новичек не тронут, а вот другие классы заменены. Т.е. новичка меняешь как для ванили, а другие классы для лонг вара соответственно.
Оружие прописывается для каждого класса в виде
Code:
+AllowedWeapons=(SlotType=eInvSlot_PrimaryWeapon, WeaponType="rifle")
+AllowedWeapons=(SlotType=eInvSlot_PrimaryWeapon, WeaponType="shotgun")
+AllowedWeapons=(SlotType=eInvSlot_SecondaryWeapon, WeaponType="sword")
+AllowedWeapons=(SlotType=eInvSlot_HeavyWeapon, WeaponType="heavy")
Первое в списке PrimaryWeapon ставится по дефолту при получении бойцом класса.
 
  • Очень помог!
Reactions: Gonanda
Добрый вечер!

Ещё один маленький перевод, новый класс бойцов от того же автора что и паладины.
Steam Workshop :: [LWP] Fixer Class(Cyborg Hitman)
Взломщик - робот-убийца вооруженный снайперской винтовкой, владеет атакующей веткой специалиста.
Реализация так себе, на троечку. Получаются из обычных новичков, ничего особенного. Хотя сама идея - на 5.
---------------------------------
Я этот мод немного переделал под себя.
 

Attachments

Last edited:
  • Мне нравится
Reactions: Gonanda
aleksandr777, по поводу изменений характеристик гаусс и плазменного оружия - поднял пробой для гаусс-оружия(Coilguns) на единичку( файл XComGameData_WeaponData.ini) параметр Pierce с единички поднял до двойки и немного уменьшил штрафы к меткости на средних и дальних расстояниях MEDIUM_COIL_RANGE и LONG_COIL_RANGE, а для плазмы(Beam) увеличил пробой и разрушение брони на двоечку и единичку соответственно ( Pierce и Shred ) и увеличил штрафы к меткости на средние и дальние расстояния. Штрафы для меткости поднимал для плазмы, руководствуясь тем, что плазма быстро теряет устойчивость, а для гауса уменьшал штрафы к меткости из-за больших скоростей зарядов, что увеличивает их стабильность на средних и дальних дистанциях.
 
vwtrotsky, короче, думал я, ковырял тот мод, и пришел к выводу что ничерта не соображаю)

Я знаю для чего нужен этот код в папке Локализация - текст всплывающего окна
Code:
[X2TargetingMethod_ConfirmFreeReload]
PopupTitle=Wasting free reload
PopupBody=You have ammo remaining.  Are you sure you want to use your free reload?
AcceptMessage=Reload
CancelMessage=Cancel

Далее идет папка Scr с классами.
У меня там два файла.
X2DownloadableContentInfo_ConfirmFreeReload и X2TargetingMethod_ConfirmFreeReload
Оба имеют формат .uc а это значит что в них прописаны скрипты.

Первый файл без моих комментов:

Code:
class X2DownloadableContentInfo_ConfirmFreeReload extends X2DownloadableContentInfo;

static event OnPostTemplatesCreated()
{
    local X2AbilityTemplateManager abilityManager;
    local X2AbilityTemplate reloadTemplate;
   
    abilityManager = class'X2AbilityTemplateManager'.static.GetAbilityTemplateManager();

    reloadTemplate = abilityManager.FindAbilityTemplate('Reload');
    reloadTemplate.TargetingMethod = class'X2TargetingMethod_ConfirmFreeReload';
}

(комменты - мои размышления на тему :wink:)
Code:
class X2DownloadableContentInfo_ConfirmFreeReload extends X2DownloadableContentInfo; // шапка массива

static event OnPostTemplatesCreated() // создается событие, когда указанный в шапке мод включон
{
    local X2AbilityTemplateManager abilityManager; // идет обращение к указанному скрипту
    local X2AbilityTemplate reloadTemplate; // вот тут я не понимаю. создается новый шаблон reloadTemplate или он существует? В скриптах я его не нашел. Насколько я понял он расшифровывается ниже.
   
    abilityManager = class'X2AbilityTemplateManager'.static.GetAbilityTemplateManager(); // указание из чего состоит абилитиМанагер - это класс х2абилитиШаблонМенеджер и??? создать абилитиШаблонМанеджер??

    reloadTemplate = abilityManager.FindAbilityTemplate('Reload'); // здесь задается что такое есть шаблон перезарядки. Не понимаю что означает слово в скобках. Перевод знаю, не знаю значения в коде.
    reloadTemplate.TargetingMethod = class'X2TargetingMethod_ConfirmFreeReload'; // шаблон перезарядки работает по целенаправленому методу
}



теперь 2 файл
сперва без комментов

Code:
class X2TargetingMethod_ConfirmFreeReload extends X2TargetingMethod;

var localized string PopupTitle;
var localized string PopupBody;
var localized string AcceptMessage;
var localized string CancelMessage;

var bool IsConfirmed;
var XComGameState_Ability AbilityState;

function Init(AvailableAction InAction)
{
    super.Init(InAction);
    IsConfirmed = false;
    AbilityState = XComGameState_Ability(`XCOMHISTORY.GetGameStateForObjectID(InAction.AbilityObjectRef.ObjectID));
}

function bool VerifyTargetableFromIndividualMethod(delegate<ConfirmAbilityCallback> callback)
{
    if (!IsConfirmed && HasAmmo() && IsLimitedFreeReload())
    {
        ShowFreeReloadPopup(callback);
        return false;
    }

    return true;
}

private function ShowFreeReloadPopup(delegate<ConfirmAbilityCallback> callback)
{
    local TDialogueBoxData dialog;
    local XComPresentationLayerBase presentationLayer;

    m_fnConfirmAbilityCallback = callback;
    presentationLayer = XComPlayerController(class'WorldInfo'.static.GetWorldInfo().GetALocalPlayerController()).Pres;

    dialog.eType = eDialog_Warning;
    dialog.strTitle = PopupTitle;
    dialog.strText = PopupBody;
    dialog.strAccept = AcceptMessage;
    dialog.strCancel = CancelMessage;
    dialog.fnCallback = DialogCallback;

    presentationLayer.UIRaiseDialog(dialog);
}

simulated private function DialogCallback(eUIAction eAction)
{
    if (eAction == eUIAction_Accept)
    {
        IsConfirmed = true;
        m_fnConfirmAbilityCallback();
    }
}

private function bool IsLimitedFreeReload()
{
    local XComGameState_Item weaponState;
    local array<X2WeaponUpgradeTemplate> weaponUpgrades;
    local UnitValue numFreeReloadsUsed;
    local int numFreeReloadsRemaining, i;

    weaponState = AbilityState.GetSourceWeapon();
    weaponUpgrades = weaponState.GetMyWeaponUpgradeTemplates();
    UnitState.GetUnitValue('FreeReload', numFreeReloadsUsed);

    for (i = 0; i < weaponUpgrades.Length; i++)
    {
        if(weaponUpgrades[i].NumFreeReloads > 0)
        {
            numFreeReloadsRemaining = int(weaponUpgrades[i].NumFreeReloads - numFreeReloadsUsed.fValue);
            if(numFreeReloadsRemaining > 0 && numFreeReloadsRemaining < 10) //Check it's a small number to support mods that have "infinite" free reloads
            {
                return true;
            }
        }
    }
    return false;
}

private function bool HasAmmo()
{
    return AbilityState.GetSourceWeapon().Ammo > 0;
}

// Necessary to prevent red-screens, for some reason
function int GetTargetIndex()
{
    return 0;
}

теперь с комментами

Code:
class X2TargetingMethod_ConfirmFreeReload extends X2TargetingMethod; // шапка

var localized string PopupTitle;
var localized string PopupBody;
var localized string AcceptMessage;
var localized string CancelMessage;

var bool IsConfirmed;
var XComGameState_Ability AbilityState;   // что участвует в скрипте

function Init(AvailableAction InAction)
{
    super.Init(InAction); //инициация чего то там ???
    IsConfirmed = false; // ???
    AbilityState = XComGameState_Ability(`XCOMHISTORY.GetGameStateForObjectID(InAction.AbilityObjectRef.ObjectID)); // ???
}

function bool VerifyTargetableFromIndividualMethod(delegate<ConfirmAbilityCallback> callback)
{
    if (!IsConfirmed && HasAmmo() && IsLimitedFreeReload()) // какие то условия
    {
        ShowFreeReloadPopup(callback); //вызывать диалог ( его расшифровка идет ниже)
        return false; // возврат к предыдущему скрипту со значением "ложь"
    }

    return true; // ???
}

private function ShowFreeReloadPopup(delegate<ConfirmAbilityCallback> callback)
{
    local TDialogueBoxData dialog;
    local XComPresentationLayerBase presentationLayer;

    m_fnConfirmAbilityCallback = callback;
    presentationLayer = XComPlayerController(class'WorldInfo'.static.GetWorldInfo().GetALocalPlayerController()).Pres;

    dialog.eType = eDialog_Warning;
    dialog.strTitle = PopupTitle;
    dialog.strText = PopupBody;
    dialog.strAccept = AcceptMessage;
    dialog.strCancel = CancelMessage;
    dialog.fnCallback = DialogCallback;

    presentationLayer.UIRaiseDialog(dialog);
}

simulated private function DialogCallback(eUIAction eAction)
{
    if (eAction == eUIAction_Accept)
    {
        IsConfirmed = true;
        m_fnConfirmAbilityCallback();
    }
}

private function bool IsLimitedFreeReload()
{
    local XComGameState_Item weaponState;
    local array<X2WeaponUpgradeTemplate> weaponUpgrades;
    local UnitValue numFreeReloadsUsed;
    local int numFreeReloadsRemaining, i;

    weaponState = AbilityState.GetSourceWeapon();
    weaponUpgrades = weaponState.GetMyWeaponUpgradeTemplates();
    UnitState.GetUnitValue('FreeReload', numFreeReloadsUsed);

    for (i = 0; i < weaponUpgrades.Length; i++)
    {
        if(weaponUpgrades[i].NumFreeReloads > 0)
        {
            numFreeReloadsRemaining = int(weaponUpgrades[i].NumFreeReloads - numFreeReloadsUsed.fValue);
            if(numFreeReloadsRemaining > 0 && numFreeReloadsRemaining < 10) //Check it's a small number to support mods that have "infinite" free reloads
            {
                return true;
            }
        }
    }
    return false;
}

private function bool HasAmmo()
{
    return AbilityState.GetSourceWeapon().Ammo > 0;
}

// Necessary to prevent red-screens, for some reason
function int GetTargetIndex()
{
    return 0;
}

в конце кода я так понял идет скрипт перезарядки.

Как это можно поменять на кнопку крестика и реализовать просто подтверждение завершение хода с последующим его наступлением? :-)
 
  • Мне нравится
Reactions: Gonanda
zhenek, вот со скриптами я тебе, к сожалению, помочь не смогу. В свое время не учил С++, а в Unreal Engine он бы очень пригодился. Могу только посоветовать сходить на русскоязычное сообщество UE и посмотреть документацию.
 
  • Мне нравится
Reactions: Gonanda
vwtrotsky, эх! хорошо! буду дальше пробовать разобраться)
 
Доделал последнюю часть IDVP
Steam Workshop :: IvanDolvich_RUS Voice Pack w.3
16 новых голосов - 12 мужских и 4 женских.

Всего в трех частях содержится 39 голосов (31 и 8).
Осталось переработать пул фраз первой части. Мне он не очень нравится.
И на этом проект IDVP будет завершен.

После возьму таймаут. Подумаю чем бы занять мозг.
Хочется чего-то посерьезнее, но опыта маловато.
Почитаю мануалы не торопясь, и буду эксперементировать потихоньку:bomb::sarcastic:
 
Перенесу тему шанса поджигания для оружия сюда, ибо тут уместнее оно.

vwtrotsky, aleksandr777 и все, кто разбирается, плиз хелп ми иф ю кэн.

Прошерстил я файлы XComGameData_WeaponData.ini, XComLW_Overhaul.ini и бегло просмотрел все (вроде) конфиги LW2 и игры вообще. Кучу времени убил, закопал и на могилке написал:

вот какая заковыка... в оригинале мы имеем следующее зажигательное оружие - патроны "Дракон", гранату, плазменный меч и жилетку Hellwave, не помню как это перевели. Я вообще не нашел характеристик данных патронов (как и некоторых других), кроме условий исследования, цены пр-ва и веса. У меча и гранат никаких параметров поджога я тоже не обнаружил. Характеристик жилета, кроме доп. ОЗ, не нашел. Огнемет... он не поджигает цель (?!). По крайней мере в описании это не указано и у меня ни разу не прокатывало. И это имхо очень тупо. Поджигает перк "Выкуривание". И где собственно код "выкуривания", который отвечает за поджог, я тоже не нашел. Магия какая-то. Ну или я слеповат стал с годами.

Отсюда вопрос - кто-то вообще знает, в каких файлах прописано всё то, что я не нашел (см. выше)? Хоть подскажите, куда смотреть, а там я попробую разобраться...
 
Simply Grey, надо грузить все конфиги в Notepad++ и скать подобное, думаю где то в перках должно быть.
[DOUBLEPOST=1490373488,1490369267][/DOUBLEPOST]Simply Grey, Вот что нашел в папке LW XComGameData_WeaponData.ini стр1278 Gauntlet_Secondary_CONVENTIONAL_BASEDAMAGE=(Damage=3, Spread=1, PlusOne=50, Crit=0, Pierce=0, Shred=0, Tag="", DamageType="Napalm")
т.е. тип урона "Napalm", в XComClassData.ini стр 70 есть та же способность
; CPL
+SoldierRanks=( aAbilityTree=( (AbilityName="BiggestBooms_LW" ), (AbilityName="Fortify" ), (AbilityName="NapalmX", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon) \\
все абилки огнеметчика в XComLW_SoldierSkills.ini стр 84+
DamageType скорее всего зашиты в скриптах, так что даа... Разве, что смотреть моды где что то поджигают и искать в них.
 
  • Очень помог!
Reactions: Gonanda
Правила Форумов обязательны к прочтению! Используйте полезные закладки. ВСЕ изображения и файлы загружаются только на наш сервер! Для этого необходимо использовать кнопку "Прикрепить файлы" или просто перетащить необходимые файлы/изображения с вашего компьютера в окно редактора.