Голосование

Как вы оцениваете Смуту?












Оформление



Пользователей
  • Всего: 28871
  • Последний: 123WwW2004
Сейчас на форуме
Пользователи: 1
Гостей: 277
Всего: 278

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

Тема: (dll мод) Покупка, обмен: Известность, Влияние, Опыт; Еда (донат), Кони; Крафт  (Прочитано 6716 раз)

  • Сообщений: 230
    • Просмотр профиля

Содержание



Сделано: (29 июля 2021)
- Известность, Влияние: покупка, обмен (в т.ч. друг на друга);
- Опыт: тренировка в навыках за деньги;
- Еда: покупка и пожертвование пищи городам (замкам);
- Кони: покупка: вьючные, обычные, боевые (теперь повышение конницы зависит, в основном, не только от бестолковой беготни за лошадьми, а ещё и от толщины кошелька :));
- Найм, улучшение крестьян, рекрутов, элиты (с тратой влияния на найм/апгрейд; "ап" лутер в ватчмена, без "дисциплины" и правки самого лутера, через меню);
- Для кузницы: покупка, обмен (крафт, включая массовый refine, с минимумом кликов, через меню; мена угля на сырое железо; переплавка без угля и побочного продукта; меню-крафт без траты стамины);
- Крафт брони (перчатки).


(работа продолжается)


___
Проверка своих сил на более серьёзном моде, нежели простые таблицы.
Относительно успешная, потому и хочу поделиться опытом.

"SmithForever" стал тестовым полигоном, на котором я научился-таки перекомпилировать исходники с "гитхаба", с помощью "Микрософт Визуал Студио".
Это оказалось не так сложно, как казалось вначале, но муторно и не всегда очевидно.

Вроде создания/клонирования шаблона x64 вместо "any cpu", поскольку архитектура моего процессора (amd) не позволяет компилировать любые исходники, с нужной логикой, т.е. это нифига не "any cpu", только узнал я это в спец теме, посвященной ВизуалСтудио, а не подробному гайду про модинг Баннерлорда, как было в своё время с Варбандом.
Потому модульная система таких сложностей, как МБ2, у меня не вызвала, благодаря открытым и многочисленным урокам и исходникам (копипаста форевер! XD)


Основным местом приложения сил стал мод "MedicalDistrict", позволяющий лечить героя и компаньонов (тысяча монет за 100% хп у каждого именного персонажа).
Дополнительным бонусом шло выделение подкатегории своего "дистрикта" в городе, подсказка как вставлять иконку золота в меню и прочие мелочи.


Сначала я хотел всего лишь сократить минимальную стоимость лечения с косаря до сотни (благодаря опыту со SmithForever это удалось сделать).
Затем ("аппетит приходит во время еды") попробовал ввести в уравнение уровень героя, чтобы новичок платил меньше, а ветеран - больше (в частности, формула "100 + ур^ур" монет даёт дефолтную тысячу на 30 ур. = 100 + 30*30).

А потом... "Остапа понесло".
Частично помог мод "BannerlordHardmode".
https://github.com/aiis/BannerlordHardmode/blob/master/BannerlordHardmode/Actions/ChangeRenown.cs
Правда, чистой копипасты не вышло, но я сумел догадаться (с подсказками ВизуалСтудии), что "hero" надо поменять на "Hero.MainHero." и фрагмент кода заработал, как надо

В итоге, получилось, с помощью вроде как встроенной справки по классам/категориям ВизуалСтудио, добраться-таки до команд, позволяющих работать с влиянием и известностью главного героя, чем я и воспользовался "от души")))


Если кто в курсе, как добавлять конкретные предметы, то буду благодарен за подсказку - это здорово сэкономит мне время на рутине перепрохождения, для накопления нужной статистики по изменениям мода.
Например, ввести возможность покупки угля в меню любого города, по 50-100 монет, хоть в пустыне у Асераев, без необходимости тащиться в Баттанию за очередной партией дерева, потому что все караваны опять были перебиты вконец обнаглевшими вражескими лордами.
А когда эту проблему, с "благородными" (как Рольф) господами, удается решить, всерьёз и надолго, то и крафт уже максимален и всё захвачено, по сути, игра пройдена, хоть за Империю, хоть против неё. И тестить особо нечего... Такие дела =/


___

Исходный файл:
...Bannerlord.MedicalDistrict\MedicalDistrictBehaviors.cs

https://github.com/sweatty1/Bannerlord.MedicalDistrict/blob/master/Bannerlord.MedicalDistrict/MedicalDistrictBehaviors.cs

Измененный мной файл, со всеми правками, как обычно, во вложении (.dll - отдельно, текстовый файл с исходным кодом - отдельно).
Чтобы проверить, "как оно вообще", на практике, достаточно скачать оригинальный труд товарища sweatty1 (большое ему спасибо, однако) и заменить dll файл на модифицированный.

Изменения начнутся с переименования дистрикта, поскольку именно такие незначительные, по сути, косметические правки, позволяют поначалу увидеть, оказывают ли усилия модера хоть какой-то эффект, не ломая уже работающую схему неумелым вмешательством горе-программиста :)

___

Правки (код):

Купить "1" ед. "Известности" за монеты (100 + ур*ур).

