Sea Dogs: To Each His Own

Sea Dogs: To Each His Own

评价数不足
"Корсары: Каждому Своё" - копаем внутрянку
由 Nasiis 制作
Данное руководство не рекомендуется лицам играющим в игру впервые, чтобы не портить впечатление от игры.
   
奖励
收藏
已收藏
取消收藏
Введение:
Данное руководство сделал в первую очередь для себя, чтобы не потерять и не забыть некоторые настройки.
В рамках руководства будут описаны изменения файлов игры меняющие игровой баланс. Большая часть изменений работает только при начале новой игры.
Все файлы спокойно редактируются через обычный блокнот.

Файлы расположены по пути - Ваш диск:\Steam\steamapps\common\Sea Dogs To Each His Own\PROGRAM

Также обращаю внимание, что если провести проверку целостности файлов игры, то все измененные файлы не пройдут проверку и будут заменены на изначальные.
Удалять какие-либо строки в файлах игры не желательно, так как в этом случае игра может не открыться из-за ошибки.
Если вы внесли изменения и игра не открывается, значит вы что-то сделали не так.
Перед внесением каких-либо изменений рекомендую делать резервную копию изменяемого файла.

Если после внесения изменений игра не открывается, то причину можно посмотреть в файлах "error.log" и "system.log", которые расположены по пути C:\Users\Имя вашего профиля\Documents\My Games\Sea Dogs\Logs
1. Меняем настройки на глобальной карте в море:
Требуется начать новую игру.

Открываем файл "worldmap_init" и ищем следующие строки:

worldMap.date.hourPerSec = 1.5;
1.5 это скорость смены суток на глобалке. Чем ниже значение тем медленнее идет время на глобалке. Меняем по усмотрению, если выставить значение на 0.1, то смена суток идет очень медленно, оптимально от 1.0 и выше.

worldMap.shipSpeedOppositeWind = 0.3;
0.3 скорость всех кораблей против ветра, если выставить более 1.0, то корабль будет летать по глобальной карте

worldMap.shipSpeedOverWind = 0.8;
0.8 скорость всех кораблей по ветру, если выставить более 1.0, то корабль будет летать по глобальной карте

Ставить время ниже 1.1 и менять скорость ветра больше 0.8 нет смысла, так как ломается игровой баланс и будете доплывать слишком быстро, в результате чего вы будете вынуждены ждать до нужной даты.
2. Меняем вместимость арендуемого склада:
Начинать новую игру не требуется.

Открываем файл "storage" и ищем следующие строки:

int iMaxGoodsStore = 50000;

Меняем 50000 на любое другое значение
3. Убираем распознавание линейных кораблей:
Начинать новую игру не требуется.

Открываем файл "QuestsUtilite" и ищем следующие строки:

case ENGLAND:
if (sti(RealShips[sti(pchar.ship.type)].basetype) != SHIP_LSHIP_ENG && LineShips_FindCompanionShips(SHIP_LSHIP_ENG) && Trafalgar_FindCompanionShip()) return false; // Jason, НСО
if (sti(RealShips[sti(pchar.ship.type)].basetype) == SHIP_LSHIP_ENG || LineShips_FindCompanionShips(SHIP_LSHIP_ENG)) return true;


Во второй строке меняем "true" на "false"

Тоже самое повторяем и для ниже идущих строк
case FRANCE
case SPAIN:
case HOLLAND
4. Меняем разброс параметров оружия:
Требуется начать новую игру.

Подробное объяснение можете посмотреть у этого чела https://www.youtube.com/watch?v=TN07AclDo2M

Открываем файл "items_utilite" и ищем следующие строки:

realItem.Weight = 2.0 (меняем на 1.0) + fRandSmall(1.0); (меняем на 0.5)
realItem.Weight = 2.4 (меняем на 2.0) + fRandSmall(1.2); (меняем на 0.5)
realItem.Weight = 3.0 (не меняем) + fRandSmall(1.5); (меняем на 0.5)

Ниже идут строки, которые нужно заблокировать:
realItem.Balance = fRandSmall(2.0);
Для блокировки необходимо поставить "//". По итогу должно быть так:
//realItem.Balance = fRandSmall(2.0);

Открываем файл "initItem" и ищем следующие строки:

blade.Weight = 2.0 (меняем на 1.0) + fRandSmall(1.0); (меняем на 0.5)
blade.Weight = 2.4 (меняем на 2.0) + fRandSmall(1.2); (меняем на 0.5)
blade.Weight = 3.0 (не меняем) + fRandSmall(1.5); (меняем на 0.5)

