Голосование

Понравился ли вам War Sails?












Оформление



Пользователей
  • Всего: 30088
  • Последний: dorientee
Сейчас на форуме
Пользователи: 5
Гостей: 428
Всего: 433

0 Пользователей и 1 Гость просматривают эту тему.

Тема: Как зафиксировать снаряжение в <EquipmentRoster>  (Прочитано 291 раз)

  • Сообщений: 7
    • Просмотр профиля
Многим известно, что bannerlord рандомным образом распределяет снарягу юнита, если в spnpccharacters для этого юнита прописано два или более <EquipmentRoster>'а.
Например

<Equipments>
<EquipmentRoster>
<equipment slot="Item0" id="Item.empire_lance_1_t3"/>
<equipment slot="Item1" id="Item.ironrim_riders_kite_shield"/>
<equipment slot="Item2" id="Item.empire_sword_2_t3"/>
<equipment slot="Head" id="Item.roundkettle_over_imperial_cloth"/>
<equipment slot="Cape" id="Item.studded_imperial_neckguard"/>
<equipment slot="Body" id="Item.eastern_studded_leather"/>
<equipment slot="Gloves" id="Item.padded_mitten"/>
<equipment slot="Leg" id="Item.leather_cavalier_boots"/>
<equipment slot="Horse" id="Item.empire_horse"/>
<equipment slot="HorseHarness" id="Item.stripped_leather_harness"/>
</EquipmentRoster>
<EquipmentRoster>
<equipment slot="Item0" id="Item.empire_lance_1_t3"/>
<equipment slot="Item1" id="Item.ironrim_riders_kite_shield"/>
<equipment slot="Item2" id="Item.empire_sword_3_t3"/>
<equipment slot="Head" id="Item.roundkettle_over_imperial_cloth"/>
<equipment slot="Cape" id="Item.studded_imperial_neckguard"/>
<equipment slot="Body" id="Item.eastern_studded_leather"/>
<equipment slot="Gloves" id="Item.padded_mitten"/>
<equipment slot="Leg" id="Item.leather_cavalier_boots"/>
<equipment slot="Horse" id="Item.empire_horse"/>
<equipment slot="HorseHarness" id="Item.stripped_leather_harness"/>
</EquipmentRoster>

Вопрос в том как зафиксировать тот или иной набор снаряги, чтобы юнит был одет строго так как указано в ростере, а не в перемешку (меч из одного ростера, а, например, шлем - из второго.) Нашел тему на форуме taleworlds -

https://forums.taleworlds.com/index.php?threads/where-is-the-code-which-spawns-troops-and-chooses-gear-from-their-xml-equipment-rosters.456361/

Да мои познания в c# коде недостаточны. Может быть кто-нибудь пробовал что-то менять на этой ниве? Как например сделать, чтобы ростеры были фиксированы или хотя бы один из них. Спасибо
  • Фракция: Родоки
  • Сообщений: 946
  • За активную деятельность, связанную с публикациями и помощью другим посетителям
    • Просмотр профиля
Что мешает оставить один набор снаряги в xml?
  • Сообщений: 7
    • Просмотр профиля
Что мешает оставить один набор снаряги в xml?
Желание сохранить разнообразие. Но не хаотичное, а более-менее упорядоченное. + не хочу идти по пути чрезмерного разрастания дерева развития юнитов
  • Фракция: Родоки
  • Сообщений: 7
    • Просмотр профиля
Короче кажется разобрался

открываем декомпилятором TaleWorlds.Core, там ищем equipment. Затем GetRandomEquipmentElements и меняем код на


// TaleWorlds.Core.Equipment
// Token: 0x060002D8 RID: 728
public static Equipment GetRandomEquipmentElements(BasicCharacterObject character, bool randomEquipmentModifier, bool isCivilianEquipment = false, int seed = -1)
{
Equipment equipment = new Equipment(isCivilianEquipment);
List<Equipment> list = (from eq in character.AllEquipments
where eq.IsCivilian == isCivilianEquipment && !eq.IsEmpty()
select eq).ToList<Equipment>();
if (list.IsEmpty<Equipment>())
{
return equipment;
}
int count = list.Count;
new Random(seed);
int weaponSetNo = MBRandom.RandomInt(count);
for (int i = 0; i < 12; i++)
{
equipment[i] = list[weaponSetNo].GetEquipmentFromSlot((EquipmentIndex)i);
if (randomEquipmentModifier)
{
ItemObject item = equipment[i].Item;
ItemModifier itemModifier2;
if (item == null)
{
itemModifier2 = null;
}
else
{
ItemComponent itemComponent = item.ItemComponent;
if (itemComponent == null)
{
itemModifier2 = null;
}
else
{
ItemModifierGroup itemModifierGroup = itemComponent.ItemModifierGroup;
itemModifier2 = ((itemModifierGroup != null) ? itemModifierGroup.GetRandomItemModifierLootScoreBased() : null);
}
}
ItemModifier itemModifier = itemModifier2;
if (itemModifier != null)
{
equipment[i].SetModifier(itemModifier);
}
}
}
return equipment;
}

У меня вроде все запускается, пока ошибок нет. Как создал я 3 ростера снаряги для одного типа юнита, точно так они и появляются на поле боя без рандомного перемешивания. Как оно на балансе игры/играбельности скажется - хз.
« Отредактировано: 20 Января, 2026, 21:22 (Fedduk) »
  • Фракция: Родоки
  • Сообщений: 26687
  • И создали они сайт... За победу в конкурсе "Знамя кальрадийца" За регистрацию на форуме не позже сентября 2008 года
  • Сервер Discord
    • Просмотр профиля
    • Всадники Кальрадии
Fedduk, поздравляю с победой :)
  • Фракция: Вегиры
И помните: "Хватит набивать посты" (NightHawkreal)
  • Сообщений: 7
    • Просмотр профиля
Vanok, Спасибо :thumbup:
  • Фракция: Родоки
 

Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.

Powered by SMF 2.0 | SMF © Simple Machines LLC | Сайт работает на быстром VPS/VDS хостинге от FASTVPS