campaignGameStarter.AddGameMenuOption("town_medical_district", "town_medical_district_buy_renown", "{=*}1 Renown {PRICE_RENOWN}{GOLD_ICON}", new GameMenuOption.OnConditionDelegate(player_buy_renown_on_condition), delegate (MenuCallbackArgs x)
{
int price_renown = 100 + Hero.MainHero.Level * Hero.MainHero.Level;
if (Hero.MainHero.Gold >= price_renown)
{
Hero.MainHero.Clan.AddRenown(1, true);
GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, -price_renown, false);
};
}, false, -1, false);

Технический остаток - проверка на наличие/отсутствие необходимого количества денег на покупку славы, недостижение контрольной суммы (6 тиру клана покупать славу точно не нужно).
И ещё здесь есть вынужденное дублирование формулы с локальной переменной, т.к. я не разобрался как правильно наследовать/объявлять переменные без этой, если честно, лишней возни, засоряющей код).


private bool player_buy_renown_on_condition(MenuCallbackArgs args)
{
int price_renown = 100 + Hero.MainHero.Level * Hero.MainHero.Level;
MBTextManager.SetTextVariable("PRICE_RENOWN", price_renown);
if (Hero.MainHero.Gold >= price_renown && Hero.MainHero.Gold < price_renown*100 && Hero.MainHero.Clan.Renown < 6150)
{
return true;
};
return false;
}

Купить "1" ед. "Влияния" за монеты (формула та же, т.к. и слава, и влияние получаются примерно одним способом, в примерно равных количествах (плюс-минус модификаторы)).

campaignGameStarter.AddGameMenuOption("town_medical_district", "town_medical_district_buy_influence", "{=*}1 Influence {PRICE_INFLUENCE}{GOLD_ICON}", new GameMenuOption.OnConditionDelegate(player_buy_influence_on_condition), delegate (MenuCallbackArgs x)
{
int price_influence = 100 + Hero.MainHero.Level * Hero.MainHero.Level;
if (Hero.MainHero.Gold >= price_influence)
{
Hero.MainHero.AddInfluenceWithKingdom(1);
GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, -price_influence, false);
};
}, false, -1, false);

Поменять излишек Известности (свыше 6 тира) на влияние, 1к1.
Поскольку в Баннерлорде, в отличие от Варбанда, слава не оказывает доп эффекта на размер армии после 6150 ед.

campaignGameStarter.AddGameMenuOption("town_medical_district", "town_medical_district_swap_influence_all", "{=*}Influence on Renown over 6150", new GameMenuOption.OnConditionDelegate(player_swap_influence_all_on_condition), delegate (MenuCallbackArgs x)
{
if (Hero.MainHero.Clan.Renown > 6150)
{
float renown_to_influence = Hero.MainHero.Clan.Renown - 6150;
Hero.MainHero.AddInfluenceWithKingdom(renown_to_influence);
Hero.MainHero.Clan.Renown -= renown_to_influence;
};
}, false, -1, false);

Мне нравилось условное ограничение в 5к славы первой части, т.к. работал штраф -1%/день славы и 50 известности являлся максимумом за один бой.
В отдельным случаях удавалось разгонятся и до 10к, но, в среднем, у меня получалось 50 славы в сутки, которые и снимались скриптом, а потому размер армии был более-менее стабилен, но рос куда заметнее и плавнее, чем при повышении тира клана в Баннерлорде, нда...

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


Кстати, внимательные читатели могли заметить, что используется два способа обращения к известности: AddRenown и Clan.Renown.
Это результат игнорирования отрицательных величин в связке с AddInfluenceWithKingdom.
Плюс работает нормально, минус - нет.
Да и не должна известность в Баннерлорде падать, по текущей логике, потому это не баг.
Вот и пришлось идти окольным путём, по давней традиции героев :-)


===
Осталось запихнуть покупку угля / обмен на начальное железо и/или формулы крафта без угля и побочного продукта, уходящих "взаимозачётом", т.к. стоят они, в действительности, одинаково, а пользы от отходов производства у опытных кузнецов не наблюдается.
Отчего приходится сбрасывать сотни единиц металла за бесценок, 1-3 монеты/шт., хотя в средневековье, любое железо, особенно, оружейное - это очень важное, стратегическое сырье... но только не в экономике Баннерлорда :)
« Последнее редактирование: 29 Июля, 2021, 21:28 от Oltopeteeh »
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 516
    • Просмотр профиля
в экономике Баннерлорда
Так ведь готовые оружие и доспехи появляются "волей богов" в инвентаре солдат. Если им еще и цену реалистичную прикрутить - ГГ миллионером будет на второй неделе. Тут надо крутить коэффициенты переработки - чтоб создание по настоящему ХОРОШЕГО (и, следовательно, ДОРОГОГО) оружия требовало эти самые "сотни единиц металла" и ресурсов. А до тех пор - в лучших традициях Скайрима крафтишь 10 000 железных кинжалов и продаешь их по 1 монете. Это будет нудно, уныло - но по крайней мере не настолько дисбалансно, как сейчас.
  • Сообщений: 230
    • Просмотр профиля
Лично я не возражаю против миллионов у ГГ.
Главное, чтобы сохранился интерес, реиграбельность, а значит, баланс.