Чуть ниже вышеуказанных строк добавляем:
switch (BladeType)
{
case "FencingL" :
blade.Balance = 0.0 + fRandSmall(0.5);
break;
case "FencingS" :
blade.Balance = 1.0 + fRandSmall(0.5);
break;
case "FencingH" :
blade.Balance = 1.5 + fRandSmall(0.5);
break;
}

if(ModelID == "knife_01") blade.Balance = fRandSmall(2.0);

Меняет разброс баланса для "Даги Вождя"

Ниже идут строки, которые нужно заблокировать:

blade.Balance = fRandSmall(2.0);
if(ModelID == "unarmed") blade.Balance = 1.0;


Для блокировки необходимо поставить "//". По итогу должно быть так:
//blade.Balance = fRandSmall(2.0);
//if(ModelID == "unarmed") blade.Balance = 1.0;
5. Меняем расход энергии в бою:
Начинать новую игру не требуется.

Открываем файл "LAi_fightparams" и ищем следующие строки:

case "fast":
energy = 10.0;
break;
case "force":
energy = 7.0;
break;
case "round":
energy = 18.0;
break;
case "break":
energy = 14.0;


Вышеуказанные значения отвечают за следующие атаки: 10.0 - рубящий удар, 7.0 - выпад, 18.0 - пробивающий удар, 14.0 - круговой удар. Можно выставить все значения на 1.0 и в таком случае энергия почти не тратится как у вас, так и у НПС.
6. Меняем характеристики всех кораблей:
Требуется начать новую игру либо добавить дополнительные строки в файлы игры.

Открываем файл "ships_init" и ищем нужный корабль.

Пример характеристик корабля:
makeref(refShip,ShipsTypes[SHIP_LUGGER]); (имя корабля для скриптов, не трогаем)
refShip. Name = "Lugger"; (тип корабля, не трогаем)
refShip.Soundtype = "lugger"; (тип корабля, не трогаем)
refShip.Class = 5; (класс корабля)
refShip.Cannon = CANNON_TYPE_CANNON_LBS3; (стоковый калибр орудий при создании корабля)
refShip.MaxCaliber = 6; (максимальный калибр орудий, можно выставить - 3, 6, 12, 16, 18, 20, 24, 32, 36, 42)
refShip.Weight = Tonnes2CWT(150); (вес корабля, не трогаем)
refShip.Capacity = 670; (вместимость трюма)
refShip.CannonsQuantity = 12; //2,2,4,4 2,2,3,3 (максимальное число пушек, не трогаем, так как оно привязано к модели корабля, в связи с чем стрелять будет только то количество, которое визуально отображено на корабле)
refShip.CannonsQuantityMin = 10; (минимальное число пушек, не трогаем)
refShip.rcannon = 4; (максимальное число пушек справа, не трогаем)
refShip.lcannon = 4; (максимальное число пушек слева, не трогаем)
refShip.fcannon = 2; (максимальное число пушек спереди, не трогаем)
refShip.bcannon = 2; (максимальное число пушек сзади, не трогаем)
refShip.MaxCrew = 50; (максимальный экипаж)
refShip.OptCrew = 40; (оптимальный экипаж - при превышении этого значения идет перегруз команды)
refShip.MinCrew = 8; (минимальный экипаж) refShip.SpeedRate = 15.0; (скорость)
refShip.TurnRate = 60.0; (маневренность)
refShip.Price = 10600; (цена)
refShip.HP = 600; (здоровье корабля)
refShip.SP = 100; (прочность паруса, не трогаем)



В файле "ships_init" можно поменять характеристики фортов, а также следующих именных квестовых кораблей - "Реус де Сан-Педро", "Калеуче", "Фортуна", "Полакр Тореро", "Гриффондор", "Валькирия", "Мираж", "Мэйфэнг"

Также для изменения характеристик "Калеуче" возможно необходимо дополнительно внести изменения в файл "reaction_functions", где ищем строки:
makeref(refShip,ShipsTypes[SHIP_CURSED_FDM]);
Однако, при честном прохождении квеста "Калеуче", при захвате корабля "Летящее сердце" измененными останутся все характеристики кроме скорости. После честного захвата Калеуче скорость корабля выставится к стандартным игровым значениям.
Для того чтобы получить читерный вариант корабля со скоростью в 30 единиц необходимо перед абордажем использовать "Яд индейцев таино", который можно получить в конце цепочки квестов "Под черны флагом". Применяем яд, абордируем корабль и во время битвы с капитаном корабля, после того как он будет отравлен и у него будет низкое здоровье, открываем атлас. Ждем некоторое время. При обычном развитии событий при снижении здоровья капитан пытается активировать диалог, но из-за яда и включенного атласа у него это не выходит из-за чего он умирает. В результате данных манипуляций, после захвата, у корабля скорость будет равна 30 единицам.