В текущем виде, нужно сокращать цену оружия на порядок (в 10+ раз) у начальных вариантов и на порядки - у финальных (тир 5-6).
Как это сделать со стандартным снаряжением - ответ у метательных камней. Value = 2 и норм, камень, по формуле урона, стоящий 81 монету, становится 2-х монетным.

Ведь в норме, цена апгрейда, в полцены юнита, означает докупку снаряжения (кроме коня, но это нетрудно поправить и сейчас, мини модом, на убирание "upgrade req.").
А тест идеи всерьёз будет на механике апгрейда экипировки у ГГ и спутников. Благо наработки есть, ещё с "Истории Героя".

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

Ещё хорошо бы вставить легко раненных, вступающих в бой с неполным здоровьем и тяжело раненных, которые будут лечиться долго. Или дорого ;)
Инвалидов, кого проще сразу списать в обоз, или охрану поселений ("стрела в колено": +100500 квалификации стражника :-))
Механика обоза, например, с ранеными.
И резерва, в который мы перемещаем юнитов, сверх нашего лимита командования, постепенно доставая при убыли основного состава по ходу дела.
Учёт армии для содержания пленных силами не только своего отряда (хотя бы для своих спутников командиров, кому мы без проблем можем всучить лишних пленных и сейчас, но тут будет меньше мороки и ненужных кликов).
Мобильный отряд для сковывания боем врагов, пока основная армия добежит.
Сдача в плен при обнулении морали прямо на поле боя, помимо бегства и т.д.
Всё это есть в игре, пусть и частично реализовано. Как дуэль с бандитским боссом завершает бой, а бандиты зрители пополняют ряды пленных, хотя не были ранены в бою.

Я так далеко пока не замахиваюсь.
Хочу лишь вставить покупку / обмен кузнечных ресурсов и/или рецепты без угля и побочного продукта, что и решит проблему нудности, унылости, дисбалансности кузни, хоть в какой-то мере.

В частности, по цене игровых компонентов, сталь из 2 улучшенных железа - уголь + железо, равнозначно сталь из просто 2 улучш железа.
А руду, с перком, хорошо бы переплавлять / обменивать не на три железа вместо двух, а на тир1 и тир2, равный тем самым двум единицам (или железу + углю), экономя время игрока на
базовой переправке сырья. Как при разборе / плавке оружия, только с рудой :-)
« Последнее редактирование: 12 Июля, 2021, 20:57 от Oltopeteeh »
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 876
  • За материальную помощь сайту
    • Просмотр профиля
Хочу лишь вставить покупку / обмен кузнечных ресурсов и/или рецепты без угля и побочного продукта, что и решит проблему нудности, унылости, дисбалансности кузни, хоть в какой-то мере.
Т.е. то что кузнечный продукт делается почти мгновенно (вместо дней/недель/месяцев), делается за почти бесплатно, а продается за баснословные деньги, и все это левым парнишкой только-только взявшим молот в руки вас не смущает?
подходя не бойся - получив железом не плачь ))
  • Сообщений: 230
    • Просмотр профиля
кузнечный продукт делается почти мгновенно (вместо дней/недель/месяцев), делается за почти бесплатно, а продается за баснословные деньги, и все это левым парнишкой
Тоже решаемо)
В моде про создание брони нужно время на крафт (на 6 тир - очень прилично, компаньона на несколько недель порой оставлять приходилось ради одного шлема).

Разве что я бы добавил работу командой, т.е. складывание усилий ГГ, спутников и юнитов из армии. Если мин требованиям удовлетворяют, конечно.
 С крестьянскими вилами рекруты вполне помогут, им не впервой, а серьёзные вещи куются профессионалами))

Таймер с возобновлением, как при грабеже деревни, чтобы можно было возвращаться к работе после перерыва.

Механика последовательных улучшений, сначала тир 1, потом делаем из него тир 2, потом тир 3 и т.д. Чтобы не было резкого прыжка от ничего к божественной мощи.

Тамасская сталь, на мой взгляд, должна требовать не 100 навыка, а 200-250.
Иначе слишком легко идёт переход к высокоуровневому крафту у любого компаньона, кого качаем с нуля, через кузнечку.

Цена компонентов легко задаётся через xml таблицу, как и для деталей крафта.
При снижении задаваемых статов падаёт и стоимость готовых изделий (проверено).
Так что "бесплатность" и "баснословность" поддаются правке уже сейчас. Вопрос лишь в том, до какой степени будет нерфить (т.е. нужны новые правила балансирования, техническую часть могу взять на себя).

А с чем до сих пор наблюдаю проблемы, так это с добавлением вещей в инвентарь.
Campaign.Current.MainParty.ItemRoster.Add(new ItemRosterElement(new ItemObject("charcoal"), 1));
Не помогло.
« Последнее редактирование: 14 Июля, 2021, 02:18 от Oltopeteeh »
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 230
    • Просмотр профиля
Товарищ "svelok" на оф. форуме подсказал, как добавлять вещи.

ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("charcoal"), 1)
Посему продолжаю пилить "мод мечты", с мельшими затратами сил и времени, чем когда работал полностью в одиночку, без подсказок =)

Доп. меню - "Support district" - покупка и обмен материалов (wood, coal, iron0-6).

campaignGameStarter.AddGameMenuOption("town_support_district", "town_support_district_buy_coal", "{=*}1 Coal: {PRICE_COAL}{GOLD_ICON}", new GameMenuOption.OnConditionDelegate(player_buy_coal_on_condition), delegate (MenuCallbackArgs x)
            {
                int price_coal = 50;
                if (Hero.MainHero.Gold >= price_coal)
                {
                    Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("charcoal"), 1);
                    GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, -price_coal, false);
                };

Обмен руды железной на железо 2 и 1 тира вместо 2-3 просто 1 тира, для балансу и меньшего числа ненужных кликов. Стоимость у них фактически одинакова (3 t1, или t2 + t1), из-за правила удвоения, при крафте и равнозначности железа1 с углем по стоимости.

campaignGameStarter.AddGameMenuOption("town_support_district", "town_support_district_swap_iron", "{=*}IronOre (Iron2, Iron1): {IRON_AMOUNT}", new GameMenuOption.OnConditionDelegate(player_swap_iron_on_condition), delegate (MenuCallbackArgs x)
            {
                int iron_amount = Campaign.Current.MainParty.ItemRoster.GetItemNumber(Game.Current.ObjectManager.GetObject<ItemObject>("iron"));
                if (iron_amount >= 1)
                {
                    Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot2"), iron_amount);
                    Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), iron_amount);
                    Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("iron"), -iron_amount);
                };
            }, false, -1, false);

Обмен железа, округление не понадобилось, (int) отбрасывает нецелую часть без риска округления вверх и вылета игры, из-за неверного подсчета числа материалов.
Обратная сторона - продажа нечетных ресурсов в скрипте. Например, при раннем тесте было 3 дерева, или 2 дерева - пофиг, даст всё равно 1 меру угля (3 шт).

campaignGameStarter.AddGameMenuOption("town_support_district", "town_support_district_swap_iron2", "{=*}Iron2 on 2 Iron1 x{IRONINGOT1_AMOUNT2}", new GameMenuOption.OnConditionDelegate(player_swap_iron2_on_condition), delegate (MenuCallbackArgs x)
            {
                int ironIngot1_amount = Campaign.Current.MainParty.ItemRoster.GetItemNumber(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"));
                int ironIngot1_amount2 = (int)ironIngot1_amount / 2;
                if (ironIngot1_amount2 >= 1)
                {
                    Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot2"), ironIngot1_amount2);
                    Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), -ironIngot1_amount2 * 2);
                };
            }, false, -1, false);

Тест не-боевого крафта (пшеницы). Например, за золото, стамину, время ожидания, или ещё что-то типа того - посмотрим, как получится.
"Баннерлорд Онлайн" ближе всего к простенькому симулятору выращивания пшеницы и норм, люди играют :)

campaignGameStarter.AddGameMenuOption("town_support_district", "town_support_district_craft_grain", "{=*}TestCraft: Grain 30{GOLD_ICON}", new GameMenuOption.OnConditionDelegate(player_craft_grain_on_condition), delegate (MenuCallbackArgs x)
            {
                if (Hero.MainHero.GetSkillValue(DefaultSkills.Crafting) >= 25 && Hero.MainHero.Gold >= 30)
                {
                    Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("grain"), 1);
                    // stamina -2 (grain 10 money, 1 for 5m)
                    GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, -30, false);
                    Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 1);
                };
            }, false, -1, false);
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 230
    • Просмотр профиля
Значительное обновление мода, вполне достойное номера версии 0.4 :)

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

Разные вкладки.
"Персонажи" объединяет лечение из оригинального мода и всякие иные действия с героями (у меня пока только с главным).
В частности, тренировка (+100 хр в любом из выбранных навыков, за существенную цену, 100+ур^2+навык^2, т.е. под 330 качается по 100к монет за клик - реальная польза есть от начальной прокачки, если не охота набивать 0-18 очков при каждом перезапуске игры в незначительных направлениях для билда, для повышения общего уровня персонажа, из-за срезания рейтинга прокачки).
Маленький бонус, на грани с читом - добавить монеты торговцам, чтобы можно было получить живые деньги за продажу кузнечных изделий, без необходимости выискивать глав кланов и армии, где порой и миллион-два встречается, а у обычных лордов, увы, 5к. Немногим лучше деревни (1к). Развернуться негде, вот и впилил фишку, т.к. нет больше желания мириться с этой несправедливостью, когда я могу это исправить (хотя бы для себя и товарищей, пожелающих использовать уже готовые наработки).

"Припасы". Купля/продажа всяких товаров, еда пачкой, отдельно - лошади (вьючные, обычные, военные, на выбор - важно для апа юнитов, если играем без мода на снятие базового, но не менее иррационального требования коней для апгрейда). Лимита на покупку нет, но цена иногда кусается, если не форсить кузнечку :)

"Найм". Без лимита - крестьяне 1 ур, а покруче - рекруты, нужно уже 1 ур клана, 1 ур перка, 25 в навыке (чаще лидерство, у лутеров - плутовство) и т.д., для элиты уже 2 ур, 50 навыка.
Добавил улучшение юнитов, крестьяне - рекруты, рекруты - элита, а лутеры - ватчмэны, или бандиты гор (вландия и империя имеют больше общего, как западная культура, чем северяне, норды+баттанцы, или восток-юг, кузаиты-асераи).