Для того чтобы характеристики кораблей менялись без начала новой игры необходимо добавить строки в файл "MainHero_dialog", где ищем строки:
Link.l10 = RandPhraseSimple("Не сейчас. Нет времени.", "Некогда. Дела ждут.");
Link.l10.go = "exit";

Сразу после этих строк добавляем строку:
ShipsInit();

В итоге должно быть так:
Link.l10 = RandPhraseSimple("Не сейчас. Нет времени.", "Некогда. Дела ждут.");
Link.l10.go = "exit";
ShipsInit();

Теперь при открытии функции "мысли в слух" будут обновляться характеристики кораблей.

Важно! Внесенные изменения применяются только к новым кораблям покупаемым на верфи и генерируемым в море и на глобалке. К кораблям которые уже у вас имеются изменения не применятся.
7. Меняем характеристики кораблей "Аделина", "Сумрак":
Требуется начать новую игру.

1. Для замены или изменения характеристик стартового корабля "Аделина" открываем файл "Common_Shipyard" и ищем следующие строки:

pchar.Ship.Type = GenerateShipHand(pchar, SHIP_LUGGER, 6, 700, 40, 610, 16000, 15.2, 58.8, 1.42);

(pchar, SHIP_LUGGER (тип корабля), 6 (максимальный класс пушек), 700 (вместимость трюма), 40 (численность команды), 610 (здоровье корабля), 16000 (цена), 15.2 (скорость), 58.8 (маневренность), 1.42 (скорее всего это "WindAgainstSpeed" - влияние направление ветра на скорость);

Пробовал менять "SHIP_LUGGER" на другой тип корабля, но ловил баг из-за которого ломается стартовая цепочка квестов с невозможность дальнейшей игры. По скриптам, когда мы вызволяем Фулька Делюка из тюрьмы, мы должны с ним поговорить в каюте, но из-за замены "SHIP_LUGGER" на другой тип корабля Фульк просто не появляется в каюте.

2. Для замены корабля "Сумрак", который дается взамен вашего уничтоженного судна в рамках цепочки квестов "Голландский Гамбит" на стороне тайной организации, открываем файл "Tonzag" и ищем следующие строки:

pchar.Ship.Type = GenerateShipHand(pchar, SHIP_CAREERLUGGER, 12, 580, 30, 800, 20000, 16.5, 65.5, 1.6);
8. Меняем перки, характеристики и стартовое снаряжение:
Требуется начать новую игру.

Открываем файл "RPGUtilite" и ищем следующие строки:

В данном файле прописаны стартовые значения для архетипов персонажа.
1) Гимнаст - HeroType_1
2) Счетовод - HeroType_2
3) Атлет - HeroType_3
4) Оружейник - HeroType_4

Возьмем в качестве примера Атлета.
Стартовое снаряжение, строки:
case "HeroType_3":
itemID = GetGeneratedItem("blade_14"); // валлонская шпага
GiveItem2Character(ch, itemID);
EquipCharacterbyItem(ch, itemID);
TakenItems(ch, "jewelry3", 1); //(предмет в инвентаре)
TakenItems(ch, "jewelry42", 1); //(предмет в инвентаре)
TakenItems(ch, "jewelry43", 2); //(предмет в инвентаре)
TakenItems(ch, "jewelry46", 3); //(предмет в инвентаре)
ch.money = 500; (деньги в инвентаре)

В данном примере "jewelry46" - это наименование предмета, 3 - это количество предметов);

Списки и наименования предметов можно посмотреть в файле "ItemsDescribe", который расположен по пути - Ваш диск:\Steam\steamapps\common\Sea Dogs To Each His Own\RESOURCE\INI\texts\russian

Стартовые характеристики, строки:
case "HeroType_3":
SetSPECIAL(ch, 10, 3, 8, 5, 4, 8, 4); // (характеристики персонажа)
SetSelfSkill(ch, 3, 5, 15, 5, 7); // (уровень прокачки навыков - земля)
SetShipSkill(ch, 5, 3, 3, 8, 3, 10, 8, 3, 3); // (уровень прокачки навыков - море)
SetCharacterPerk(ch, "Medic"); // (стартовый открытый навык)
SetCharacterPerk(ch, "HT3"); // (тип героя, не трогаем)

Расшифровка:
SetSPECIAL(ch, 10 сила, 3 восприятие, 8 реакция, 5 лидерство, 4 обучаемость, 8 выносливость, 4 удача);
SetSelfSkill(sld, 3 рапиры, 5 сабли, 15 палаши, 5 пистоли, 7 везение);
SetShipSkill(sld, 5 харизма, 3 торговля, 3 меткость, 8 орудия, 3 навигация, 10 починка, 8 абордаж, 3 защита, 3 скрытность);

В указанный кейс можно добавлять или убирать навыки которые вы хотите иметь на старте.

Боевые навыки:
1) Навык основной защиты - "BasicDefense" -
2) Навык продвинутой защиты - "AdvancedDefense" -
3) Критический удар - "CriticalHit"
4) Растущая жизнь - "HPPlus"
5) Неутомимость - "Tireless"
6) Растущая энергия - "EnergyPlus"
7) Неотразимый удар - "Sliding"
8) Профессиональный фехтовальщик - "SwordplayProfessional"
9) Тяжелая рука "HardHitter"
10) Танец с саблями "BladeDancer"
11) Мушкетер - "Gunman"
12) Стрелок - "GunProfessional"
13) Дополнительный вес - "Grus"
14) Железная воля - "IronWill"
15) Спасение на шлюпке - "ShipEscape"
16) Обмен опытом - "SharedExperience"
17) Отменное здоровье - "Medic"
18) Вызывающий доверие - "Trustworthy"
19) Алхимия - "Alchemy"
20) Совместитель 1 - "ByWorker"
21) Совместитель 2 - "ByWorker2"
22. Скрытый навык - "Energaiser"

Морские навыки:
1) Brander"; // боцман
2) Troopers"; // боцман
3) LongRangeGrappling"; // боцман
4) GrapplingProfessional"; // боцман
5) MusketsShoot"; // боцман
6) BasicCommerce"; // казначей
7) AdvancedCommerce"; // казначей
8) ProfessionalCommerce"; // казначей
9) FastReload"; // канонир
10) ImmediateReload"; // канонир
11) HullDamageUp"; // канонир
12) SailsDamageUp"; // канонир
13) CrewDamageUp"; // канонир
14) CriticalShoot"; // канонир
15) LongRangeShoot"; // канонир
16) CannonProfessional"; // канонир
17) LightRepair"; // плотник
18) Builder"; // плотник
19) BasicBattleState"; // плотник
20) AdvancedBattleState"; // плотник
21) InstantRepair"; // плотник
22) SelfRepair"; // плотник
23) ShipDefenseProfessional"; // плотник
24) ShipSpeedUp"; // штурман
25) ShipTurnRateUp"; // штурман
26) StormProfessional"; // штурман
27) WindCatcher"; // штурман
28) SailsMan"; // штурман
29) Turn180"; // штурман
30) SailingProfessional"; // штурман
31) Doctor1"; // врач
32) Doctor2"; // врач

Для изменения переносимого веса с помощью навыка "Дополнительный вес" ("Grus") ищем строку:
if (IsCharacterPerkOn(_chref, "Grus")) iBonus = 30;
Меняем 30 на желаемое значение.

Для изменения количества добавляемого здоровья с каждым уровнем с помощью навыка "Растущая жизнь" ("HPPlus") ищем строки:
if (CheckCharacterPerk(_refCharacter, "HPPlus"))
{
ret = ret + 1;
Меняем 1 на желаемое значение.

Для изменения количества получаемого опыта с помощью навыка "SharedExperience" ищем строки:
AddCharacterExpToSkill(GetCharacter(cn), _skill, _addValue / 2.0);
AddCharacterExpToSkill(GetCharacter(cn), _skill, _addValue / 10.0);
AddCharacterExpToSkill(GetCharacter(cn), _skill, _addValue / 3.0);
AddCharacterExpToSkill(GetCharacter(cn), _skill, _addValue / 4.0);
AddCharacterExpToSkill(GetCharacter(cn), _skill, _addValue / 20.0);
AddCharacterExpToSkill(GetCharacter(cn), _skill, _addValue / 6.0);
Если выставить все значения на 1.0, то опыт, получаемый офицерами, компаньонами, пассажирами и пленниками, урезаться не будет.


Также в файле "RPGUtilite" можно настроить:
1) другие навыки

2) бонусы от зелий мангаросы, ищем строки:
// Jason: зелья мангаросы
int ApplySPECIALMangarosaPotion(ref rChar, String sSkillName) // 280313

3) поменять дебафы от брони на баффы, ищем строки:
// Warship 25.10.08 Учет одежды
int SetCharacterSkillBySuit(ref rChar, String sSkillName)
9. Меняем характеристики НПС:
Изменить навыки и характеристики можно у любых персонажей, например:
файл "reaction_functions" - Клод Дюран, Тичингиту
файл "QuestsUtilite" - Чарли Книппель, Лонгвэй, Эркюль Тонзаг, Мэри Каспер, Мак Артур
файл "FortFrance_Prison" - Фульк Делюк
файл "Common_Brothel" - Хьюго Авендел


Пример:
файл - "FortFrance_Prison"