___
Прикладываю архив с рабочим модом и исходник (текстом) отдельно, для тех, кто хочет проверить сразу и разобраться в деталях, соответственно =)
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 687
  • За активную деятельность, связанную с публикациями и помощью другим посетителям
    • Просмотр профиля
Механика обоза, например, с ранеными.
Неплохая идея с обозом, куда можно скидывать пленных, барахло. На карте - как караван, следующий за армией ГГ, но с меньшей скоростью.
  • Сообщений: 230
    • Просмотр профиля
Неплохая идея с обозом, куда можно скидывать пленных, барахло. На карте - как караван, следующий за армией ГГ, но с меньшей скоростью.
Похожий вариант видел в модах, для первой части игры. "Русь 13 век" и т.д.
Хотя именно наш караван, с бесплатной торговлей (менять вещи, и юнитов, пленных, как с армией из нашего клана) - более перспективная задумка. Спасибо. Будет и ГГ не обделён, а то сейчас только спутники могут полноценные караваны, не по квесту, водить :)
« Последнее редактирование: 29 Июля, 2021, 17:23 от Oltopeteeh »
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 687
  • За активную деятельность, связанную с публикациями и помощью другим посетителям
    • Просмотр профиля
Да! Тяжелый выбор, если обоз с добром - бросить его, если нужно сделать ноги, или биться за него. Отправить его в свой город, чтоб не стеснял действия, самостоятельно или под присмотром партии спутника, или отправить гонца (как в Дипломатии), чтоб обоз шел к определенному поселению на соединение.
  • Сообщений: 230
    • Просмотр профиля
... биться за него.
Мы будем биться до последней капли крови! (С)

Кроме ГГ, который бессмертен. Ему бояться, по сути, нечего. Любые поиери временны. Пока игра через 10 лет от начала не вылетит. Но и в песочнице, старт в 50, дожить не проблема. Только мах хп порой падает и ок))

___
Запилил простенький крафт готовой брони.
campaignGameStarter.AddGameMenuOption("town_support_b_district", "town_support_b_gloves_t6_k", "{=*}(t6, 24) Eastern Plated Leather Vambraces (4 Iron6)", new GameMenuOption.OnConditionDelegate(town_support_b_gloves_t6_on_condition), delegate (MenuCallbackArgs x)
{
int ironIngot6_amount = Campaign.Current.MainParty.ItemRoster.GetItemNumber(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot6"));
if (ironIngot6_amount >= 4 && Hero.MainHero.GetSkillValue(DefaultSkills.Crafting) >= 100 && Settlement.CurrentSettlement.Culture.GetCultureCode() == CultureCode.Khuzait)
{
Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("eastern_plated_leather_vambraces"), 1);
Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot6"), -4);
Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 128);
GameMenu.SwitchToMenu("town_support_b_district");
};
}, false, -1, false);

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

Скажем, крестьянское оружие. Средняя цена 80-96, молот кузнеца содержит железо 2 тира, железные вилы слишком дешевы и т.д. Не суть. Считаем, как нам одеть юнита самим.

Оружие. 4 слота.
Каждое - дерево на рукоять, 2 дерева или железа (слабо - одно) на лезвие, навершие и прибамбас лесом, в тире 0 они без ресурсов, обозначаются как  "нет".

Деревянное оружие попроще, 2+1 дерева, х4. Сум 12. Дешево и сердито: железо и дерево, по штуке.
Броня, также, для простоты. Ещё 12 дерева. Или 4+4 дерева и железа.
На доп оружии (3 и 4 слот, перчатках и т.д., по идее, можно сэкономить, но я не крохобор, когда считаю баланс :-) ).

Получаем средний набор сета крестьянина, 8 дерева и 8 железа.
Или покруче, премиум набор из 24 дерева для любимчиков.
Или совсем сет босяка, 2 дерева и железа на простейшее оружие (одно) и самую плохую броню (рваньё).

Грубо прикидывая, купить дерево - 6 монет.

Уголь - купить 2 дерева (12), потратить стамину, получить 1-3 угля. В среднем, по 4-5-6 монет каждый.

Железо - купить руду (11), стамина, 2-3 железа, по 4-6 каждое.

Мин сет, 20 монет, крутой - 24*6 = 144 монет.
То есть, найм крестьянина, не менее 20, а не 10 монет, как сейчас. А лучше и до 150, будущего элитника если берём))

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

Здоровье тоже важно.
Рекрут, полный найм - 20.
Здоров из плена - 15, ранен в плену - 10, тяжело ранен (травма) - 5, смерть - 0 (очевидно).

__
Update: Немного обновил шапку темы :)
« Последнее редактирование: 29 Июля, 2021, 21:19 от Oltopeteeh »
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 230
    • Просмотр профиля
В честь выхода 1.6 в открытый доступ, продолжил трудную, но отчасти благодатную работу над модификацией, позволяющей немного сгладить имеющиеся огрехи раннего доступа, в меру своих сил и возможностей (плюс поддержка сообщества, разумеется :)).

Своеобразной темой версии 0.48 стало расширение функционала с города на замки и деревни.
Теперь жертвовать/покупать еду и нанимать крестьян можно везде - в городах, селах, замках (три разных вкладки "саппорт", хотя на вид и одинаковы - модулька... в смысле, Визуал Студио, ругается на попытки "передать" отдельные части меню, а до полноценного использования скриптов мне пока далеко :)).

У деревень нет параметра "пищи", расходуемого гарнизоном и набегающими союзниками, да врагами, поэтому прибавку перевёл на ихнее процветание.
Ну и перестройка разорённых деревень (мгновенная, пока только за деньги, даёт опыт инженерии и +1 к отношению всех нобилей поселения).

Проверил на практике систему х4 в крафте. Работает. Причём даже лучше, чем нативная х2, с текущими ценами на топ снаряжение.
То есть, меч за 80-120к, как и прочие вещи, действительно можно описать доступными формулами.
Например, самая крутая бронька - 227к, на 57 тела и т.д., "стоит" всего 14 дамасской стали, каждая из которых по 16к, т.к. в х4 +1 ранг пропускаем на каждом апе и крафтим по -4 штуки за тик, а не по 2, как сейчас, вот и "набегают" проценты к 6 тиру :)

Хотя себестоимость руды, как сейчас = 50, дерева = 25 (с х2 на рецепте, аналог руды получается).
Сырое железо и уголь, х3 с угля/пары дерева, 50/3 = 16.67 монет за штуку (округление ради красоты правила х2 и некритичности добавки не только в 2/3 динара, но и 2-3 динаров за тир сверху - тоже проверено).

"Магия цифр" начинается с 2 тира железа, "W". Где уже 64, как и обычного железа. То самое "+1 ранг".
Натив, по логике - 32 (реально там очень кривые цифры, от которых пробирает дрожь - прописано "на глазок").
20 - 30, хотя в рецепте четко указано х2, т.е. 40, ну и дальше... Бр-р-р...
Во! Откопал-таки место, где прятались "базовые" (дефолтные) вещи... и впечатлился))
      this.InitializeItem(items, this.ItemGrain, new TextObject("{=Itv3fgJm}Grain"), "merchandise_grain", DefaultItemCategories.Grain, 10, 10f, ItemObject.ItemTypeEnum.Goods, true);
      this.InitializeItem(items, this.ItemMeat, new TextObject("{=LmwhFv5p}Meat"), "merchandise_meat", DefaultItemCategories.Meat, 30, 10f, ItemObject.ItemTypeEnum.Goods, true);
      this.InitializeItem(items, this.ItemHides, new TextObject("{=4kvKQuXM}Hides"), "merchandise_hides_b", DefaultItemCategories.Hides, 60, 10f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemTools, new TextObject("{=n3cjEB0X}Tools"), "bd_pickaxe_b", DefaultItemCategories.Tools, 100, 10f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemIronOre, new TextObject("{=Kw6BkhIf}Iron Ore"), "iron_ore", DefaultItemCategories.Iron, 50, 10f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemHardwood, new TextObject("{=ExjMoUiT}Hardwood"), "hardwood", DefaultItemCategories.Wood, 25, 10f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemCharcoal, new TextObject("{=iQadPYNe}Charcoal"), "charcoal", DefaultItemCategories.Wood, 50, 5f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemIronIngot1, new TextObject("{=gOpodlt1}Crude Iron"), "crude_iron", DefaultItemCategories.Iron, 20, 0.5f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemIronIngot2, new TextObject("{=7HvtT8bm}Wrought Iron"), "wrought_iron", DefaultItemCategories.Iron, 30, 0.5f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemIronIngot3, new TextObject("{=8w0aaDbn}Iron"), "iron_a", DefaultItemCategories.Iron, 60, 0.5f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemIronIngot4, new TextObject("{=UfuLKuaI}Steel"), "steel", DefaultItemCategories.Iron, 100, 0.5f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemIronIngot5, new TextObject("{=azjMBa86}Fine Steel"), "fine_steel", DefaultItemCategories.Iron, 160, 0.5f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemIronIngot6, new TextObject("{=vLVAfcta}Thamaskene Steel"), "thamaskene_steel", DefaultItemCategories.Iron, 260, 0.5f, ItemObject.ItemTypeEnum.Goods);
      this.InitializeItem(items, this.ItemTrash, new TextObject("{=ZvZN6UkU}Trash Item"), "iron_ore", DefaultItemCategories.Tools, 1, 1f, ItemObject.ItemTypeEnum.Goods);
Ужас же! Для меня, как геймдиза, так точно.
К примеру, разделка туш даёт полуторный рост цены. Если бы удавлялось, я бы понял. Кровь, кишки на выброс. Но откуда прибавка-то? Логики не вижу... О_о