sld. name = "Фульк";
sld.lastname = "Делюк";
sld.greeting = "officer_hire";
sld.Dialog.Filename = "Quest\Sharlie\OtherNPC.c";
sld.dialog.currentnode = "Folke";
LAi_SetImmortal(sld, true);
sld.CompanionDisable = true;
sld.rank = 5; (уровень персонажа)
LAi_SetHP(sld, 90, 90); (стартовое здоровье)
sld.money = 0; (деньги в инвентаре)
SetSelfSkill(sld, 25, 28, 21, 24, 22); (уровни навыков, расшифровку описывал выше)
SetShipSkill(sld, 10, 5, 24, 22, 25, 15, 5, 15, 18); (уровни навыков, расшифровку указывал выше)
SetSPECIAL(sld, 8, 9, 6, 5, 10, 7, 5); (характеристики персонажа, расшифровку указывал выше)
SetCharacterPerk(sld, "ShipSpeedUp"); (стартовый открытый навык)
SetCharacterPerk(sld, "HullDamageUp"); (стартовый открытый навык)
SetCharacterPerk(sld, "BasicDefense"); (стартовый открытый навык)
GiveItem2Character(sld, "unarmed");
EquipCharacterbyItem(sld, "unarmed");
ChangeCharacterAddressGroup(sld, "Fortfrance_prison", "goto", "goto23");
LAi_SetActorType(sld);
LAi_ActorGoToLocator(sld, "reload", "reload1", "FolkeStay", -1);
pchar.questTemp.Sharlie = "takeskiper";

Обращаю внимание на то, что строки для добавления навыков нашего персонажа и для НПС отличаются, например:
SetCharacterPerk(sld, "Medic"); - для нашего используется "sld"
SetCharacterPerk(ch, "Medic"); - для НПС используется "ch"
Если их перепутать игра выдаст ошибку и не откроется.
10. Меняем квест Дюнкерк:
Открываем файл "GenQuests_Dialog" и ищем строку:

link.l1 = LinkRandPhrase("Нет ещё...","Какой Дюнкерк, какая Европа? Посмотрите вокруг...","О, Господи!..");
link.l1.go = "ShipWreck_35";

Меняем на 35 на 40

После данного изменения не придется бесконечно надеяться, что выпадет нужная строчка диалога. Теперь любая строчка диалога дает положительный результат и завершает квест.
11. Снятие уровневых ограничений с квестов:
Подробное объяснение можете посмотреть у этого чела: https://www.youtube.com/watch?v=xsP0iBotrPw

Ряд квестов содержат уровневые ограничения из-за которых при достижении определенного уровня персонажа квест взять невозможно.

Для изменения уровневых ограничений для квеста "Голландский Гамбит" на стороне тайной организации открываем файл "Bridgetown_Tavern" и ищем следующие строки:

if(sti(pchar.reputation.nobility) > 41)
Строка отвечает за проверку репутации, где "> 41" это отрицательная репутация для взятия квеста. Можно заменить на "< 5", чтобы квест можно было взять даже с положительной репутацией.

Значение репутации указаны в файле "RPGUtilite". За репутацию нашего персонажа отвечают вот эти строки:
if(reputation < 6) return "REPUTATION_NOBILITY_1"; // "Мерзавец"
if(reputation < 16) return "REPUTATION_NOBILITY_2"; // "Злодей"
if(reputation < 31) return "REPUTATION_NOBILITY_3"; // "Пират"
if(reputation < 48) return "REPUTATION_NOBILITY_4"; // "Проходимец"
if(reputation < 53) return "REPUTATION_NOBILITY_5"; // "Авантюрист"
if(reputation < 71) return "REPUTATION_NOBILITY_6"; // "Честолюбец"
if(reputation < 86) return "REPUTATION_NOBILITY_7"; // "Идальго"
if(reputation < 96) return "REPUTATION_NOBILITY_8"; // "Герой"
return "REPUTATION_NOBILITY_9"; // "Паладин"

За репутацию НПС отвечают вот эти строки:
if(reputation<11)
return "REPUTATIONT_BAD_4"; // "Кровавый убийца"
if(reputation<21)
return "REPUTATIONT_BAD_3"; // "Негодяй"
if(reputation<31)
return "REPUTATIONT_BAD_2"; // "Пройдоха"
if(reputation<41)
return "REPUTATIONT_BAD_1"; // "Мошенник"
if(reputation<51)
return "REPUTATIONT_NEUTRAL"; // "Обычный моряк"
if(reputation<61)
return "REPUTATIONT_GOOD_1"; // "Славный малый"
if(reputation<71)
return "REPUTATIONT_GOOD_2"; // "Честный капитан"
if(reputation<81)
return "REPUTATIONT_GOOD_3"; // "Человек чести"
if(reputation<=90)
return "REPUTATIONT_GOOD_4"; // "Герой"