Hog = 1 мясо, 1 шкура. Цена 60 монет. Были бы они, как я прикидывал ранее, 20 и 40 монет, ок, сошлось бы и с овцой (2 мяса, 1 шкура) за 80 монет, т.е. мясо = 20.
И с коровой (6 мяса, 2 шкуры за 200 монет, вычетом известной по паре овцы-свиньи мясной продукции "х", шкуру, определить не сложно.
Но разработчики пошли ещё дальше.
30 и 60.
То есть, по честному, себестоимость кабанчика = 90 монет, при текущей схеме разделки. А он продолжает стоить 60. И получается, что порой шкура стоит как целый кабан. А там ещё и мясо на треть цены есть... Но разделка стамину не тратит. Бесплатная. Совсем. Мгновенная. Зачем этот перекос - не ясно. Он же очевиден каждому, кто возился с балансом цифр и значений - такие косяки сразу вылазят, при попытке взаимоувязать разные переменные в единую систему. Однако ж всем "там" пофиг, походу. Поскольку технические проблемы - не вариант. Достаточно посидеть несколько вечеров с блокнотов и посчитать. Даже с нуля, как у меня, получается довольно неплохо, а зная базовые цифры так и вообще, раз-два и готово! ... Увы, надежда пока только на мододелов поскиловее меня, в части соответствия пожеланиям пользователей. Давно уже понял что творю "на любителя" (в частности, для себя и тех, кому тоже понравиться). Не массовый продукт, нда... К примеру, скачиваний на форуме - почитай и нет, обсуждение хотя бы есть, а то бы совсем загрустил от невостребованности результата затраченных усилий :)
« Последнее редактирование: 05 Августа, 2021, 16:56 от Oltopeteeh »
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 230
    • Просмотр профиля
Разобрался-таки как разбирать броню (оружие) и некоторые другие предметы с модификаторами.

Mod (тестовый билд, крафт через меню + меню города (милиция, еда, процветание, лояльность, охрана)... пока малый функционал, могут быть критичные баги):
https://drive.google.com/file/d/1tdiq8jY1If2pxkDCr9liXx7atjZZq3v0/view?usp=sharing

Studio (исходный код тестового билда для Визуал Студии): https://drive.google.com/file/d/1Km8g4QyQqhePtfg3O56Td_wyWRahskev/view?usp=sharing



____

smelt_armor

____




            campaignGameStarter.AddGameMenuOption("support_3", "support_smelt_armor_t1", "{=*}Smelt T1 Armor x{AMOUNT}", new GameMenuOption.OnConditionDelegate(support_smelt_armor1_on_condition), delegate (MenuCallbackArgs x)

            {

                var vlandia_bandit_c_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "vlandia_bandit_c"); //1-1

                var bandit_envelope_dress_v2_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "bandit_envelope_dress_v2"); //2-1-1

                var bandit_leather_water_flask_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "bandit_leather_water_flask"); //3-2-2

                var bandit_envelope_dress_v1_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "bandit_envelope_dress_v1"); //4-2-2

                var torn_bandit_clothes_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "torn_bandit_clothes"); // 6-2-1 (x2)

                var bandit_gambeson_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "bandit_gambeson"); // 14-7-3 (x4)



                int armor_body_amount = vlandia_bandit_c_item.Amount + bandit_envelope_dress_v2_item.Amount + bandit_leather_water_flask_item.Amount + bandit_envelope_dress_v1_item.Amount + torn_bandit_clothes_item.Amount + bandit_gambeson_item.Amount;



                var pilgrim_hood_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "pilgrim_hood"); //h 4

                var wrapped_headcloth_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "wrapped_headcloth"); //h 6



                int armor_head_amount = pilgrim_hood_item.Amount + wrapped_headcloth_item.Amount;



                var leather_shoes_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "leather_shoes"); //l 3

                var wrapped_shoes_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "wrapped_shoes"); //l 4

                var strapped_shoes_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "strapped_shoes");



                int armor_leg_amount = leather_shoes_item.Amount + wrapped_shoes_item.Amount + strapped_shoes_item.Amount;



                var ragged_armwraps_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "ragged_armwraps"); //g 3

                var armwraps_item = Campaign.Current.MainParty.ItemRoster.FirstOrDefault(z => z.EquipmentElement.Item.StringId == "armwraps"); //g 3



                int armor_arm_amount = ragged_armwraps_item.Amount + armwraps_item.Amount;



                int smelt_armor_amount = armor_arm_amount + armor_leg_amount + armor_head_amount + armor_body_amount;

                if (smelt_armor_amount >= 1)

                {

                    if (bandit_envelope_dress_v1_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), bandit_envelope_dress_v1_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(bandit_envelope_dress_v1_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    if (bandit_envelope_dress_v2_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), bandit_envelope_dress_v2_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(bandit_envelope_dress_v2_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    if (vlandia_bandit_c_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), vlandia_bandit_c_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(vlandia_bandit_c_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    if (bandit_leather_water_flask_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), bandit_leather_water_flask_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(bandit_leather_water_flask_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    if (torn_bandit_clothes_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), torn_bandit_clothes_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(torn_bandit_clothes_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    if (bandit_gambeson_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), 4 * bandit_gambeson_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(bandit_gambeson_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, (4 * 17) / 16);

                    };

                    //

                    if (pilgrim_hood_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), pilgrim_hood_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(pilgrim_hood_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    if (wrapped_headcloth_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), wrapped_headcloth_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(wrapped_headcloth_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    //

                    if (wrapped_shoes_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), wrapped_shoes_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(wrapped_shoes_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    if (leather_shoes_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), leather_shoes_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(leather_shoes_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    //

                    if (ragged_armwraps_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), ragged_armwraps_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(ragged_armwraps_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };

                    if (armwraps_item.Amount >= 1)

                    {

                        Campaign.Current.MainParty.ItemRoster.AddToCounts(Game.Current.ObjectManager.GetObject<ItemObject>("ironIngot1"), armwraps_item.Amount);

                        Campaign.Current.MainParty.ItemRoster.Remove(armwraps_item);

                        Hero.MainHero.AddSkillXp(DefaultSkills.Crafting, 17 / 16);

                    };



                };

                GameMenu.SwitchToMenu("support_3");

            }, false, -1, false);


----
Спасибо товарищу [USER=475905]@Snah1979[/USER], за подсказку, сам бы ещё долго ковырялся в поисках подходящего ответа, как с апгрейдом вещей (пока ищу способ как отнимать один предмет из стека, а не удалять весь, как в случае с разбором, но это уже не критичные тонкости, благо крафт новой вещи работает и потребность конкретно в апгрейде невелика =)
( https://forums.taleworlds.com/index.php?members/snah1979.475905/ )
[URL unfurl="true"]https://forums.taleworlds.com/index.php?threads/add-items-to-save-files.409943/#post-9333627[/URL]
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 230
    • Просмотр профиля
Протестировал патч (заплатку / "костыль") для исправления цены вещей и юнитов.
По результатам прогона собрал 4 варианта (2х2), для ознакомления товарищей (если вдруг кому будет интересно).

___
Вещи:

1.1) TW используют возведение в степень. Ок. Мы используем извлечение корня из цены :)
Преимущество мода - в игре можно увидеть цены, какими они были бы, при закупке снаряжения юнитами, а не героями. За исключением коней. Там патч +150 или +500 к цене. Коряво до ужаса, ведь +150 цены доступно уже для тира 2 (кузаиты, пустынники, конные стрелки бандитов из грабежа каравана и т.д.), а они в лучшем случае сами стоят 50 монет. Всего. В три раза дешевле магазинной цены коня, мда... Хотя там и конь снабжения (фиксированная цена 110-120 для мула) - уже много будет... -_-

Нестабильно! Только для теста (ознакомления с принципиальной возможностью).

___

1.2) TW снизило основание для возведения в степень с 3 (2.95) до 2.75 в патче е1.7, весьма благотворно сказавшимся на балансе цен и значений в игре.
Я решил продолжить политику до логического конца - поставил основание 2, т.к. в игре правило х2 для каждого следующего тира (с некоторыми исключениями), а не х2.75-х3.

Работает стабильно, можно делать долгие замеры :)

___

2.1) Юниты - фикс цены найма (рекруты 20-25, конница х2 вместо +150 или +500 к цене, и ещё наёмники или бандиты х1.25-1.5, но это мало где пригодится). Специально подгонял под ванильные (оригинальные) ценники.

___

2.2) Юниты, фикс содержания (для правила х2, вместо сейчас х1,5, отчего выс. тиры исключительно дешевы в содержании по сравнению с их мощью... или же рекруты в принципе не окупают свою плату... смотря как взглянуть на творящееся безобразие).
Цена найма тоже исправлена (х2 от стандарта), что близко к формуле, которая в коде четко прописана, но не используется довольно давно.
Там крестьянин 1 монета, рекрут 40, элита 100 и т.д. Чем выше, тем слабее наценка (плюс досадное исключение в начале).
Так что х2 цены, от сейчас, на удивление канонично, TW-friendly =)

Добавил конных рекрутов и лутеров, для теста, с возможностью спешить/снабдить конями за плату, в отдельном пункте меню.
Плюс прикрутил меню найма, от крестьян до элиты 6 тира, включительно, и убрал требование тира клана для найма, чтобы тест получился наиболее всеобъемлющим. По основному замыслу, тир-1, т.е. 6 (мах) тир клана позволяет нанимать тир 7 (технический мах) без ограничений.

Ну и всякое, по мелочи.
« Последнее редактирование: 28 Февраля, 2022, 23:42 от Oltopeteeh »
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)
  • Сообщений: 69
    • Просмотр профиля
эм... Ставится, как обычные моды?
  • Сообщений: 230
    • Просмотр профиля
эм... Ставится, как обычные моды?

В принципе, да, сложностей быть не должно.
Если что, имеются более новые билды с частями разных механик, выложенных на Нексусе

Поскольку многочисленные изменения в разных местах вызывают иногда очень странные явления. К примеру, попытка изменить древесину резко поднимает её цену с 3 монет до 22 (игнорируя наши изменения) и пропадают седла в игре - какая взаимосвязь, не в курсе, но она есть, как известный суслик :)

https://www.nexusmods.com/users/68836168?tab=user+files

Наиболее важный мод (для баланса) исправляет безумные цены на экипировку высокого тира.

https://www.nexusmods.com/mountandblade2bannerlord/mods/3800

Метод, что забавно, предложен самими TW, которые его ввели... но не до конца, остановившись на полумерах (уменьшили перегиб с множителя 3 до 2.95, а затем до 2.75, в относительно не давнем фиксе. Хотя нужна там твердая двойка, т.к. каждый тир вдвое дороже предыдущего, а не в 2.75 раз... Но это же TW, у них очень своеобразный взгляд на баланс... -_-
И для правки луков, к примеру, их надо дублировать дважды. Перед СандБоксом (песочницей) и ещё раз - после (как обычный мод)... Вот на кой им это надо, одному богу рандома ведомо...
  • Фракция: Наемники
Уважаю креатив, ценю позитив, люблю Mount&Blade =)

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


Powered by SMF 2.0 | SMF © Simple Machines LLC