if(sti(Pchar.rank) > 15)
Строка отвечает за проверку уровня персонажа, где "> 15" это максимальный уровень персонажа, при превышении которого квест нельзя взять. Меняем на 55, чтобы можно было не париться насчет того, что вы случайно перекачаетесь и не сможете взять квест.

Ниже в файле можно найти строки отвечающие за проверку минимальных навыков, необходимых для взятия квеста за тайную организацию.
if(GetSummonSkillFromName(pchar, SKILL_F_LIGHT) < 25 || GetSummonSkillFromName(pchar, SKILL_FENCING) < 25 || GetSummonSkillFromName(pchar, SKILL_F_HEAVY) < 25 || GetSummonSkillFromName(pchar, SKILL_PISTOL) < 25)//слабое фехтование
В данном случае "< 25" это минимальное значение навыка, необходимое для взятия квеста за тайную организацию.

Для изменения ограничений для квеста "Голландский Гамбит" на стороне Англии открываем файл "Knippel" и ищем следующие строки:
if(sti(Pchar.rank) > 15
Меняем значение на 55.

Для изменения ограничений для цепочки квестов "Последний урок" открываем файл "reaction_functions" и ищем следующие строки:
if (CheckAttribute(pchar, "questTemp.HWIC") || sti(pchar.rank) > 12

if (CheckAttribute(pchar, "questTemp.HWIC") || sti(pchar.rank) > 14

Везде меняем значение на 55.

Для финального квеста данной цепочки ищем строки:
pchar.quest.FMQL_delete_guide.win_condition.l1.value = 15;
Меняем значение на 55.

Также чуть ниже ищем строку:
void FMQL_DeleteGuide(string qName) // удаляем гида на 15 ранге
Блокируем данную строку с помощью "//". Должно в итоге быть так:
//void FMQL_DeleteGuide(string qName) // удаляем гида на 15 ранге

Для снятия ограничения в квесте "Бесчетсный конкурент открываем файл "Common_Store" и ищем строку:

if(pchar.questTemp.Shadowtrader == "begin" && GetNpcQuestPastDayParam(npchar, "Shadowtrader_date") < 5 && NPChar.location == pchar.questTemp.Shadowtrader.City + "_store")

Заменяем 5 на 55
12. Меняем срок действия артефактов:
Требуется начать новую игру.

Открываем файл "initItems" и ищем для примера следующую строку:

n = InitStdAmulet(n, "totem_01", "Totem_1", "ITEMS_21", 3, rand(5000) + 10000, 0.5, 0.001, 1, 30, ITEM_TOTEM, 1, 1,
В данном примере "30" это число дней, в течение которых действует артефакт. Меняем на желаемое значение. Аналогично меняем значение другим артефактам.

Для изменения срока действия хронометра ищем строки:
makeref(itm,Items[n]); //тарифицированный хронометр
itm.id = "clock2";
itm.groupID = ITEM_SLOT_TYPE;
itm. name = "itmname_clock2";
itm.describe = "itmdescr_clock2";
itm.model = "";
itm.picIndex = 6;
itm.picTexture = "ITEMS_23";
itm.price = 10000;
itm.Weight = 1.0;
itm.longitude = true; // позволяет определять долготу
itm.multiobject = true;
itm.multiobject.qty = 1;
itm.multiobject.alchemy = false;
itm.time = 30;
itm.ItemType = "ARTEFACT";
itm.Type = ITEM_OBEREG;
itm.TradeType = ITEM_TRADE_AMMUNITION;

В строке "itm.time = 30;" заменяем 30 на желаемое значение.

Такие же строки ищем для "яд таино" (indian_poison)

Для изменения срока действия "шкуры ягуара" (KhaelRoa_item) открываем файл "Caleuche_dialog" и ищем строки:

sld = ItemsFromID("KhaelRoa_item");
sld.groupID = ITEM_SLOT_TYPE;
sld.ItemType = "ARTEFACT";
sld.Type = ITEM_AMULET;
sld.time = 2;
sld.price = 5000;
sld.Weight = 10.0;
AddQuestRecord("Caleuche", "38");
AddCharacterExpToSkill(pchar, "Fortune", 200);
AddCharacterExpToSkill(pchar, "Leadership", 200);
ChangeCharacterComplexReputation(pchar, "authority", 2);
ChangeIndianRelation(10.0);

Чтобы в описании предмета в игре срок его действия соответствовал измененному необходимо поменять описание в файле "ItemsDescribe", который расположен по пути - Ваш диск:\Steam\steamapps\common\Sea Dogs To Each His Own\RESOURCE\INI\texts\russian

Также можно найти снять ограничение на ношение разных типов артефактов.
Для этого открываем файл "characterUtilite" и ищем следующие строки:

ref rItem1 = ItemsFromID(sItem); // экипированный артефакт
ref rItem2 = ItemsFromID(itemID); // артефакт который хотим одеть
if(!CheckAttribute(rItem1,"type") || !CheckAttribute(rItem2,"type")) return false;
if(rItem1.type == rItem2.type) continue;
if(rItem1.type == ITEM_OBEREG || rItem1.type == ITEM_TOTEM) continue;
if(rItem2.type == ITEM_OBEREG || rItem2.type == ITEM_TOTEM) continue;
else return false; // разного типа - одеть нельзя !!!!!

В данном случае заменяем "false" на "true"
13. Разблокировка дополнительных персонажей:
Открываем файл "_LSC_on_off" и ищем строку:

int MaxHeroQty = 1; // максимальное кол-во ГГ

Меняем 1 на 4

Но смысла в этом особого нет, так как сюжета для них нет.
14. Корабельные орудия:
Требуется начало новой игры

Для изменения характеристик орудий открываем файл "cannons_init" - в нем прописаны характеристики всех корабельных орудий в игре.

Для того чтобы все орудия появились в продаже на верфи открываем файл "initGoods". Данный файл отвечает за товары в магазине и верфи доступные к продаже и ищем значение:
NotSale = 1;
Выбираем необходимый товар и меняем значение на 0 для того чтобы товар был доступен к покупке.
15. Изменение раскладки клавиатуры
Подробное объяснение можете посмотреть у этого чела https://www.youtube.com/watch?v=CfD5rkbwRw8&t=7s

Для изменения раскладки клавиатуры идем по пути - Ваш диск:\Steam\steamapps\common\Sea Dogs To Each His Own - и открываем файл "options"

Чтобы изменения применились к уже имеющемуся игровому профилю нужно скопировать файл "options", который вы изменили, и заменить им такой же файл по пути - Ваш диск:\Steam\steamapps\common\Sea Dogs To Each His Own\SAVE\Имя профиля в игре\options
16. Изменение содержимого кораблей
Не требует начала новой игры.

Изменения не применяются к уже сгенерированным кораблям и локациям.

Открываем файл "QuestsUtilite" и ищем для примера следующие строки:

_location.box1.items.gold_dublon = 800;

_location.box1.items.(наименование предмета) = (количество предметов);

Наименование всех предметов можно посмотреть в файле "ItemsDescribe" по пути Ваш диск:\Steam\steamapps\common\Sea Dogs To Each His Own\RESOURCE\INI\texts\russian

Также в этом файле можно настроить количество генерируемого лута не только для квестовых кораблей, но и для всех других генерируемых кораблей.
17. Оставляем экипаж вместе с кораблем
Не требует начала новой игры.

Открываем файл "Common_Portman" и ищем строку:

chref.Ship.Crew.Quantity = 0;

В данном случае "0" это количество членов экипажа которое добавляется на корабль, когда мы его оставляем в портовом управлении.
Однако, если заменить 0 к примеру на 500, то при оставлении любого корабля в портовом управлении на нем появится 500 членов экипаж. Игра проигнорирует лимит вместимости экипажа на корабле и добавит то значение которое вы указали. Качество команды будет такое же как было на корабле при сдаче на стоянку либо такое же как на вашем флагмане.

Не разобрался, что нужно прописать вместо "0", чтобы оставлять в портовом управлении именно то количество членов экипажа, которое было на корабле. Получилось читерно, но зато всегда можно пополнить команду после боя в любом портовом управлении, поставив корабль и забрав его обратно.
18. Продажа карт сокровищ в таверне
Не требует начала новой игры.

Открываем файл "LAi_utilites" и ищем строку:

if (rand(15) == 3 || TestRansackCaptain) // ugeen --> уменьшил вероятность встретить странную личность с картой до 1/20

Меняем оба значения на единицу. Должно получиться так:
if (rand(1) == 1 || TestRansackCaptain)

Теперь в таверне НПС продающий карту сокровищ будет попадаться чаще
19. Изменение товаров и денег у торговцев
Не требует начала новой игры:

Открываем файл "utils" по пути Ваш диск:\Steam\steamapps\common\Sea Dogs To Each His Own\PROGRAM\scripts
В данном файле прописаны количество денег у торговцев и товары появляющиеся у них в продаже.

За количество денег у торговцев отвечаю следующие строки:
#define TRADER_MAX_MONEY 30000 //максимальное количество денег у торговцев
#define TRADER_MIN_MONEY 15000 //минимальное количество денег у торговцев
#define TRADER_NORM 15000 //среднее количество денег у торговцев

#define USURER_MAX_MONEY 120000 //максимальное количество денег у ростовщика
#define USURER_MIN_MONEY 80000 //минимальное количество денег у ростовщика
#define USURER_NORM 100000 //среднее количество денег у ростовщика

#define CAP_MAX_MONEY 45000 // максимальное количество денег у капитанов
#define CAP_MIN_MONEY 20000 //минимальное количество денег у капитанов
#define CAP_NORM 25000 // среднее количество денег у капитанов

#define USURER_MAX_DUBLONS 150 //максимальное количество дублонов у ростовщика
#define USURER_MIN_DUBLONS 50 //минимальное количество дублонов у ростовщика

Чтобы добавить в постоянную продажу уличному торговцу оружием "азотную кислоту" (Mineral29), "этиловый спирт" (Mineral28) и "гремучее серебро" (OxyHydSilver), которые нужны для крафта патронов к револьверу, ищем следующие строки:

case "armourer": // оружие и боеприпасы
AddItems(ch, "bullet", Rand(20) + 10);
AddItems(ch, "grapeshot", Rand(5) + 5);
AddItems(ch, "gunpowder", Rand(10) + 5); // Warship. Порох
// трубы
irand = drand(10);

В формуле "Rand(10) + 5" десять это рандомно генерируемое количество от 1 до 10, а пять это фиксированное количество добавляемое к сгенерированному результату. Значения можно выставить любые.

Добавляем следующие строки:
AddItems(ch, "Mineral29", Rand(10) + 5); // азотная кислота
AddItems(ch, "Mineral28", Rand(10) + 5); // этиловый спирт
AddItems(ch, "OxyHydSilver", Rand(10) + 5); // гремучее серебро

Должно получиться во так:

AddItems(ch, "bullet", Rand(20) + 10);
AddItems(ch, "grapeshot", Rand(5) + 5);
AddItems(ch, "gunpowder", Rand(10) + 5); // Warship. Порох
AddItems(ch, "Mineral29", Rand(10) + 5); // азотная кислота
AddItems(ch, "Mineral28", Rand(10) + 5); // этиловый спирт
AddItems(ch, "OxyHydSilver", Rand(10) + 5); // гремучее серебро
// трубы
irand = drand(10);

Аналогичным образом можно добавлять товары другим торговцам в разделах:
case "potion" : // торговки лекарствами и травами
case "veteran" : // торговки барахлом
case "armourer": // торговец оружием
case "monk" : // монахи
case "indian" : // цыганки торгующие амулетами
case "jeweller" :// ростовщики
case "lightman": // смотрители маяков
case "minentown": // торговец на золотом руднике
case "LSC_indian": // индеец
case "company": // главный клерк ГВИК
case "cemeteryman": // смотрители кладбищ
20. Снятие ограничения на ускорение времени
Не требует начала новой игры


Открываем файл "seadogs" и ищем строки:

if (TimeScaleCounter > 20) TimeScaleCounter = 20;
}
else
{ // без боя
if (bSeaActive && !bAbordageStarted )
{
if (TimeScaleCounter > 28) TimeScaleCounter = 28; // море
}
else
{
if (TimeScaleCounter > 8) TimeScaleCounter = 8; // суша
}
}
if (IsEntity(&worldMap))
{
if (TimeScaleCounter > 6) TimeScaleCounter = 6;

Для себя заменил вышеуказанные значения 28, 8, и 6 на 88, в результате чего в игре можно увеличить ускорение времени до 23 раз, что позволяет быстрее пробегать локации. Указанные изменения не распространяются на ускорение времени в бою.
4 条留言
Nasiis  [作者] 12 月 12 日 上午 10:37 
@МИГ-31
Рад помочь
МИГ-31 12 月 11 日 上午 2:46 
@Nasiis
Уже воспользовался твоими наработками - добавил флотский карабин(ну просто он мне больше нравится) в список предметов для торговца оружием ну и в наименовании оружия изменил его редкость(а то число 0.0001 это как-то некрасиво выходит а вот 0.1 уже нормально)
Nasiis  [作者] 12 月 10 日 下午 1:11 
@МИГ-31
Именно оружие нет, но посмотри пункт 8 и 19 руководства. В 8 пункте расписано, где смотреть наименование игровых предметов (файл ItemsDescribe), а в пункте 19 указано как добавлять предметы торговцам на примере добавления "азотной кислоты" (файл scripts). По аналогии можно любой предмет добавить в продажу.
МИГ-31 12 月 10 日 上午 6:07 
Привет, а ты добавлял торговцам оружие? Если честно то хотел бы добавить торговцу оружием флотский карабин - поскольку Голландский Гамбит я проходил за Англию и он мне не достался. А пиратов пострелять из него очень охота.