Помощь - Поиск - Пользователи - Календарь
Полная версия: Составление FAQ по модификациям
Форум студии Seaward.Ru > Форумы аддонов к играм ПКМ, КВЛ, ГПК > Модификации для игр на ядре Storm 2.x
Страницы: 1, 2
Dogeva
предлагаю всем добрым и умным человекам 1.gif собраться и составить ФАК по внесениям модификаций в аддон. причина проста - обычно спрашивают одни и те же вопросы вроде "а как изменить текстуру гг", "а как вставить ее в игру" и т.д. dry.gif поэтому все желающие помочь вэлком! 3.gif

для примера приведу пост, найденный в "Готовых интерфейсах":
Цитата(SONIkom @ Jan 4 2006, 03:53) *

ФАК по созданию собственного интерфейса в ВМЛ.

Введение.
Для того чтобы создать интерфейс в ВМЛ, разработчикам пришлось придерживаться нескольких правил: 1-е правило из которых было создать мультиплатформенную систему интерфейса (для ПК и консоли Xbox), что означает приминение не только указателя мыши, но и кнопок джойстика. Для удобства управления джойстиком ессесно нужно чтобы иконки, кнопки и другие элементы управления находились в четырех (максимум для крестика геймпада) сторонах. В то же время, мышью по ним тоже можно тыкать, но это уже не интересно для ПК-шников. Поэтому команда аддонтима переделывала интерфейс под привычную компьютерную мышь.
Для этого им пришлось полностью перевернуть кверх дном каталог "игра\RESOURCE\INI\INTERFACES", где на языке С-подобном приписаны координаты элементов управления интерфейсом (кнопки, иконки, фоны и др.), цветовая гамма, анимация фона и др. полезные вещи. Естесственно в этих *.ini файлах прописаны названия текстур этих самых элементов. Вот о них-то нам и нужно знать...

Начнем.
Каждый для себя может делать свой интерфейс и в *.ini файлах, но эти файлы еще в стадии разработки и, поэтому, их редактировать смысла мало - все-равно с каждым обновлением они меняются (ну, почти с каждым). Мы будем переделывать файлы текстур для ПКМ и ВМЛ. Чтобы их переделать, нужно иметь под рукой Фотошоп, tx_convertor, запущенную игру ВМЛ в оконном! режиме, мозги, руки и... кофе.

- Почти каждая текстура имеет альфа-канал, нужно уметь с ним работать
- ПРАВКА!!! - Для того, чтобы правильно отредактировать альфа-канал в текстуре см. самый конец ФАК'а - раздел HELP.
- Почти каждая текстура разделена на несколько более мелких, не накладывайте одну на другую, старайтесь не менять положения иконок
- Все текстуры сохранены в формате *.tga.tx - т.е. они открываются в tx_converter, конвертируются в формат *.tga, ред-ся в Фотошопе, а потом конв-ся в *.tga.tx.
- Если возникают вопросы, спрашивайте на форуме, не надо почты!!! на форуме много народа, которые знают тоже, что и я...
- ПРАВКА!!!: вверху при конвертировании из tx и обратно, вверху и внизу ставим на A8R8G8B8... справа "none", внизу всего: (*)minimum mip size, и слайдер влево до упора (1 pix)

Каталоги, которые нам необходимы (я бы на вашем месте перед работой сделал бы их копию):

1. Resource\Textures\Interfaces - бОльшая часть всех элементов интерфейса
2. Resource\Textures\DIALOG - меню диалогов
3. Resource\Textures\BATTLE_INTERFACE - иконки действий в море, на суше
4. Resource\Textures\Fonts - в ней шрифты
5. Resource\Textures\Loading - *опционально, фоны при загрузках.
6. Resource\Textures\TextureSequence - фоны кнопок управления+анимация фона в главном меню

* - этого я не редактировал, мне нравятся оригинальные.

=====================================================Итак, начнем с 1-го:

_"Resource\Textures\Interfaces" файлы, нам интересные, там есть много чего, но это по вашему желанию, я привел тока самое необходимое

blank_ship.tga.tx - кораблика нет (иконка)
buy_sell.tga.tx
buySellFlags.tga.tx
cannons.tga.tx - пушки (иконки)
CorruptSave.tga.tx - редкость, но нада - иконка плохого сохранения
Cursor32.tga.tx - курсор, меня устроил базовый
DisketaEmpty.tga.tx |
DisketaSave.tga.tx | текстуры из меню сохр\загр
EmptyFace.tga.tx |
EmptyBorder.tga.tx - пустая рамка (жел-но схожая из icons.tga.tx)
ExchangeButtons.tga.tx - кнопки меню обмен
FortPris.tga.tx - заставка при захвате форта
glowbutton.tga.tx - подсветка кнопок (мона закрасить черной альфа, она исчезнет)
goods.tga.tx - иконки товаров
Hold.tga.tx - изображение трюма в меню покупок
icons.tga.tx - самое большое сборище всех основных элементов (не забудьте про
альфа-канал!!!)
icons_spec.tga.tx - дополнительные элементы управления (в том числе крестик
закрытия окна)
items1-11.tga.tx - иконки вещей, самый настоящий гемор переделки:)
old_map.tga.tx - на фоне главного меню игры есть старая карта, перемещающаяся по
экрану в разные стороны, это она и есть (я переделал в
дым: Photoshop->фильтр dClouds)
perkuse.tga.tx - галка применяемого перка
scroll.tga.tx - фон для меню журнала, статистики, цен на товары...
ship_status.tga.tx - иконки состояния: Корпус\Паруса\Пушки\Команда из меню корабля
Slider_line\line_base\pointes.tga.tx - слайдеры из меню настроек яркости, звука...
small_islands.tga.tx - острова из меню торговли (импорт\экспорт\контрабанда, там они вверху прокручиваются)
Store.tga.tx - (из темы Hold.tga.tx) - изображение склада магазина в меню торговли
swapItem.tga.tx - (из темы ExchangeButtons.tga.tx) кнопка обмена вещами
usedflag.tga.tx - тоже самое в perkuse.tga.tx только для чего-то другого
z_salay.tga.tx - заставка выдачи зарплаты

...Продолжаем...

_"Resource\Textures\Interfaces\Circle"
circle1.tga.tx | круги из главного меню ПКМ, да и в ВМЛ
circle2.tga.tx | они тоже есть
circle3.tga.tx - в игре не нашел...

_"Resource\Textures\Interfaces\MainBack" - фоны в меню
mb1.tga.tx
mb2.tga.tx
mb3.tga.tx - фон в главном меню
ship copy.tga.tx

_"Resource\Textures\Interfaces\Perks" - *опционально, по желанию

_"Resource\Textures\Interfaces\Portraits" - *опционально, по желанию
\128 - 128x128, 16bpp цвет
\64 - 64x64, 16bpp цвет
\64Disable - 64x64, 16bpp черн\бел

=====================================================Следующий - 2й
_"Resource\Textures\DIALOG"
dialog.tga.tx - Здесь интерфес общения со всеми npc, да, и только здесь (был где-то еще,
но он для ПКМ)

=====================================================Следующий - 3й
_"Resource\Textures\BATTLE_INTERFACE"
Здесь расписывать не буду, там все по идее надо менять (что я и сделал), но скажу лишь про некоторые непонятные файлы:
Panel.tga.tx - фон, где отображается все, что видно в подзорную трубу
compass.tga.tx - Компасс - гемор, альфа канал и текстура, постоянно глючат.
Кому надо пример переделки ко мне на почту (sonik-a@narod.ru)
ir_buttons - не нужна ваще (для Xbox)

=====================================================Следующий - 4й
_"Resource\Textures\Fonts"
Здесь шрифты, сами разберетесь. Лично я менял тока цветовую гамму (под желтовато-коричневый, симпатишно:)

=====================================================Следующий - 5й
_"Resource\Textures\Loading"
Описанию тож не поддается, все фоны загрузок, добро пожаловать:)
progress.tga.tx - всеми любимый крутящийся череп, разложенный на кадры
(чтобы заменить разложите любую анимацию на кадры в
редакторе каком-нить специальном и вставьте)

=====================================================Следующий - 6й
_"Resource\Textures\TextureSequence"
Фоны кнопок, волны морские. Я скопировал из К3 и добавил (уменьшив по вертикали в два раза) в текстуру ПКМ, чуть затемнил - получилось неплохо.
===???===HELP===???===

===АЛЬФА-КАНАЛ В ТЕКСТУРАХ===
1. ПРО Альфа-канал.
Альфа-канал - используется в текстурах для разных вещей, например для прозрачности, формы... В ПКМ альфа-канал используется на всех текстурах. На некоторых есть какой-то черный вырез на белом фоне, на других полностью белый фон. Давайте представим флаг развивающийся на рее корабля в игре. Текстура, кроме как прямоугольной быть не может, а флаг надо заострить двумя треугольниками. Так как же это сделать? Очень просто - добавим новый канал к трем основным (красный, зеленый, голубой), который из этих трех основных будет показывать только ту часть, которую мы зарисуем, т.е. прямоугольник, в котором вырезан мааааленький треугольник. В альфа-канале (так его назвали) на черном фоне (ноль, цветная картинка не берется в изображение) рисуем флаг белого цвета (этот белый цвет есть единица, которая отображает цветную картинку там, где ее нарисовали), потом возвращаемся в rgb режим (выбирается там же) и добавляем уже что-то свое (иначе флаг будет цвета начального фона), например герб Франции.
Так вот из этой запутаной басни уясним, что белый цвет в альфа-канале показывает, что под ним прячется (т.е. цветную картинку), а черный, наоборот - не показывает (т.е. обрезает ее в этом месте), серый (процент от 99% черного до 1%) задает степень прозрачности текстуры (цветной картинки).
2. КАК это делается.
- Открываем в фотошопе, скажем icons.tga (уже конвертированную tx_converter'ом).
- Лезем в меню окно (где "файл\редактирование\изображение..."), там выбираем строку "каналы", щелкаем по ней.
- На экране появилось окно с черно-белом изображением, в котором показались контуры элементов текстуры icons.tga.
- Далее заливаем все 50% серым в альфа канале (щелкаем по нему один раз в том окне, которое только открывали), сохраняем, конвертируем в ВМЛ, запукаем игру - смотрите-ка, все кнопки и другие элементы прозрачные. Уже немного яснее что енто.
- Далее, не выходя из игры, сворачиваем ее (для этого нужно в настройках снять галку "полноэкранный режим"), откатываем одно действие назад в Фотошопе, опять контуры.
- Теперь, изменим кнопку с черепами по бокам. В альфа канале в середине этой кнопки черный прямоугольник, что значит в этом месте она прозрачна. Если нужно сделать свой фон в этой кнопке, то переходим через окно "каналы" в полноцветный режим (вверху окна), заливаем серединку кнопки чем-нито своим и, зайдя в альфа-канал обратно, заливаем сей черный прямоугольник белым цветом (терь он будет нашего фона цветом)
- Так можно каждую текстуру редактировать. Можно нарисовать, например свой perkuse.tga.tx, для этого открываем, конвертируем, открываем в Фотошопе, стираем старую галку, рисуем, создав новый слой, например перо, выделяем прозрачность слоя (для этого надо также как окно "каналы" открыть и окно "слои", зажать CTRL и выбрать наш новый слой с пером), далее лезем в "Выделение" (вверху Фотошоповского окна)->Сохранить выделение. Там откроется окно, просто жмем ОК. Появится новый альфа-канал. Старый удаляем (Правой кнопкой по старому каналу в окне "каналы"->УДАЛИТЬ). Теперь остается свести все слои (CTRL+E на англ. раскладке) и сохранить, заменив старую текстуру.
- Теперь конвертируем в ВМЛ и разворачиваем игру. Играем с новой галкой в меню перков. Если не работает, то выйдите из игры и войдите снова. (Не забывайте про настройку tx_converter'а: A8R8G8B8 вверху и внизу)

Позже дополню описание *.INI-файлов. Если чего забыл, поправьте меня!!!
Sonik
Пользуясь случаем, хочу поблагодарить Догеву за предоставленный топик, давно хотел тему создать, да чего-то и позабыл. Постараюсь поддержать тему. ИТАК: далее Q (question) - вопрос, A (answer) - ответ...

Q: А вот спросить хотел: кто знает как прописать код (ИНИ) чтобы деталь в маин меню двигалась с лева на право? Кто знает скажите плиз!

A:
Очень просто,
например, в INI\Interfaces\mainmenu.ini есть круги [circle1],2],3]. В 0124 это штурвал бледно синего цвета за кнопками управления главного меню. Так вот эти самые круги (circles) имеют технику крутиться, названная rotate:

[CIRCLE1]
- название элемента, он прописан в самом начале. Можно любое имя, тока в начале нужно не забыть прописать его порядок слоя.
position = 80,10,560,490
- позиция, т.е. размещение на экране.
techniqueName = iRotate
- имя техники. Текстура крутиться и ее грани будут разглаживаться по краям экрана. Короче пробуй с ней и без нее, потом поймешь
textureName = interfaces\circle\circle1.tga
- ну это и дураку понятно, размещение тга-шной текстуры в формате *.tga.tx
textureRect = 0,0,1.0,1.0
- это короче параметр количества прямоугольников на экране, его часть и т.д. Тоже нужно самому пробовать разные значения, тогда только поймешь
color = 100,128,128,128
- прозрачность (0-255), красный, зеленый, голубой (если текстура, то этим значением определяется ее гамма по сумме трех параметров)
;rotate = 0.02,0.005
- это значение отменено символом ";" в начале строки
rotate = -0.05,0.005
- если написано два ротэйта подряд, и оба без ";", то использоваться будет тот, что выше. Параметр rotate отвечает за скорость поворота текстуры влево (значение отрицательно) и вправо (значение положительно), второй параметр отвечает за ускорение поворота. Я в нем до конца и не разобрался.
speed = 6000,0.0,0.0
- если отменить все rotate, и установить здесь второе и третье значение дробным или целым числом, то текстура будет двигаться по горизонтали (второе значение) или по вертикали (третье значение), если установлены оба - по диагонали. Точно так же как и в rotate значения могут быть как положительными, так и отрицательными (тоже влево\вправо, вверх\вниз) На счет первого значения я ничего не знаю. Любое число здесь ничего не меняет.
Так вот чтобы картинка двигалась влево, то просто убери rotate и поставь значения
speed = 6000,-1.0,0.0
- скорость прокрутки: 6000, горизонтально влево:1, вертикально: 0
а вправо
speed = 6000,1.0,0.0
- скорость прокрутки: 6000, горизонтально вправо:1, вертикально: 0

//// единственная трабла в создании полноценной анимации в ВМЛ - каждые 30 секунд включается видео-заставка, которую невозможно отключить в связи с закрытым кодом, и после которой анимация начинается заново (даже после ручного сброса)
Jaoquin De Masse
Диалоги это главное smile.gif
ЗЫ: Собрал инфу по диалогам какая у меня была, короче вот…

Цитата

Диалоги - главные в игре. С помощью них можно не только разговаривать с NPC, но и прибавлять репутацию, деньги, опыт, задать местонахождение NPC, прибавлять и уменьшать навыки, менять модели, менять корабли, сменить персонажа, получить предмет и т.д. В отличие от первых Корсаров в Pirates of the Caribbean действия (экшены) теперь находятся в диалогах.

Шаблон диалога

void ProcessDialogEvent()
{
ref NPChar, PChar, d;
PChar = GetMainCharacter();
aref Link, NextDiag;
DeleteAttribute(&Dialog,"Links");

makeref(NPChar,CharacterRef);
makearef(Link, Dialog.Links);
makeref(d, Dialog);
makearef(NextDiag, NPChar.Dialog);

switch(Dialog.CurrentNode)
{
case "First Time":
d.Text = "";
Link.l1 = "";
Link.l1.go = "";
Link.l2 = "";
Link.l2.go = "";
Link.l3 = "";
Link.l3.go = "";
NextDiag.TempNode = "First Time";
break;

case "exit":
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;

case "menu":
NextDiag.CurrentNode = NextDiag.TempNode;
LaunchMainMenu();
DialogExit();
break;

case "cannons":
NextDiag.CurrentNode = NextDiag.TempNode;
LaunchCannons();
DialogExit();
break;

case "character":
NextDiag.CurrentNode = NextDiag.TempNode;
LaunchCharacter(GetMainCharacter());
DialogExit();
break;

case "hirecrew":
NextDiag.CurrentNode = NextDiag.TempNode;
LaunchHireCrew();
DialogExit();
break;

case "store":
NextDiag.CurrentNode = NextDiag.TempNode;
LaunchStore(STORE_ONE);
DialogExit();
break;

case "shipyard":
NextDiag.CurrentNode = NextDiag.TempNode;
LaunchShipyard();
DialogExit();
break;

case "shiphold":
NextDiag.CurrentNode = NextDiag.TempNode;
LaunchShipHold();
DialogExit();
break;

}
}

В этом шаблоне я также включил функции магазина, верфи, таверны и даже меню и информации о персонаже. Если вам они не нужны, то смело можете их удалить.
menu - показ меню,
cannons - смена пушек,
character - информация о персонаже,
hirecrew - найм людей в команду,
store - покупка/продажа товаров,
shipyard - покупка/продажа/ремонт корабля,
shiphold - показ трюма корабля.

Немного о немногом

Здесь я буду рассказывать о том, что вы видели в шаблоне. Ну, начнем!
Функцией ProcessDialogEvent() вызывается сам диалог.
Чтобы диалог работал нормально надо назначить переменные: главного героя, NPC, диалога, линков и т.п. Первым делом мы создаем переменные - главного героя, NPC и диалога. Затем нам нужно присвоить переменной PChar (главный герой) значение главного персонажа. После этого опять создаем переменные - Link и NextDiag. Link - это линки, а NextDiag - переменная диалога (для перехода к ноду). Кроме этого мы должны присвоить переменной NPChar значение NPC. После этого начинаем "говорить" линкам, что они линки. ;-) Далее идет присвоение переменной d значение диалога. Затем приписываем переменной NextDiag значение диалога NPC. После всего этого включаем диалог на текущий нод. Дальше идет собственно сам диалог. Кейсом (case) назначаем название диалога, например, First Time, а также в кейс включается и текст диалога NPC и диалога главного героя, а также линки. После этого всегда надо писать break. Чтобы выйти из диалога надо сделать дополнительный case. Пусть он зовется как exit. Там мы переключаем текущий нод на временный (TempNode), ну и конечно выполняем функцию DialogExit(). И опять же break. Еще хочу сказать, что можно создавать свои переменные и применять к ним соответственные значения. Например, вместо переменной d можно сделать Dialog и т.д. Ну вот и все.

Простой диалог

Для легкого (ну, конечно, не совсем легкого) создания диалога создан специальный шаблон диалога. Берите его в руки и создавайте свой диалог. Шаблон я написал выше. Первый диалог называется First Time, второй - Second Time и т.д. Но можно называть кейсы и своим именем. Например, вместо First Time мы можем написать common, как в первых Корсарах. На диалог NPC можно сделать 4 линка. На каждый линк существует свой переход. Для ответа, в котором герой заканчивает диалог существует переход на кейс (case) exit. Этот кейс не надо изменять! Если хотите сделать поменьше линков, то удалите их, а точнее вот это (где n - номер линка):
Link.ln = "";
Link.ln.go = "";
Чтобы сделать другой кейс достаточно скопировать эти строчки:
case "First Time":
NextDiag.TempNode = "First Time";
d.Text = "";
Link.l1 = "";
Link.l1.go = "";
Link.l2 = "";
Link.l2.go = "";
Link.l3 = "";
Link.l3.go = "";
break;
Изменить название кейса, вписать текст диалога NPC, записать ответы, переходы. Конечно, если вам не нужно столько линков можете некоторые удалить, сделать TempNode на следующий кейс. Ну вообщем, это не трудно. Вот здесь я привожу пример маленького диалога с двумя кейсами:
void ProcessDialogEvent()
{
ref NPChar, PChar, d;
PChar = GetMainCharacter();
aref Link, NextDiag;
DeleteAttribute(&Dialog,"Links");

makeref(NPChar,CharacterRef);
makearef(Link, Dialog.Links);
makeref(d, Dialog);
makearef(NextDiag, NPChar.Dialog);

switch(Dialog.CurrentNode)
{
case "First Time":
d.Text = "Здравствуйте! Меня зовут " + NPChar.Name + ". Могу ли я знать как вас зовут?";
Link.l1 = "Меня зовут " + PChar.Name + ". Я капитан корабля " + PChar.Ship.Name + ".";
Link.l1.go = "next";
Link.l2 = "Это не твое дело, " + NPChar.Name + "! Пока!";
Link.l2.go = "exit";
NextDiag.TempNode = "First Time";
break;

case "next":
d.Text = "Что вы от меня хотели?";
Link.l1 = "Да нет, ничего! До свидания!";
Link.l1.go = "exit";
NextDiag.TempNode = "First Time";
break;

case "exit":
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;

}
}
Этот пример простенького диалога написан для того, чтобы дать вам понять, как нужно строить кейс. Теперь давайте рассмотрим другие диалоги. В них я не буду писать весь код диалога, а только кейс.

Диалог продавца

Диалог продавца должен включать функцию LaunchStore с определенным типом, а точнее - STORE_ONE или STORE_TWO. Для этого я написал три кейса:
case "First Time":
d.Text = "Здравствуйте! Меня зовут " + NPChar.Name + ". ? Я владелец этого магазина.";
Link.l1 = "Меня зовут " + PChar.Name + " " + PChar.Lastname + ". Я бы хотел приобрести кое-что!";
Link.l1.go = "store";
Link.l2 = "Меня зовут " + PChar.Name + ", но сейчас мне надо идти! До свидания!";
Link.l2.go = "exit";
NextDiag.TempNode = "First Time";
break;

case "exit":
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;

case "store":
LaunchStore(STORE_ONE);
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;
Вот это пример диалога продавца. Теперь давайте рассмотрим диалог работника верфи!

Диалог работника верфи

Представьте себе верфь. Что там можно сделать? Во-первых, покупать и продавать корабли; во-вторых, ставить себе пушки, ну и в-третьих, можно смотреть трюм корабля. Отсюда следует, нам придется писать кейсы с двумя (хотя можно и с тремя, если считать трюм) функциями - LaunchShipyard и LaunchCannons. Вот эти кейсы:
case "First Time":
d.Text = "Здравствуйте! Меня зовут " + NPChar.Name + ". ? Эта самая лучшая верфь в архипелаге. Может вам нужен хороший корабль?";
Link.l1 = "Да, вы угадали! Я хочу купить себе корабль!";
Link.l1.go = "shipyard";
Link.l2 = "Нет, я лишь хочу поставить на корабль пушки!";
Link.l2.go = "cannons";
Link.l3 = "Нет, мне сейчас ничего не нужно. До свидания!";
Link.l3.go = "exit";
NextDiag.TempNode = "First Time";
break;

case "exit":
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;

case "shipyard":
LaunchShipyard();
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;

case "cannons":
LaunchCannons();
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;
Ну, а теперь предстоит самое сложное - диалог с квестом.

Диалог с квестом

Сначала давайте подумаем, какой квест мы хотим сделать. Будет ли этот квест на доставку чего-либо? Или на потопление кого-либо? Или же цель квеста - убить какого-нибудь персонажа? Или же спасти какого-нибудь персонажа? А может цель - найти кого-нибудь? Или разгромить форт? Будем считать, что вы уже придумали цель своего квеста. Затем нужно создать персонажей, которые будут учавствовать в этом квесте, после этого надо создать переменные квеста, диалоги персонажей. Все, переходим от теории к практике. ;-)

Функции диалога

Функций диалога не так уж и много. Вот они:
RandPhrase("phrase1", "phrase2", "phrase3");
Выбор диалога NPC из 3 вариатов.
RandSwear();
Прибавить к диалогу выражения типа "Якорь мне в корму" и т.п.
GoodEpithet();
Прибавить к диалогу NPC "хорошие" эпитеты.
BadEpithet();
Прибавить к диалогу NPC "плохие" эпитеты.
PCharPhrase("phrase1", "phrase2");
Выбор диалога главного героя из 2 вариантов (в зависимости от главного героя).
TimeGreeting();
Прибавить к диалогу этикетные междометия.
SelectRumour();
Выбрать случайный слух.
GetNPCInformation(ID);
Получить информацию о персонаже с ID.
RandSum("Amount");
Сгенерировать случайное число (Sum) с определенным Amount. Вот что может быть записано в Amount:
Few - в пределах 400
Some - в пределах 2000
Medium - в пределах 4000
Large - в пределах 6000
Huge - в пределах 10000
Address_Form.NATION
Прибавить к диалогу обращение. Вместо NATION надо писать:
Spa - Испания (сеньор)
Fra - Франция (мсье)
Eng - Англия (сэр)
Por - Португалия (синьор)
Hol - Голландия (mijnheer)

Экшены & Действия

Вот список экшенов:
Эти команды можно использовать как на NPC так и на главного героя. Так что переменная персонажа - ch.
Если в квадратных скобках стоит буква Г, то эта переменная должна иметь значение true или false.
Если в квадратных скобках стоит буква S, то переменная может содержать буквы.

ch.Money;
Деньги
ch.Experience;
Опыт
ch.Rank;
Ранг
ch.Model; [S]
Модель
ch.Model.Animation; [S]
Анимация
ch.Model.Entity; [S]
Тип модели
ch.Dead; [Г]
Мертвый или живой (true - мертвый, false - живой)
ch.FaceId;
Лицо (при виде [F1] - только для главного героя)
сh.Location; [S]
Локация
ch.Location.group; [S]
Тип локации
ch.Location.locator; [S]
Место локации
ch.Dialog.Filename; [S]
Файл диалога
ch.Reputation; [S]
Репутация
ch.Name; [S]
Имя персонажа
ch.Lastname; [S]
Фамилия персонажа
ch.skill.Leadership;
Навык: Лидерство
ch.skill.Fencing;
Навык: Фехтование
ch.skill.Sailing;
Навык: Навигация
ch.skill.Accuracy;
Навык: Меткость
ch.skill.Cannons;
Навык: Пушки
ch.skill.Grappling;
Навык: Абордаж
ch.skill.Repair;
Навык: Починка
ch.skill.Defence;
Навык: Защита
ch.skill.Commerce;
Навык: Коммерция
ch.skill.Sneak;
Навык: Шпион
ch.Ship.Name; [S]
Название корабля
ch.Ship.Type; [S]
Тип корабля
ch.Ship.Cannon.Type; [S]
Тип пушек
ch.Nation; [S]
Нация
worldmap.islands.ОСТРОВ.label.text; [S]
Название острова
worldmap.islands.ОСТРОВ.label.icon;
Флаг острова (0 - Англия, 1 - Голландия, 2 - Франция, 3 - Португалия, 4 - Испания, 5 - ???Пираты???)
worldmap.islands.ОСТРОВ.label.visible; [Г]
Видимое название острова или нет (true - видимое, false - невидимое)
worldmap.islands.ОСТРОВ.position.x;
Позиция острова по оси X
worldmap.islands.ОСТРОВ.position.y;
Позиция острова по оси Y
worldmap.islands.ОСТРОВ.position.z;
Позиция острова по оси Z
Environment.time;
Время
Rumour[0].state;
Состояние слуха 1
Rumour[1].state;
Состояние слуха 2
Rumour[2].state;
Состояние слуха 3
Rumour[3].state;
Состояние слуха 4
Rumour[4].state;
Состояние слуха 5
Rumour[5].state;
Состояние слуха 6
Rumour[6].state;
Состояние слуха 7
Rumour[0].text;
Текст слуха 1
Rumour[1].text;
Текст слуха 2
Rumour[2].text;
Текст слуха 3
Rumour[3].text;
Текст слуха 4
Rumour[4].text;
Текст слуха 5
Rumour[5].text;
Текст слуха 6
Rumour[6].text;
Текст слуха 7

Есть еще очень-очень много экшенов. Экшены можно придумывать и самим. ;-)) Примеры:
1) Мы хотим прибавить нам 3000 золотых. В диалоге пишем:
ch.money = ch.money + 3000;
2) Мы хотим, чтобы у нас было 7000 золотых. В диалоге пишем:
ch.money = 7000;
3) Мы хотим сменить диалог у персонажа Ronald Tirberg. ID этого персонажа пусть будет равен 91. В диалоге пишем:
Characters[91].Dialog.Filename = "Ronald Tirberg_sample.c";
Конечно, в Pirates of the Caribbean все диалоги можно поместить в один файл. Так что этот экшен может не понадобиться.
4) Мы хотим сменить лицо нашему герою (например, Блейзу) на пирата (смотрите в авторах ;-). Имя файла этого пирата - face_20.tga.tx. ID Блейза - 0. В диалоге пишем:
Characters[0].FaceId = "19";
Вы думаете я ошибся? Нет! Когда вы хотите применить, например, 18 лицо, то уменьшайте ее, пишите 17, когда 15, пишите 14 и т.д. Вот так!
5) Например, квест разгромить остров Redmond. Короче выполняем квест. И остров теперь никому не принадлежит (название на карте нет, а сам остров виден). Так надо прописать:
worldmap.islands.redmond.label.text = "";
worldmap.islands.redmond.label.visible = "false";
Хотя можно и не писать первую строчку ;-).
6) Выкинем персонажа Peter Bolt из игрового пространства. Его ID - 77. Пишем в диалоге:
Characters[77].location = "none";
Characters[77].group = "characters";
Characters[77].locator = "none";
Первая строчка удаляет локацию персонажа, вторая - это тип (он так и остается), третья - удаляет место локации.
Но я думаю, что использование ch.money = ch.money + 3000 не совсем хорошее. Я обычно использую: ch.money = makeint(ch.money) + 3000
Конечно такая запись экшена чуть-чуть подлиннее, но зато лучше, потому что деньги и т.п. - это string (т.е. в записи могут содержаться и буквы и цифры), а мы прибавляем integer (т.е. могут содержаться только цифры) в первом случае.
Действия:
LaunchHireCrew();
Нанять людей в команду
LaunchShipyard();
Верфь
LaunchStore(ТИП);
Магазин. Вместо ТИП надо писать STORE_ONE или STORE_TWO
LaunchCannons();
Установка пушек на корабль
LaunchCharacter(GetMainCharacter());
Показать информацию о главном герое
LaunchShipHold();
Показать трюм корабля
LaunchMainMenu();
Показать меню игры
Я так же хочу рассказать о переключателе (switch). Привожу пример. В процессе игры мы сменяем главного героя с Блейза на нищего. Подойдя к одному персонажу, у которого в диалоге "живут" переключатели, до смены Блейза на нищего, он отвечает: "О, это ты Блейз...". После смены: "Я не подаю нищим. Иди отсюда...". Вот, что можно делать с помощью переключателей. Переключатели используются и в функциях, например:
string PCharPhrase (string Var1, string Var2)
{
ref PlayerCharacter = GetMainCharacter();
switch(PlayerCharacter.id)
{
case "Blaze":
return Var1;
break;
case "Danielle":
return Var2;
break;
}
return "___Player Character is not defined - can't select character phrase___";
}
Эта функция использовалась при выборе диалога NPC при определенном главном герое. Если это был Блейз, то один вариант, а если Даниэла, то другой.

Пишем новости

В отличие от первых Корсаров новости располагаются не в файле диалога, а в отдельном файле. Слухи можно включать и выключать. Например, два персонажа могут рассказать одинаковые новости. При последующем разговоре с этими NPC они могут рассказывать разные слухи. Вот так! Ну теперь начнем "делать" свои новости. ;-) Для этого нам потребуется файл Rumour_data.c, лежащий в директории
PROGRAM\Dialogs\. Открываем его и мы видим что-то типа:

#define MAX_RUMOURS 7
#define MAX_NPC_INFO 600
object Rumour[MAX_RUMOURS];
string NPC_information[MAX_NPC_INFO];
void SetRumourDefaults()
{
Rumour[0].text = "Последнее время ничего интересного не говорят. Жизнь течет спокойно и мирно. Просто диву даешься!";
Rumour[0].state = "active";
Rumour[1].text = "Говорят, что на рудниках Фале де Флер откопали какие-то остатки туземных захоронений. Всякие глиняные таблички, кости, копья и посуду. И ни грана золота!";
Rumour[1].state = "active";
Rumour[2].text = "Я слышал, что губернатор Редмонда как-то приказал посадить купца в тюрьму за небольшую драку в таверне только потому, что ему захотелось наложить лапу на груз, привезенный тем купцом.";
Rumour[2].state = "active";
Rumour[3].text = "Я слышал, что губернатор Редмонда как-то приказал посадить купца в тюрьму за небольшую драку в таверне только потому, что ему захотелось наложить лапу на груз, привезенный тем купцом.";
Rumour[3].state = "active";
Rumour[4].text = "Я слышал, что губернатор Редмонда как-то приказал посадить купца в тюрьму за небольшую драку в таверне только потому, что ему захотелось наложить лапу на груз, привезенный тем купцом.";
Rumour[4].state = "active";
Rumour[5].text = "Я слышал, что губернатор Редмонда как-то приказал посадить купца в тюрьму за небольшую драку в таверне только потому, что ему захотелось наложить лапу на груз, привезенный тем купцом.";
Rumour[5].state = "active";
Rumour[6].text = "Я слышал, что губернатор Редмонда как-то приказал посадить купца в тюрьму за небольшую драку в таверне только потому, что ему захотелось наложить лапу на груз, привезенный тем купцом.";
Rumour[6].state = "active";
}

Всего установлено 7 слухов. Чтобы сделать побольше надо изменить число 7 в строке #define MAX_RUMOURS 7. Я поменял на 8. Если вы заметили active, passive, и не знаете что это такое, так вот active - слух активен (может появиться в диалоге), а passive - слух неактивен (не может появиться в диалоге). Чтобы добавить новый слух надо установить значение MAX_RUMOURS на нужное вам, затем добавить две строчки (на один слух). Выглядят они примерно так:
Rumours[8].text = "Здесь надо вписать текст слуха";
Если слух активен, то тогда вот еще строчка:
Rumours[8].state = "active";
Иначе вот:
Rumours[8].state = "passive";
Вместо числа 7 надо вписать ID слуха. Например, если в игре всего 20 слухов (0..19), и вы хотите добавить 21-ый слух, то надо вписать ID слуха = 20. И т.д. (Ежели кто не понял, почему 20, то объясняю - всего то 20 + 1 = 21. Почему у меня 21, да потому что нумерация идет от 0 до 20).

Jaoquin De Masse
Создание островов, пользуйтесь на здоровие, все проверенно на 100%, если все сделали правильно то глюков не будет!
Я только начинал острова ковырять 2 недели мучался, теперь сделал 6 новых островов. Сейчас мучаюсь с перегоном острова из к3 в пкм.
Откроем файл PROGRAM\WorldMap\worldmap_init.c

Меняем значения на время работы на false:
worldMap.debug = "false";
worldMap.evwin = "false";
worldMap.noenc = "true"; - Отвечает за генерацию энкоунтеров на карте(корабли, штормы)(true-вкл. false - выкл)

Собственнно приступим к особенностям создания островов
Я взял за основу Ямайка. Рассмотрим основные части:

worldMap.islands. Jamaica.name = "Jamaica"; - ID острова
worldMap.islands. Jamaica.position.x = -245.0; - Положение центра острова по оси x (запад-восток)
worldMap.islands. Jamaica.position.y = 30.0; - Высота центра острова
worldMap.islands. Jamaica.position.z = 370.0; - Позиция острова по оси z (север-юг)
worldMap.islands. Jamaica.position.rx = -235.7;
worldMap.islands. Jamaica.position.rz = 381.1;
worldMap.islands. Jamaica.radius = 120.0; - Радиус острова
worldMap.islands. Jamaica.kradius = 0.75;
worldMap.islands. Jamaica.label.text = "Jamaica"; - Название острова, будет отображаться на карте
worldMap.islands. Jamaica.label.icon = -1; - Флаг ОСТРОВА, ставим везде -1
worldMap.islands. Jamaica.label.visible = "true"; - Возможность показа названия (true-вкл. false-ыкл.), если выключено - то название появится после того, как Вы первый раз посетите остров.
//ОБРАЗЕЦ ГОРОДА
worldMap.islands. Jamaica.locations.city.name = "Jamaica"; - ID города
worldMap.islands. Jamaica.locations.city.move = "false";
worldMap.islands. Jamaica.locations.city.position.x = -225.0; - Позиция города на карте по оси x (запад-восток)
worldMap.islands. Jamaica.locations.city.position.y = 8.0; - Высота расположения города
worldMap.islands. Jamaica.locations.city.position.z = 380.0; - Позиция города по оси z (север-юг)
worldMap.islands. Jamaica.locations.city.position.ay = 0.0;
worldMap.islands. Jamaica.locations.city.modelName = "town"; - 3D модель города
worldMap.islands. Jamaica.locations.city.visible = "false"; - Возможность показа названия (true-вкл. false-выкл.), если выключено - то название появится после того, как Вы первый раз посетите город.
worldMap.islands. Jamaica.locations.city.label.text = "Ямайка"; - Название города, будет отображаться на карте
worldMap.islands. Jamaica.locations.city.label.icon = FRANCE; - Национальная принадлежность города (ENGLAND-Англия, FRANCE-Франция, SPAIN-Испания, PORTUGAL-Португалия, HOLLAND-Голандия, PIRATE-Пираты)
worldMap.islands. Jamaica.locations.city.label.visible = "true"; - Показывание герба объекта (false-герба нет, true - есть)
//ОБРАЗЕЦ БУХТЫ
worldMap.islands. Jamaica.locations.city1.name = "FShore 1"; - ID бухты
worldMap.islands. Jamaica.locations.city1.move = "false";
worldMap.islands. Jamaica.locations.city1.position.x = -210.300018; - Позиция бухты на карте по оси x (запад-восток)
worldMap.islands. Jamaica.locations.city1.position.y = 2.905003; - Высота расположения бухты
worldMap.islands. Jamaica.locations.city1.position.z = 411.800110; - Позиция бухты по оси z (север-юг)
worldMap.islands. Jamaica.locations.city1.position.ay = 0.0;
worldMap.islands. Jamaica.locations.city1.modelName = "leaf"; - 3D модель бухты
worldMap.islands. Jamaica.locations.city1.visible = "false"; - Возможность показа названия (true-вкл. false-выкл.), если выключено - то название появится после того, как Вы первый раз посетите бухту.
worldMap.islands. Jamaica.locations.city1.label.text = "Octopus Bay"; - Название бухты, будет отображаться на карте
worldMap.islands. Jamaica.locations.city1.label.icon = -1; - Национальная принадлежность бухты, ставим -1
worldMap.islands. Jamaica.locations.city1.label.visible = "false"; - Показывание герба объекта (false-герба нет, true - есть)

Вместо Jamaica пишете имя вашего острова, желательно без пробелов и, разумеется, на латинице. Города и бухты пишутся в порядке, который вы, наверное, уже заметили: т.е. сначала city, потом city1, city2 и т.д. независимо от того, город это или бухта.
Координаты на карте отсчитываются от её центра, т.е. точка с координатами {x,y,z}={0,0,0} находится в середине карты.
Модельки городов и бухт находятся в папке RESOURCE\MODELS\WorldMap

Теперь спускаемся в самый низ файла и видим это:

worldMap.playerShipX = 176.27; - Изначальная позиция корабля по оси x (запад-восток)
worldMap.playerShipZ = 35.34; - Изначальная позиция корабля по оси z (север-юг)
Ставим значения так, чтобы ваш корабль не оказался "внутри" острова, т.е. мог свободно плыть. Изменить обязательно.

Идём в PROGRAM\globals.c
Ищём #define MAX_ISLANDS, меняем 8 на кол-во прибавленных островов, т.е. если добавили 1 - пишете 9, еслии 2- 10 и т.п.
Но и это еще не все в папке пкм\Program\Characters\init\ создаем файл с названием города и указываем в нем персов и локации в которых они будут находится.
Затем в пкм\Program\Locations\init\ делаем на нашем острове дома, церкви, таверны и т.д.
Все, остров готов. Теперь проверяйте в игре
Jaoquin De Masse
Многими хотелось сделать свои товары, чтобы помимо старых в магазинах продавались и ваши новые. Для этого сделайте все по этой инструкции. Я себе сделал 4 новых товара: рабы, сигареты, наркота smile.gif , скот (коровы, куры, свиньи), гвозди и веревки (для ремонта корабля).
Итак начнем!

Для начала, откроем файл RESOURCE\INI\INTERFACES\pictures.ini
Ищем секцию:

[GOODS]
sTextureName = goods.tga - имя файла с изображениями товаров в директории RESOURCE\Textures\INTERFACES (без расширения .tx)
wTextureWidth = 1024 - ширина файла с изображениями товаров (в пикселях)
wTextureHeight = 512 - высота файла с изображениями товаров (в пикселях)

Далее идут значения местоположения отдельных картинок для каждого товара:
picture = Balls,128,256,256,384 и т.д.

Общий шаблон выглядит следующим образом:
picture = 'name','1','2','3','4'
'name' - ID товара, '1' - граница картинки товара слева, '2' - сверху, '3' - справа, '4' - снизу. (значения пишутся через запятую, без пробелов и ' ').

В этом файле таблица значений '1','2','3','4' для каждой картинки. Размер общего рисунка - 1024 x 1024 пикселя. Таблица в формате *htm.

После того, как прописали картинку, открываем файл PROGRAM\STORE\initGoods.c
Существует дватипа товаров: сами товары и боеприпасы.

Значения полей для боеприпасов:

Goods[GOOD_BALLS].Name = "Balls"; - ID товара(тот, который вы написали в предыдущем фалйле) (ID обязательно должен быть заключён в " ".
Goods[GOOD_BALLS].Cost = 2; - стоимость единицы товара.
Goods[GOOD_BALLS].Weight = 3; - масса единицы товара в центнерах.
Goods[GOOD_BALLS].Units = 20; - ?
Goods[GOOD_BALLS].SpeedV0 = 1.0; - начальная скорость снаряда.
Goods[GOOD_BALLS].DamageHull = 10.0; - урон, наносимый снарядом корпусу корабля.
Goods[GOOD_BALLS].DamageRig = 5.0; - урон, наносимый снарядом парусам.
Goods[GOOD_BALLS].DamageCrew = 0.25; - урон, наносимый снарядом команде корабля.

Значения полей для товаров:

Goods[GOOD_SAILCLOTH].Name = "Sailcloth"; - ID товара(тот, который вы написали в предыдущем фалйле) (ID обязательно должен быть заключён в " ".
Goods[GOOD_SAILCLOTH].Weight = 3; - масса единицы товара в центнерах.
Goods[GOOD_SAILCLOTH].Cost = 3; - стоимость единицы товара.
Goods[GOOD_SAILCLOTH].Units = 1; - ?
Goods[GOOD_SAILCLOTH].Swim.Model = "roll_of_materials"; - модель плавающего товара, находится в папке RESOURCE\MODELS\SwimGoods
Goods[GOOD_SAILCLOTH].Swim.Time = 10; - время плавания товара до его потопления. Если персонаж его не подобрал в течении этого времени, товар тонет.

Шаблон для товара:
Goods[GOOD_'NAME']...
Вместо 'NAME' пишете ID товара большими буквами.

После того, как прописали характеристики товара, открываем файл PROGRAM\STORE\goods.h
Находим #define GOOD_OIL 26
Ниже описываем свой товар по такому шаблону:
#define GOOD_'ID' 'n+1' , где вместо 'ID' пишем ID своего товара большими буквами. 'n' - наибольшее числовое значение в секции идентифицирования товаров (начиная с #define GOOD_BALLS 0). К этому наибольшему значению добавляем 1 и записываем полученное число вместо 'n + 1'. Между 'ID' и 'n+1' долженбыть пробел!

После того, как товар в секции идентифицирования, открываем файл RESOURCE\INI\TEXTS\RUSSIAN\GoodsDescribe.txt

Спускаемся внизфайла и описываем свой товар по следующему шаблону:

'ID' {'RusID'}
'ID'_descr
{
'txt'
}
Где 'ID' - ID вашего товара, 'RusID' - русское название, 'txt' - описание.

В описании боеприпасов возможно использование переменных:
#dDamageHull# - показывает урон, наносимый корпусу
#dDamageRig# - парусам
#f.2DamageCrew# - команде
Как альтернатива - просто написать эти значения обыкновеным текстом.

И это ещё не всё smile.gif.

Открываем в этой же папке файл common.ini
Находим секцию
; goods name strings, идём вниз этой секции.
Описываем товар по шаблону:
string = ID,"RusId"
где ID - ID вашего товара, RusID - название на русском языке.
RusId пишется с кавычками и отделяется от IDа не пробелом, а запятой

Далее в этой же папке открываем файл ShipEatGood.txt

Идём вниз и пишем по шаблону:
seg_'ID' {'RusIDR'}
Дамаю, что такое 'ID', объяснять уже не надо, а вот 'RusIDR' - название товара в родительном падеже.

В файле SeaSection.txt, находящемся в этой же папки делаем то же, что и в предыдущем файле, только товар описываем выше строчки sea_exp_add {+%1 опыта}.
Удачи в создании новых товаров! smile.gif
Jaoquin De Masse
Для начала я хотел поблагодарить некоторых участников форума за письма которые они мне написали (Спасибо ребята! smile.gif ), и модераторы вы извините меня за то, что я пишу много тем подряд, но если все будет в одном сообщении получится путаница не разобратся где че, ну а сейчас перейдем к главному…
Нашел я у себя настройки гг, так что вот они smile.gif пользуйтесь на здоровие
Настройки нашего гг находятся в файле: PROGRAM\Characters\characters_init.c
Итак, приступим…

//ch.perks.list.InstantBoarding = true;
ch.name = “Nathaniel”; //Имя главного персонажа
ch.lastname = “Hawk”;//Фамилия главного персонажа
ch.id = “Blaze”;//Уникальный id гланвого перса – не менй его. Мой совет не меняйте его игре импользуеться именно этот!
ch.nation = ENGLAND;//Нация
ch.model = “blaze”;//Модель игрока. Модели можно посмотреть здесь: RESOURCE/models/characters. И помни что имя модели должно быть без расширения .gm! ch.activity_begin = “0”;
ch.activity_end = “24”;
ch.sex = “man”;//Определяем пол для анимации. Возможны значение: woman, monkey, skeleton
ch.luck = 4;//Удача
ch.spyglass.itemID = COMMON_SPYGLASS;//тип подзорной трубы
ch.gun.itemID = GUN_COMMON;//тип орудий
ch.gun = “gun”;//тип пистолета
ch.blade = “saber”;//тип сабли
ch.blade.itemID = BLADE_SABER;
ch.blade.time = 0.1;
ch.blade.colorstart = argb(128, 22, 46, 190);
ch.blade.colorend = argb(0, 20, 60, 100);*/
ch.location = ;
ch.location.group = ;
ch.location.locator = "";
ch.Dialog.Filename = «blaze_dialog.c»;
ch.rank = 1;
ch.reputation = “50”;//Репутация
ch.experience = 0;//Опыт. Высчитывается по формул ExperienceFromRank(sti(ch.rank))
//секция умений и навыков
ch.skill.Leadership = “1”;
ch.skill.Fencing = “1”;
ch.skill.Sailing = “1”;
ch.skill.Accuracy = “1”;
ch.skill.Cannons = “1”;
ch.skill.Grappling = “1”;
ch.skill.Repair = “1”;
ch.skill.Defence = “1”;
ch.skill.Commerce = “1”;
ch.skill.Sneak = “1”;
ch.skill.freeskill = 1;//Количество свободных скилов
ch.perks.freepoints = 1;//количество свободных очков для уменй
ch.money = “1000”;//Начальный капитал
ch.Ship.Name = “Титаник”;//Имя корабля smile.gif
//ch.Ship.Type = SHIP_FRIGATE_ENGLAND;
//ch.Ship.Type = SHIP_CORVETTE_ENGLAND;
ch.Ship.Type = SHIP_LUGGER_ENGLAND;//Тип корабля(тип и нация)
//ch.Ship.Type = SHIP_MANOWAR2_FRANCE;
ch.Ship.Stopped = true;
//ch.Ship.Cannons.Type = CANNON_TYPE_TEST;
ch.FaceId = 31;
ch.ShipSlot1.Type=SHIP_NOTUSED;
ch.ShipSlot1.Name="No Name";
ch.ShipSlot2.Type=SHIP_NOTUSED;
ch.ShipSlot2.Name="No Name";
ch.ShipSlot3.Type=SHIP_NOTUSED;
ch.ShipSlot3.Name="No Name";


Все, мы изменили параметры нашего гг... smile.gif

И еще для того что бы бегать без SHIFT необходимо сделать следующие:
Лезем в паку Program\Characters\characters.c
Находим функцию SetDefaultNormWalk() и заменяем код на:

void SetDefaultNormWalk(ref character)
{
// boal -->
if (GetMainCharacter() == character)
{
character.actions.walk = "run";
character.actions.backwalk = "back walk";
character.actions.run = "walk";
character.actions.backrun = "back run";
}
else
{
// boal <--
character.actions.walk = "walk";
character.actions.backwalk = "back walk";
character.actions.run = "run";
character.actions.backrun = "back run";
} // boal
Jaoquin De Masse
Инструкция по созданию нового корабля smile.gif Говорю сразу чтоб потом наездов типа непашет и т.д. не было, квестовые корабли типа чж прописаны так SHIP_BLACK_PEARL чтобы он работал нормально надо изменить так SHIP_BLACKPEARL_FRANCE или любая другая нация! Начнем...
Откроем файл Programs/ships/ships_init.c.
Найдите корабль, который наиболее похож на ваш новый корабль(по характеристикам) и скопируйте код в конец описания кораблей. ДО описания фортов!

//-------------------------------------------------------------------------
//NEW!<-------- названия корабля, не играет никакой роли, может быть любым.
//-------------------------------------------------------------------------
makeref(refShip,Ships Types[SHIP_NEW_FRANCE]); <– SHIP_названия корабля_нация
refShip.Name = «Xebec 1»; <-Может быть любой из существующих кораблей или ваше собственное имя.
refShip.Class = 1; <– Класс корабля. Может принимать значения от 1 до 7.
refShip.Cannon = CANNON_TYPE_CANNON_LBS32; <-тип установленных орудий.
refShip.MaxCaliber = 32; <-максимальный калибр
refShip.Weight = Tonnes2CWT(2200);<-масса корабля
refShip.Capacity = 3500;<-грузоподъемность
refShip.CannonsQuantity = 44;<-количество орудий
refShip.MaxCrew = 600;<-максимальная команда
refShip.MinCrew = 150;<-минимальная команда
refShip.SpeedRate = 17.2;<-скорость
refShip.TurnRate = 26;<-маневренность
refShip.Price = 50000;<-цена(средняя)
refShip.HP = 15000;<-жизни
refShip.SP = 100;<-жизни парусов
refShip.AbordageLocation = «BOARDING_XEBEC»; <– Локация абордажа. Можно плавать на тартане и поставить локацию абордажа от мановара..smile.gif
refShip.EmblemedSails.normalTex = «ships\sail_Pirates.tga»;<-Текстура парусов, формат текстуры пишите просто *.тга без .тх на конце (иначе работать не будет!!!)
refship.WaterLine = 0.0; <– Секция описаний для реалистичного режима плавания.
refship.SpeedDependWeight = 0.3;
refship.SubSeaDependWeight = 0.9;
refship.TurnDependWeight = 0.8;

refShip.CanEncounter = false; <– Это делает корабль уникальным. Т.е. в море его встретить нельзя.
refship.InertiaAccelerationX = 3.0;
refship.InertiaBrakingX = 2.0;
refship.InertiaAccelerationY = 14;
refship.InertiaBrakingY = 5;
refship.InertiaAccelerationZ = 5.0;
refship.InertiaBrakingZ = 3.0;
refShip.Height.Bombs.Y = 1.0;
refShip.Height.Bombs.DY = 0.5;
refShip.Height.Grapes.Y = 2.0;
refShip.Height.Grapes.DY = 1.0;
refShip.Height.Knippels.Y = 10.0;
refShip.Height.Knippels.DY = 8.0;
refShip.Height.Balls.Y = 1.0;
refShip.Height.Balls.DY = 0.5;

теперь у нас есть корабль, далее откройте файл ship.h в этой же директории.
В первой строке замените
#define SHIP_TYPES_QUANTITY 166
На
#define SHIP_TYPES_QUANTITY 167
Теперь прокрутите ниже, до описания последнего корабля:
#define SHIP_FEARLESS 165
И допишите строку:
#define SHIP_VON 165, где SHIP_VON – SHIP_+название вашего корабля

Теперь наш корабль доступен как SHIP_имя_нация.
Если хотите поставить новый корабль гг надо:

//ch.Ship.Type = SHIP_FRIGATE_ENGLAND;
//ch.Ship.Type = SHIP_CORVETTE_ENGLAND;
ch.Ship.Type = SHIP_LUGGER_ENGLAND; -- Вписать его название сюда в 3-ю строчку.
//ch.Ship.Type = SHIP_MANOWAR2_FRANCE;
Scatimon
Значит, я могу помочь по созданию новых предметов. Я буду объяснять, как сделать новую саблю, подзорную трубу. Начнём с сабли, закончим трубой .
Итак открываем PROGRAM\Items\initItems.с та ищем раздел //WEAPONS

makeref(itm,Items[n]); - оставить неизменным
itm.id = "blade26"; - ID сабли, я пишу Blade*, где * номер сабли, т.е, если из 25 то писать 26
itm.groupID = BLADE_ITEM_TYPE; - ID, т.е. что это, сабля карта, пистолет
itm.name = "itmname_blade26"; - Имя сабли, обычно пишут itmname_blade* где * 26
itm.describe = "itmdescr_blade26"; - это для описания, типа сабля турецкая…
itm.model = "blade26"; - модель, вернее её имя, лучше blade*, где * 26
itm.folder = "items"; - папка с моделькой
itm.picIndex = 1; - номер квадрата в котором рисунок сабли
itm.picTexture = "ITEMS_10"; - имя текстуры рисунка в описании
itm.dmg_min = 5.0; - минимальное повреждение наносимое саблей
itm.dmg_max = 10.0; - максимальное повреждение наносимое саблей
itm.piercing = 0; - защита
itm.minlevel = 0; - минимальный уровень
itm.rare = 0.1; - редкость появление
itm.block = 10; - блокировка
itm.param.time = 0.05; - короче все эти параметры(что ниже) оставить так
itm.param.colorstart = argb(64, 64, 64, 64);
itm.param.colorend = argb(0, 32, 32, 32);
n++; - в конце ставить всегда


примечание: если будете вставлять как шаблон то перед каждой репликой включая «-» ставить знак //, в противном случае работать не будет.

Далее открываем PROGRAM\Items\items.h , та ищем строку
#define ITEMS_QUANTITY, добавляем, т.е если было 180 то будет 181.

Затем открываем RESOURCE\INI\INTERFACES\pictures.ini
Там ищем примерно это

[ITEMS_10] –ищем последнюю цифру и ниже добавляем(путём копирования)
sTextureName = items10.tga – вместо десяти следующая цифра, если последняя 11 то 12 и т.д…***
wTextureWidth = 512
wTextureHeight = 512

picture = itm1,0,0,128,128
picture = itm2,128,0,256,128
picture = itm3,256,0,384,128
picture = itm4,384,0,512,128
picture = itm5,0,128,128,256
picture = itm6,128,128,256,256
picture = itm7,256,128,384,256
picture = itm8,384,128,512,256
picture = itm9,0,256,128,384
picture = itm10,128,256,256,384
picture = itm11,256,256,384,384
picture = itm12,384,256,512,384
picture = itm13,0,384,128,512
picture = itm14,128,384,256,512
picture = itm15,256,384,384,512
picture = itm16,384,384,512,512


Теперь копируем в текстурах файл = items10.tga и вставляем с вашим номером = items*.tga – имя должно соответствовать 2 строчке выше(там значки «***»).
Это мы сделали картинку, квадрат описания, их там 16. Соответственно ставите номер квадрата, в котором ваша сабля, счёт с лева на право.
КВ( 1 )КВ( 2 )КВ( 3 )КВ( 4 ) - КВ - квадрат
КВ( 5 )КВ( 6 )КВ( 7 )КВ( 8 )
КВ( 9 )КВ(10)КВ(11)КВ(12) - схема items*.tga
КВ(13)КВ(14)КВ(15)КВ(16)
Всё! Идём дальше открываем: RESOURCE\INI\TEXTS\RUSSIAN\ItemsDescribe.txt
В нём описание сабли:

itmname_blade* {Имя сабли} // - itmdescr_blade* - помним да!
itmdescr_blade*
{
Непосредственно само описание.
}


Можно как шаблон это брать.
Теперь самая плюха, открываем PROGRAM\QUESTS\quests_reaction.с
Там прописывается добавка предмета на прилавки.
В нём ищем void GiveItemToTrader(aref ch)
Затем добавляем строки

if (makeint(pchar.rank) >=*) //ставим какой хотим уровень, т.е поставили 5 то //как только уровень будет больше 5 то сабля будет на прилавке.
{
irand = rand(*); //- по порядку смотрим в файле выше и ниже
if (irand == 1) { TakeNItems(ch,"blade*", Rand(1)+1);}
}


Если всё ОК то игра запустится, сначала лучше if (makeint(pchar.rank) >=*)
Поставить на «1» и проверить…далее буду объяснить, как подзорку добавить, там тоже есть свои нюансы.
Jaoquin De Masse
Значит такс, создадим перса в городе smile.gif для примера я взял Оксбэй smile.gif . Вначале заходим в папку locations\locations_loader.c и ищём там комментарий:

/*
VisibleLocatorsGroup("reload", 1.0, 15.0, 255, 0, 255, 0);
VisibleLocatorsGroup("Merchant", 1.0, 15.0, 105, 0, 255, 125);
...
VisibleLocatorsGroup("sit", 1.0, 15.0, 255, 255, 0, 0);
VisibleLocatorsGroup("item", 1.0, 15.0, 255, 255, 0, 255);
//*/
И удалите символы /* и */? После чего допишите следующие строки:
VisibleLocatorsGroup("rld", 1.0, 15.0, 255, 0, 255, 0);
VisibleLocatorsGroup("box", 1.0, 15.0, 255, 255, 0, 0);
VisibleLocatorsGroup("randitem", 1.0, 15.0, 255, 255, 0, 255);


Сохраняем, загружаем игру – ohmy.gif теперь мы видим все локаторы используемые в пкм biggrin.gif На скрине видно что получится.



Все персонажи создаются в файлах, хранящихся в паках program\character\init\
Вот самый общий код для создания перса:

//секция описание перса
makeref(ch,Characters[n]); //эта функция создаёт перса
ch.name = “”; //Определяем фамилию...
ch.lastname = ""; //...и имя
ch.id = “Redmond prison commendant”; //необходимо для каждого преса придумать УНИКАЛЬНЫЙ id. Обычно составляется из имя + фамилия.
ch.model = «offic_eng»; //Модель игрока (посмотреть модели можно в папке RESOURCES\MODELS\CHARACTERS\). Обратите внимание, что модель пишется БЕЗ расширения .gm
ch.sound_type = “soldier”; //тип звука который мы слышим при разговоре с персом.
ch.sex = “man”; //Анимация скелета - принимает значения man - мужская модель, woman - женская модель, monkey - обезьяна, skeleton - скелет.
LAi_CharacterReincarnation(ch, true, true); //Необязательный параметр, указывает может ли перс перерождаться.

//секция инвентаря
GiveItem2Character(ch, «Blade1»); //Даёт персу оружие blade1, список оружия можно посмотреть здесь: program\ITEMS\initItems.c
ch.equip.blade = «Blade1»; //Заставляем перса использовать оружие которое дали ему.

//секция локаций
ch.location = «Redmond_prison»; //Это название локации, список названий можно посмотретьв файле: PROGRAM\LOCATIONS\INIT\Имя города.c
ch.location.group = “sit”; //Группа локаторов
ch.location.locator = «sit1"; //Стартовая точка

//секция диалога
ch.Dialog.Filename = «Redmond commendant_dialog.c»; //Файл диалога перса. Должен лежать в папке PROGRAM\DIALOGS\

//секция умений и т.п.
ch.rank = 1;//ранг
ch.reputation = “None”;//репутация
ch.experience = “0”;//опыт
ch.skill.Leadership = “1”;//лидер
ch.skill.Fencing = “4”;//фехтование
ch.skill.Sailing = “1”;//навигация
ch.skill.Accuracy = “1”;//точность
ch.skill.Cannons = “1”;//орудия
ch.skill.Grappling = “1”;//абордаж
ch.skill.Repair = “1”;//починка
ch.skill.Defence = “1”;//защита
ch.skill.Commerce = “1”;//коммерция
ch.skill.Sneak = “1”;//удача
ch.money = “10”; //деньги

//секция корабля, необязательная
ch.Ship.Name = “Fast death”;//имя корабля
ch.Ship.Type = SHIP_CORVETTE_PORTUGAL;//Тип корабля. Подробнее смотри program\Ships\Ships_init.c
ch.Ship.Cannons.Type = CANNON_TYPE_CANNON_LBS16;//Тип установленных орудий. 12,16, 24, и 32

//Анимация. Необходимо выбрать один из вариантов
LAi_SetPoorType(ch); //Сидит(бродяга)
LAi_SetCitizenType(ch); //Ходит
LAi_SetMerchantType(ch); //Ходит за главным персом
LAi_SetPatrolType(ch); //Патруль
LAi_SetGuardianType(ch); //Патруль у дверей
LAi_SetPriestType(ch); //Священник
LAi_SetSitType(ch); //Сидит на стуле и т.п.
LAi_SetWaitressType(ch); //Оффициантка
LAi_SetBarmanType(ch); //Бармен

//Другие параметры, связаные с анимацией.
LAi_SetLoginTime(ch, 0.0, 24.0);
LAi_SetHP(ch, 80.0, 80.0);//Устанавливаем жизни
LAi_SetStayHuberPointWindow(ch, “goto”, «goto10"); //Описываем путь перса.
LAi_SetStayHuberPointMap(ch, “goto”, «goto9");

//И на последок…
LAi_group_MoveCharacter(ch, «ENGLAND_SOLDIERS»); //Переместить перса в группу.
LAi_NoRebirthEnable(ch);//Запретить перерождение.
ch.greeting = «Gr_Redmond Commendant»; //Тип приветствия. Подробнее здесь: RESOURCE\INI\ALIASES\Greetings_alias.ini
n = n + 1;

Вот готовый пример:

makeref(ch,Characters[n]); //Пират Хреновый Глаз
ch.name = " Хреновый";
ch.lastname = "Глаз";
ch.id = "HG";
ch.model = "corsair3";
ch.sound_type = "soldier";
LAi_CharacterReincarnation(ch, true, true);
ch.sex = "man";
GiveItem2Character(ch, BLADE_SABER);
ch.equip.blade = BLADE_SABER;
ch.location = "Oxbay_port";
ch.location.group = "goto";
ch.location.locator = "goto23";
ch.Dialog.Filename = "Oxbay Soldier_dialog.c";
ch.rank = 1;
ch.nation = ENGLAND;
ch.reputation = "None";
ch.experience = "0";
ch.skill.Leadership = "1";
ch.skill.Fencing = "5";
ch.skill.Sailing = "1";
ch.skill.Accuracy = "1";
ch.skill.Cannons = "1";
ch.skill.Grappling = "1";
ch.skill.Repair = "1";
ch.skill.Defence = "1";
ch.skill.Commerce = "1";
ch.skill.Sneak = "1";
ch.money = "10";
ch.money = "10";
LAi_SetCitizenType(ch);
LAi_group_MoveCharacter(ch, "ENGLAND_CITIZENS");
n = n + 1;

Поздравляю вы создали новый персонаж в городе smile.gif
Jaoquin De Masse
Меняем стартовую точку smile.gif
Вот это не очень легко. Для этого мы должны открыть два файла. Сначала откроем seadogs.c (лежит в корне каталога PROGRAM). Теперь откроем второй файл. Он лежит в директории PROGRAM\Locations\Init\. Там несколько файлов. Если вы хотите отправить его в место на Редмонде, то открывайте файл Redmond.c, если на Фале Де Флер, то открывайте FalaiseDeFleur.c. И так, до нужного вам острова. ;-) Пусть у нас главный герой попадет на Редмонд, в таверну. Значит, мы откроем еще и файл Redmond.c. В seadogs.c ищем вроде этого:
void NewGame()
{
DelEventHandler("frame","NewGame");
InitGame();

LoadMainCharacterInFirstLocation("Falaise_de_fleur_location_02", "", "Falaise_de_fleur_location_01");
InterfaceStates.Buttons.Resume.enable = true;
CreateClass("dummy");
}
Нашли? Так вот, видите строчку LoadMainCharacterInFirstLocation("Falaise_de_fleur_location_02", "", "Falaise_de_fleur_location_01"); ? Видите? Хорошо. Этой функцией мы загружаем нашего героя в наш виртуальный мир. Так давайте ее рассмотрим. Falaise_de_fleur_location_02 - это место, где будет стоять главный герой, а Falaise_de_fleur_location_01 - это место, где появится корабль. Видите, между ними стоят кавычки, а в них ничего нет? Это - Emerge Location. Falaise_de_fleur_location_02 - это место около ворот (вход в город). Вот там мы появимся, если у нас в Emerge Location ничего нет и локация главного персонажа равна Falaise_de_fleur_location_02. Если же в Emerge Location написать sea и поместить нашего героя на локацию Falaise_de_fleur_location_01, то мы будем стоять на пирсе. Почему так? Falaise_de_fleur_location_01 - это место около ворот при выходе из города, где находится пирс. Без Emerge Location мы бы не стояли на пирсе, а стояли около ворот. Если мы, например, стоим на улице города, где находятся таверна, верфь, магазин и т.п., то станут возможными Emerge Location = tavern, store, shipyard и т.д. Если же мы стоим на улице, где нет верфи, магазина, таверны, а есть резиденция губернатора, то Emerge Location = residence. Но жаль, что не работают Emerge Location = residence, store, shipyard, tavern. Так бы было легче записывать. Ну хоть работают другие, более длинные Emerge Location. Их можно посмотреть в локации какого-нибудь острова. Например, мы стоим на улице, где есть резиденция губернатора (я буду говорить о Фале Де Флер). Эта улица - Falaise_de_fleur_location_03. Там есть линк на локацию Falaise_de_fleur_townhall. Это находится вот здесь:
Locations[n].reload.l3.name = "Falaise_de_fleur_townhall";
Locations[n].reload.l3.go = "residence";
Locations[n].reload.l3.emerge = "locator1";

Не надо писать Emerge Location = locator1. Работать не будет. Если же написать Emerge Location = Falaise_de_Fleur_townhall, то все будет нормально. Надеюсь, вы поняли. Идем дальше. Мы же хотим изменить локацию героя. Так вот, смотрим в Redmond.c. Как я говорил выше я помещу его в таверну. Смотрим и находим вот это:
Locations[n].id = "City_Redmond_largetavern";
Ага, нашли. Теперь нам осталось написать в seadogs.c локацию - City_Redmond_largetavern. Только смотрите, не напутайте, нужно вписать это в локацию для персонажа, а не для корабля. Ну вот что у нас получилось:
void NewGame()
{
DelEventHandler("frame","NewGame");
InitGame();

//LoadMainCharacterInFirstLocation("Falaise_de_fleur_location_02", "", "Falaise_de_fleur_location_01");
LoadMainCharacterInFirstLocation("City_Redmond_largetavern", "", "Falaise_de_fleur_location_01");
InterfaceStates.Buttons.Resume.enable = true;
CreateClass("dummy");
}

Смотрим в игре, корабля нет. Он с нами не поплыл. В Фале Де Флер остался. Давайте исправим вот эту строчку:
LoadMainCharacterInFirstLocation("City_Redmond_largetavern", "", "REDMOND_PORT");
Ура, все получилось!


----------------------------------------------------------------------------------------------------------------------------------------------------------


Итак, задача не из лёгких – добавить новую локацию. А поэтому без лишних слов приступим к делу wink.gif . Для начала изучим что же такое локация и из чего она состоит.
Для примера откроем любой файл из папки PROGRAM\Locations\init\


Locations[n].filespath.models = "locations\town_Douwesen\port";<--Это указатель на модель, используемую для внутренней части.
Locations[n].image = "loading\Douwesen_Port.tga";<--Это картинка загрузки в локацию, распологаютсья в папке \RESOURCE\Textures\Loading\
locations[n].worldmap = "Douwesen";
Locations[n].id = "Douwesen_port";<--Это ID особых локаций
locations[n].id.label = "Douwesen port";<--Метка

Locations[n].townsack = "Douwesen";

locations[n].type = "port";<--
locations[n].fastreload = "Douwesen";

Locations[n].models.always.locators = "DouPort_l";<--Перегружаем локаторы
Locations[n].models.always.seabed = "DouPort_sb";<--Загружаем карту морского дня
Locations[n].models.always.seabed.foam = "1";<-- разрешаем пену
Locations[n].models.always.l1 = "DouPort";
Locations[n].models.always.l1.foam = "1";
Locations[n].models.always.grasspatch = "DouPort_g";

Locations[n].models.day.rinok = "DouPort_e01";
Locations[n].models.day.charactersPatch = "DouPort_pd";
Locations[n].models.day.fonar = "DouPort_fd";

Locations[n].models.night.fonar = "DouPort_fn";
Locations[n].models.night.charactersPatch = "DouPort_pn";

Locations[n].environment.weather = "true";<--Разрешаем или запрещаем действие погоды в локации
Locations[n].environment.sea = "true";<--Разрешаем или запрещаем море в данной локации

Locations[n].reload.l1.name = "reload3";<--Локатор перехода в следующую локацию
Locations[n].reload.l1.go = "Douwesen_town";<--ID следующей локации
Locations[n].reload.l1.emerge = "reload9";<--Имя локатора где появимся
Locations[n].reload.l1.autoreload = "0";
Locations[n].reload.l1.label = "Douwesen.";<--Этот текст показывается когда вы смотрите на дверь.

Locations[n].reload.l2.name = "reload2";
Locations[n].reload.l2.go = "Douwesen";
Locations[n].reload.l2.emerge = "reload_1";
Locations[n].reload.l2.autoreload = "0";
Locations[n].locators_radius.reload.reload2 = 3;
Locations[n].reload.l2.label = "Sea.";

Locations[n].reload.l3.name = "reload1_back";
Locations[n].reload.l3.go = "Douwesen";
Locations[n].reload.l3.emerge = "reload_1";
Locations[n].reload.l3.autoreload = "0";
Locations[n].reload.l3.label = "Sea.";
Locations[n].locators_radius.reload.reload1_back = 3;

Locations[n].reload.l4.name = "reload2_back";
Locations[n].reload.l4.go = "Douwesen";
Locations[n].reload.l4.emerge = "reload_1";
Locations[n].reload.l4.autoreload = "0";
Locations[n].locators_radius.reload.reload2_back = 3;
Locations[n].reload.l4.label = "Sea.";

Locations[n].reload.l5.name = "reload1";
Locations[n].reload.l5.go = "Douwesen";
Locations[n].reload.l5.emerge = "reload_1";
Locations[n].reload.l5.autoreload = "0";
Locations[n].reload.l5.label = "Sea.";
Locations[n].locators_radius.reload.reload1 = 3;

n = n + 1;


А теперь найдите дом который хотели изменить, смените ID, после чего замените в городе, где хотите свой дом ID перехода.
navy
Цитата
Меняем стартовую точку

Если просто сделать так как ты описал работать не будет... при попытке начать новую игру, будут жуткие тормоза и локация не загрузиться.... Т.к. на Первые Две локации в ПКМ висят квестовые прерывания, которые инициализируют мир... следовательно... нужно их перевешивать.... иначе фигня получится.
Jaoquin De Masse
Цитата(navy @ Apr 28 2006, 08:47) *

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

Я еще квест редактировал, теперь у меня игра начинается в форте оа оксбэе, типа побег из тюрьмы... smile.gif
navy
Цитата
Я еще квест редактировал, теперь у меня игра начинается в форте оа оксбэе, типа побег из тюрьмы...

Но не написал об этом wink.gif а надо... не все поймут в чем дело...
Jaoquin De Masse
Значит так! Сейчас мы добавим в игру новый калибр пушек.
Для этого открываем
Пираты Карибского Моря\Program\CANNONS\Cannons.c
Находим там:
case 32:
return CANNON_TYPE_CANNON_LBS32;
break;

И после пишем:
case 48:
return CANNON_TYPE_CANNON_LBS48;
break;

Далее идем в Пираты Карибского Моря\Program\CANNONS\Cannons.h
В самом верху файла находим:
#define CANNON_TYPES_QUANTITY 7
и меняем на:
#define CANNON_TYPES_QUANTITY 8
Затем находим строчку:
#define CANNON_TYPE_CANNON_LBS32 6
И после нее пишем:
#define CANNON_TYPE_CANNON_LBS48 7
Идем в самый низ файла и находим там:
case CANNON_TYPE_CANNON_LBS32:
return 32;
break;

и после нее дописываем:
case CANNON_TYPE_CANNON_LBS48:
return 48;
break;

Затем открываем Пираты Карибского Моря\Program\CANNONS\ Cannons_init.c
И в самом низу после пушек 32 калибра пишем вот это:
makeref(rCannon,Cannon[CANNON_TYPE_CANNON_LBS48]); - Описание
rCannon.type = CANNON_NAME_CANNON; - Название
rCannon.caliber = 48; - Калибр
rCannon.ReloadTime = 1; - Время перезарядки
rCannon.Cost = 3500; - Стоимость
rCannon.Weight = 72; - Вес
rCannon.FireAngMax = 0.60;
rCannon.FireAngMin = -0.35;
rCannon.DamageMultiply = 4.0;
InitBaseCannons_CalcSpeedV0(&rCannon,750.0); - Дальность стрельбы

Теперь идем в Пираты Карибского Моря\RESOURCE\INI\INTERFACES\pictures.ini
Открываем, и находим там строчку:
picture = cannon32,768,0,896,128
и после нее, пишем:
picture = cannon48,768,0,896,128
Затем находим Пираты Карибского Моря\RESOURCE\INI\TEXTS\common.ini
Там находим строчку:
string = caliber32,"32фунт."
и после нее вписываем:
string = caliber48,"48фунт."
Включаем игру и проверяем! Будут вопросы, пишите! wink.gif cool.gif
Беатрис
дополните пожалуйта описание *.INI-файлов unsure.gif unsure.gif
Dogeva
Цитата(Беатрис @ Aug 8 2006, 14:00) *

дополните пожалуйта описание *.INI-файлов unsure.gif unsure.gif

дополнить чем, простите? boff.gif
Беатрис
Теперь остается свести все слои (CTRL+E на англ. раскладке) и сохранить, заменив старую текстуру.
- Теперь конвертируем в ВМЛ и разворачиваем игру. Играем с новой галкой в меню перков. Если не работает, то выйдите из игры и войдите снова. (Не забывайте про настройку tx_converter'а: A8R8G8B8 вверху и внизу)

Позже дополню описание *.INI-файлов. Если чего забыл, поправьте меня!

и когда он дополнит? dry.gif
Dogeva
с такими вопросами - автору в личку dry.gif

устное предупреждение
Райп
Цитата(Jaoquin De Masse @ Apr 27 2006, 04:13) *

... ну и зачем было цитировать все ?? mad.gif




laugh.gif А если у VER.1.01 и там нет папки PROGRAMS а корабль-то очень хочется, что мне делать помоги????? cool.gif

Райп получает "+" за оверквотинг в особо крупных размерах и оффтоп...
ALexusB
Ставить мой мод_в4, в котором код открыт и все на русском.
Официально за три года существования игры не выходило патчей, открывающих код, как это было с к3, т.е. ПКМ-моддинг "нот суппортет" - либо признано достаточным неофициальные патчи - так что велкам.
Командор Норрингтон
Предлагаю скомпилировать фак в HTML-файл справки. Или накодить оболочку и сделать Exeшник. А потом выложить для скачивания. Могу сделать я, потом оцените.
navy
Цитата(Командор Норрингтон @ Aug 30 2006, 16:56) *

Предлагаю скомпилировать фак в HTML-файл справки. Или накодить оболочку и сделать Exeшник. А потом выложить для скачивания. Могу сделать я, потом оцените.

ехе-шник нафиг... это потенциальная жертва вирусов.. компилед ХТМЛ пожалуйста.
Командор Норрингтон
ОК постараюсь завтра или сегодня вечером сделать и выложить (в эту тему).
Командор Норрингтон
Попробовал ваши советы по моддингу smile.gif. Сделал пару новых сабель, ща мучаюсь с кораблём.
Кстати сделал фак. По обновлениям и если найдёте косяки пишите в личку:)
Делал с нуля, без шаблона, так что строго не ругайте:)
барбосса3
как сделать в море от 1 лица людей:в AIcameras ищем case "SeaShipCamera":
if (!LAi_IsDead(&Characters[GetMainCharacterIndex()]))
{
SeaCameras.Camera = "SeaDeckCamera";
Crosshair.OutsideCamera = false;
PeopleOnShip.IsOnDeck = 1;
bSwitch = true;
}
break; и меняем на case "SeaShipCamera":
if (!LAi_IsDead(&Characters[GetMainCharacterIndex()]))
{
SeaCameras.Camera = "SeaDeckCamera";
Crosshair.OutsideCamera = false;
PeopleOnShip.IsOnDeck = 0; здесь
bSwitch = true;
}
break;
Командор Норрингтон
Надо попробовать, ну а как идея с компилед хтмл факом? продолжать его делать?
барбосса3
идея хорошая,скачал,понравилось,но про НПС нету!!!
Командор Норрингтон
э я сам не спец по созданию модов к игре фак делал из информации уже имеющейся в этой теме, напишите про НПС и я добавлю в фак. (Или сами добавьте и выложите, при желании)
барбосса3
Было уже про НПС(в смысле новых персонажей,на 1ой странице писал Jaoquin de Masse)
Dogeva
если было, то кидай ссылку, иначе какой смысл тут устраивать перепирательства на пустом месте? wink.gif
барбосса3
Создаем подзорную трубу:в файле initItems ищем //SPYGLASSES, копируем описание любой трубы и вставляем в конец
makeref(itm,Items[n]);
itm.id = "spyglass5"; //ID трубы
itm.groupID = SPYGLASS_ITEM_TYPE; //ID группы
itm.name = "itmname_spyglass5";
itm.describe = "itmdescr_spyglass5";
itm.picIndex = 14; //№ картинки
itm.picTexture = "ITEMS_1"; //текстура
itm.folder = "items"; //папка с текстурами
itm.model = "spyglass4"; //модель
itm.price = 8000; //цена
itm.scope.texture = "eye_BestTub.tga";//текстура во время просмотра из трубы
itm.scope.zoom = 12.0; //зум
itm.scope.time_activate = 500;
itm.scope.time_update = 150;
itm.scope.show.nation = 1; //показатель нации //1-да,0-нет
itm.scope.show.cannons = 1; //показатель орудий
itm.scope.show.ship_name = 1; //показатель имя корабля
itm.scope.show.ship_type = 1; //показатель типа корабля
itm.scope.show.hull = 1; //показатель жизни корпуса
itm.scope.show.sail = 1; //показатель жизни парусов
itm.scope.show.crew = 1; //показатель команды
itm.scope.show.speed = 1; //показатель скорости
itm.scope.show.charge = 1; //показатель типа заряда
itm.minlevel = 0;
itm.rare = 4;
n++;
далее в RESOURSE/INI/TEXTS/RUSSIAN/ItemsDescribe.txt
ищем описания труб и делаем описание своей
для проверки в PROGRAM/QUESTS/both_reaction.c
ищем
locations[FindLocation(Pchar.location)].box1.items.pistol1 = 1;
locations[FindLocation(Pchar.location)].box1.items.spyglass1 = 1;
locations[FindLocation(Pchar.location)].box1.items.potion1 = 2;
locations[FindLocation(Pchar.location)].box1.money = 1000;
меняем spyglass1 на spyglass5 и в новой игре в коробке ищем ее unsure.gif 1.gif
Lugger
Как добавить остров из игры Корсары 3 в игру "Пираты Карибского Моря"
Так.
Возьмём для примера один остров. Невис.
Копируешь папку
Корсары 3\RESOURCE\MODELS\Islands\Nevis
Pirates of the Caribbean\RESOURCE\MODELS\Islands\Nevis
потом копируешь папку D:\Games\Корсары 3\RESOURCE\MODELS\Locations\Town_Nevis\
Pirates of the Caribbean\RESOURCE\MODELS\Locations\
потом из папки Корсары 3\RESOURCE\MODELS\Locations\Inside копируешь модели локаций,
которые используются в этом городе...ну например эти папки (в них модели) - bank01, church01, residence01, shipyard01,
store02, Tavern04, Tavern_room. Копируешь их Pirates of the Caribbean\RESOURCE\MODELS\Locations\Inside\
Потом все текстуры, которые используют данные модели копируешь в Pirates of the Caribbean\RESOURCE\Textures\
плюс текстуры, находящиеся в папке Корсары 3\RESOURCE\Textures\lighting
Pirates of the Caribbean\RESOURCE\Textures\lighting.
Копируешь следующим образом:
Из любой из папок day (там их 4, а в ПКМ одна) папку
Корсары 3\RESOURCE\Textures\lighting\day1\locations\Town_Nevis в папку:
Pirates of the Caribbean\RESOURCE\Textures\lighting\day\locations,
из папки evening папку
Корсары 3\RESOURCE\Textures\lighting\evening\locations\Town_Nevis в папку:
Pirates of the Caribbean\RESOURCE\Textures\lighting\evening\locations,
из папки morning папку
Корсары 3\RESOURCE\Textures\lighting\morning\locations\Town_Nevis в папку:
Pirates of the Caribbean\RESOURCE\Textures\lighting\mn\locations,
из папки storm папку
Корсары 3\RESOURCE\Textures\lighting\evening\locations\Town_Nevis в папку:
Pirates of the Caribbean\RESOURCE\Textures\lighting\storm\locations.

Это всё были файлы освещения smile.gif.

Далее. Уже посложнее, нужно редактировать скрипты.
Идём первым делом в D:\Games\Pirates of the Caribbean\Program\ISLANDS
и открываем файл Islands_init.c, чтобы добавить остров. Можно скопировать например Conceicao

и внизу после последнего острова добавить:

// ================================================================================
==================
// Nevis
n = n + 1;
Islands[n].id = "Nevis"; - ID острова, нужен будет при создания острова на глобалке.
Islands[n].model = "Nevis"; - модель острова.
Islands[n].filespath.models = "islands\Nevis"; файлы модели острова, которые мы кидали в Pirates of the Caribbean\RESOURCE\MODELS\Islands\Nevis. Это остров который будет рисоваться в море.
Islands[n].refl_model = "Nevis_refl"; - связано с моделью острова...
Islands[n].locators = "Nevis_locators"; - локаторы модели в этом файле
Islands[n].visible = true; - Видим; При значении false будет невидим. (Вроде так.)
Islands[n].smuggling_nation = ENGLAND; - Нация острова.

Islands[n].reload.l1.label = "Порт Невис"; Метка, отображающаяся в меню "доплыть до"
Islands[n].reload.l1.name = "reload_1"; - локатор, где высаживаемся в порт.
Islands[n].reload.l1.go = "Nevis_town"; - локация, которая будет заггружаться после того, как мы нажмём "причалить"
Islands[n].reload.l1.emerge = "reload2"; - В каком месте появимся
Islands[n].reload.l1.radius = 200.0; - радиус
Islands[n].reload.l1.pic = 0; - картинка порта для меню "доплыть до"
Islands[n].reload.l1.tex = "t1"; - имя картинки, на который иконка порта для меню "доплыть до"

Islands[n].reload.l2.label = "Форт Невис"; Метка, отображающаяся в меню "доплыть до"
Islands[n].reload.l2.name = "reload_fort1"; локатор
Islands[n].reload.l2.go = "Nevis_fort";
Islands[n].reload.l2.GoAfterBoard.location = "reload_1";
Islands[n].reload.l2.emerge = "see";
Islands[n].reload.l2.radius = 600.0;
Islands[n].reload.l2.fortname = "fort_Nevis";
Islands[n].reload.l2.fort.model = "Nevis_fort1";
Islands[n].reload.l2.fort.locators = "Nevis_fort1_locators";
Islands[n].reload.l2.pic = 1;
Islands[n].reload.l2.tex = "t1";

Islands[n].InterfaceTextures.t1 = "battle_interface\moor_3.tga"; - текстура с иконкой порта и форта, а так же бухт и т.д., если таковые нужны.
Islands[n].InterfaceTextures.t1.h = 4;
Islands[n].InterfaceTextures.t1.v = 1;

Islands[n].Trade.Export.id1 = GOOD_TOBACCO; // товары, отображающиеся в журнале торговли.
Islands[n].Trade.Export.id2 = GOOD_COFFEE; //Товары экспорта
Islands[n].Trade.Export.id3 = GOOD_COPRA;
Islands[n].Trade.Export.id4 = GOOD_ALE;
Islands[n].Trade.Import.id1 = GOOD_PLANKS; // Товары импорта
Islands[n].Trade.Import.id2 = GOOD_SAILCLOTH;
Islands[n].Trade.Import.id3 = GOOD_WHEAT;
Islands[n].Trade.Import.id4 = GOOD_WINE;
Islands[n].Trade.Contraband.id1 = GOOD_SUGAR; // Контрабандтные товары
Islands[n].Trade.Contraband.id2 = GOOD_LINEN;
Islands[n].Trade.Contraband.id3 = GOOD_RUM;
// Islands[n].Trade.Contraband.id4 = GOOD_SLAVES;

SendMessage(&locator,"le",LM_LOCATE_I,&Islands[n]);


Как делать остров на глобалке читать в теме FAQ по модификациям пост от Жакуина Де Массе.
Вот...Ну ведь нам нужно теперь написать локации невиса и т.д.
Идём дальше...

Идём сюда: Pirates of the Caribbean\Program\Locations\init
и копируем сюда любой файл ".c" из Корсаров 3...Или ПКМ...
Переименуем его в Nevis. Ну а дальше там пишем скрипты локаций...долго объяснять...Я ещё и
Ну я всё таки объясню. Можете скопировать всё написанное ниже мной, только коментарии удалите smile.gif:


int LocationInitNevis(int n)
{

// Nevis town
locations[n].id = "Nevis_town"; - ID локации
locations[n].id.label = "Nevis"; - Метка.
locations[n].worldmap = "Nevis"; - Имя города на карте
locations[n].filespath.models = "locations\Town_Nevis\Town\"; - модель города
locations[n].image = "loading\Town.tga"; - Картинка, отображающаяся при загрузке данной локации.
locations[n].citizens = true; - Люди разрешены.
locations[n].soldiers = true; - Солдаты разрешены

//Town sack
locations[n].townsack = "Nevis";

//Sound
locations[n].type = "town";
locations[n].fastreload = "Nevis";
LAi_LocationFantomsGen(&locations[n], true);
//Models
//Always //Всё, связанное с моделями города
locations[n].models.always.town = "Nevis"; - Модель города
locations[n].models.always.L1 = "Nevis_signsA";
Locations[n].models.always.seabed = "Nevis_sb";
locations[n].models.always.locators = "Nevis_locators"; - локаторы для локации
locations[n].models.always.grassPatch = "Nevis_grass"; - Патч травы для локации

locations[n].models.always.plan = "plan1";
locations[n].models.always.plan.level = 9;


//Day
locations[n].models.day.fonar = "Nevis_fd";
locations[n].models.day.charactersPatch = "Nevis_patch_day";
locations[n].models.day.rinok = "Nevis_rinok";
Locations[n].models.always.somemodel1 = "church1"; Начиная отсюда, это модели, которые помещаются в отдельные локаторы, если их не прописать отображаться не будут. Это всё потому что в К3 есть такая фича как апгрейд колоний...Разрушенную церковь починить например можно и т.д. Да, эти модели, а именно: church1, Shipyard1, academy1, huts1, storehouse1, mill1, fishingpier1, обязательно нужно скопировать из Корсары 3\RESOURCE\MODELS\Locations\upgrades в Pirates of the Caribbean\RESOURCE\MODELS\Locations\Town_Nevis\Town, а текстуры, которые используют данные модели скопировать надо в папку: Pirates of the Caribbean\RESOURCE\Textures\
Locations[n].models.always.somemodel1.locator.group = "Upgrades";
Locations[n].models.always.somemodel1.locator.name = "church";
Locations[n].models.always.somemodel2 = "Shipyard3";
Locations[n].models.always.somemodel2.locator.group = "Upgrades";
Locations[n].models.always.somemodel2.locator.name = "shipyard";
Locations[n].models.always.somemodel3 = "academy1";
Locations[n].models.always.somemodel3.locator.group = "Upgrades";
Locations[n].models.always.somemodel3.locator.name = "academy";
Locations[n].models.always.somemodel4 = "huts1";
Locations[n].models.always.somemodel4.locator.group = "Upgrades";
Locations[n].models.always.somemodel4.locator.name = "huts";
Locations[n].models.always.somemodel5 = "storehouse1";
Locations[n].models.always.somemodel5.locator.group = "Upgrades";
Locations[n].models.always.somemodel5.locator.name = "storehouse";
Locations[n].models.always.somemodel6 = "mill1";
Locations[n].models.always.somemodel6.locator.group = "Upgrades";
Locations[n].models.always.somemodel6.locator.name = "mill";
Locations[n].models.always.somemodel7 = "fishingpier1";
Locations[n].models.always.somemodel7.locator.group = "Upgrades";
Locations[n].models.always.somemodel7.locator.name = "fishingpier";
//Night
locations[n].models.night.fonar = "Nevis_fn";
locations[n].models.night.charactersPatch = "Nevis_patch_night";
Locations[n].models.always.somemodel1 = "church1";
Locations[n].models.always.somemodel1.locator.group = "Upgrades";
Locations[n].models.always.somemodel1.locator.name = "church";
Locations[n].models.always.somemodel2 = "Shipyard3";
Locations[n].models.always.somemodel2.locator.group = "Upgrades";
Locations[n].models.always.somemodel2.locator.name = "shipyard";
Locations[n].models.always.somemodel3 = "academy1";
Locations[n].models.always.somemodel3.locator.group = "Upgrades";
Locations[n].models.always.somemodel3.locator.name = "academy";
Locations[n].models.always.somemodel4 = "huts1";
Locations[n].models.always.somemodel4.locator.group = "Upgrades";
Locations[n].models.always.somemodel4.locator.name = "huts";
Locations[n].models.always.somemodel5 = "storehouse1";
Locations[n].models.always.somemodel5.locator.group = "Upgrades";
Locations[n].models.always.somemodel5.locator.name = "storehouse";
Locations[n].models.always.somemodel6 = "mill1";
Locations[n].models.always.somemodel6.locator.group = "Upgrades";
Locations[n].models.always.somemodel6.locator.name = "mill";
Locations[n].models.always.somemodel7 = "fishingpier1";
Locations[n].models.always.somemodel7.locator.group = "Upgrades";
Locations[n].models.always.somemodel7.locator.name = "fishingpier";
//Environment
locations[n].environment.weather = "true"; Погода разрешена, если написать значение false то не будет.
locations[n].environment.sea = "true"; Море разрешено, если написать значение false то не будет. Этож порт smile.gif. Значит надо оставить так как есть.
//Reload map // теперь же нам нужно будет видеть локаторы, как это сделать, читать в теме FAQ по модификациям пост от Жакуина Де Массе.

locations[n].reload.l1.name = "reload1_back"; имя локатора, находясь в котором и нажав действие мы окажемся в море, то есть в водах Невиса.
locations[n].reload.l1.go = "Nevis"; - Куда попадём
locations[n].reload.l1.emerge = "reload_1"; - Где появимся, то есть в в каком локаторе на Nevis. Оставьте всё как есть.
locations[n].reload.l1.autoreload = "0"; - автопереход, который не требует нажатия кнопки действия, пробела обычно, если значение "0" то не работает, если "1" то будет работать.
locations[n].reload.l1.label = "Море"; - Метка локаци в которую переход по этому локатору.
locations[n].locators_radius.reload.reload1_back = 1.8; - радиус локатора.

locations[n].reload.l3.name = "reload3_back";
locations[n].reload.l3.go = "Nevis_townhall"; - куда попадём, в данном случае Резиденция
locations[n].reload.l3.emerge = "reload1";
locations[n].reload.l3.autoreload = "0";
locations[n].reload.l3.label = "Резиденция";
Locations[n].reload.l3.close_for_night = 1; - параметр, который запрещает доступ в локацию ночью, если потавить 0, то работать небудет, если 1 будет, а если убрать этот параметр, то ночью можно будет спокойно заходить в локацию.

locations[n].reload.l4.name = "reload4_back";
locations[n].reload.l4.go = "Nevis_tavern"; - куда попадём, в данном случае таверна
locations[n].reload.l4.emerge = "reload1";
locations[n].reload.l4.autoreload = "0";
locations[n].reload.l4.label = "Таверна";

locations[n].reload.l5.name = "reload5_back";
locations[n].reload.l5.go = "Nevis_shipyard"; - куда попадём, в данном случае верфь.
locations[n].reload.l5.emerge = "reload1";
locations[n].reload.l5.autoreload = "0";
locations[n].reload.l5.label = "Верфь";
Locations[n].reload.l5.close_for_night = 1;

locations[n].reload.l6.name = "reload6_back";
locations[n].reload.l6.go = "Nevis_store"; - куда попадём, в данном случае магазин.
locations[n].reload.l6.emerge = "reload1";
locations[n].reload.l6.autoreload = "0";
locations[n].reload.l6.label = "Магазин";
Locations[n].reload.l6.close_for_night = 1;

locations[n].reload.l7.name = "reload7_back";
locations[n].reload.l7.go = "Nevis_church"; - куда попадём, в данном случае церковь.
locations[n].reload.l7.emerge = "reload1";
locations[n].reload.l7.autoreload = "0";
locations[n].reload.l7.label = "Церковь";
Locations[n].reload.l7.close_for_night = 1;

locations[n].reload.l8.name = "reload8_back";
locations[n].reload.l8.go = "Nevis_bank"; - куда попадём, в данном случае дом ростовщика.
locations[n].reload.l8.emerge = "reload1";
locations[n].reload.l8.autoreload = "0";
locations[n].reload.l8.label = "Ростовщик";
Locations[n].reload.l8.close_for_night = 1;

n = n + 1;

// Tavern
locations[n].id = "Nevis_tavern"; - id локации, как вы видели, используется вот здесь locations[n].reload.l4.name = "reload4_back";
locations[n].id.label = "Таверна"; - Метка локации
locations[n].filespath.models = "locations\inside\Tavern01\"; - Модель локации
locations[n].image = "loading\Tavern.tga"; - Картинка, отображающаяся при загрузке данной локации.
locations[n].habitues = 1;
//Town sack
locations[n].townsack = "Nevis";
Locations[n].lockWeather = "Inside";

//Sound
locations[n].type = "tavern";
locations[n].fastreload = "Nevis";
//Models // Опять же всё, что связано с моделями.
//Always
locations[n].models.always.tavern = "Tavern01";
locations[n].models.always.locators = "Tavern01_locators";
locations[n].models.always.window = "tavern01_windows";
locations[n].models.always.window.tech = "LocationWindows";
locations[n].models.always.window.level = 50;

//Day
locations[n].models.day.charactersPatch = "Tavern01_patch";

//Night
locations[n].models.night.charactersPatch = "Tavern01_patch";

//Environment
locations[n].environment.weather = "false"; - Погода запрещена в даннном случае, в таверне всё ж smile.gif
locations[n].environment.sea = "false"; - Море запрещено
//Reload map
locations[n].reload.l1.name = "reload1_back"; Локатор выхода, нам надо выйти в город.
locations[n].reload.l1.go = "Nevis_town";
locations[n].reload.l1.emerge = "reload4"; локатор, в котором появимся в след.локации.
locations[n].reload.l1.autoreload = "0";
locations[n].reload.l1.label = "Невис";
LAi_LocationFightDisable(&locations[n], true); - Тот самый параметр, который и делает "Здесь не стоит обнажать оружие, если эту строчку стереть, то оружие можно будет доставать."

n = n + 1;

И собственно все остальные абсолютно аналогично. smile.gif

// Tavern room
locations[n].id = "Nevis_tavern_upstairs";
locations[n].id.label = "Комната";
locations[n].image = "loading\Tavern_512.tga";

//Town sack
locations[n].townsack = "Nevis";
Locations[n].lockWeather = "Inside";

//Sound
locations[n].type = "house";
locations[n].fastreload = "Nevis";
//Models
//Always
locations[n].filespath.models = "locations\inside\Tavern_room";
locations[n].models.always.locators = "Tavern_room_locators";
locations[n].models.always.tavern = "Tavern_room";
locations[n].models.always.window = "tavern_room_window";
locations[n].models.always.window.tech = "LocationWindows";
locations[n].models.always.window.level = 50;

//Day
locations[n].models.day.charactersPatch = "Tavern_room_patch";

//Night
locations[n].models.night.charactersPatch = "Tavern_room_patch";

//Environment
locations[n].environment.weather = "false";
locations[n].environment.sea = "false";

//Reload map
locations[n].reload.l1.name = "reload1_back";
locations[n].reload.l1.go = "Nevis_tavern";
locations[n].reload.l1.emerge = "reload2";
locations[n].reload.l1.autoreload = "0";
locations[n].reload.l1.label = "Таверна";
locations[n].locators_radius.reload.reload1 = 0.8;
n = n + 1;

// Store
locations[n].id = "Nevis_store";
locations[n].id.label = "Магазин";
locations[n].filespath.models = "locations\inside\Store01\";
locations[n].image = "loading\Store.tga";

//Town sack
locations[n].townsack = "Nevis";
Locations[n].lockWeather = "Inside";

//Sound
locations[n].type = "shop";
locations[n].fastreload = "Nevis";
//Models
//Always
locations[n].models.always.locators = "Store01_locators";
locations[n].models.always.store = "Store01";
locations[n].models.always.window = "store01_window";
locations[n].models.always.window.tech = "LocationWindows";
locations[n].models.always.window.level = 50;

//Day
locations[n].models.day.charactersPatch = "Store01_patch";

//Night
locations[n].models.night.charactersPatch = "Store01_patch";

//Environment
locations[n].environment.weather = "false";
locations[n].environment.sea = "false";
//Reload map
locations[n].reload.l1.name = "reload1_back";
locations[n].reload.l1.go = "Nevis_town";
locations[n].reload.l1.emerge = "reload6";
locations[n].reload.l1.autoreload = "0";
locations[n].reload.l1.label = "Невис";
LAi_LocationFightDisable(&locations[n], true);

n = n + 1;

// Bank
locations[n].id = "Nevis_bank";
locations[n].id.label = "Ростовщик";
locations[n].filespath.models = "locations\inside\Bank01\";
locations[n].image = "loading\Bank.tga";

//Town sack
locations[n].townsack = "Nevis";
Locations[n].lockWeather = "Inside";

//Sound
locations[n].type = "house";
locations[n].fastreload = "Nevis";
//Models
//Always
locations[n].models.always.locators = "Bank01_locators";
locations[n].models.always.store = "Bank01";
locations[n].models.always.window = "bank01_windows";
locations[n].models.always.window.tech = "LocationWindows";
locations[n].models.always.window.level = 50;

//Day
locations[n].models.day.charactersPatch = "Bank01_patch";

//Night
locations[n].models.night.charactersPatch = "Bank01_patch";

//Environment
locations[n].environment.weather = "false";
locations[n].environment.sea = "false";
//Reload map
locations[n].reload.l1.name = "reload1_back";
locations[n].reload.l1.go = "Nevis_town";
locations[n].reload.l1.emerge = "reload8";
locations[n].reload.l1.autoreload = "0";
locations[n].reload.l1.label = "Невис";
LAi_LocationFightDisable(&locations[n], true);

n = n + 1;

// Shipyard
locations[n].id = "Nevis_Shipyard";
locations[n].id.label = "Верфь";
locations[n].filespath.models = "locations\inside\Shipyard01\";
locations[n].image = "loading\Shipyard.tga";

//Town sack
locations[n].townsack = "Nevis";
Locations[n].lockWeather = "Inside";

//Sound
locations[n].type = "shipyard";
locations[n].fastreload = "Nevis";
//Models
//Always
locations[n].models.always.locators = "Shipyard01_locators";
locations[n].models.always.shipyard = "Shipyard01";
//Day
locations[n].models.day.charactersPatch = "Shipyard01_patch";

//Night
locations[n].models.night.charactersPatch = "Shipyard01_patch";

//Environment
locations[n].environment.weather = "false";
locations[n].environment.sea = "false";
//Reload map
locations[n].reload.l1.name = "reload1_back";
locations[n].reload.l1.go = "Nevis_town";
locations[n].reload.l1.emerge = "reload5";
locations[n].reload.l1.autoreload = "0";
locations[n].reload.l1.label = "Невис";
LAi_LocationFightDisable(&locations[n], true);

n = n + 1;

// Residence
locations[n].id = "Nevis_townhall";
locations[n].id.label = "Резиденция";
locations[n].filespath.models = "locations\inside\Residence01";
locations[n].image = "loading\Residence.tga";

//Town sack
locations[n].townsack = "Nevis";
Locations[n].lockWeather = "Inside";

//Sound
locations[n].type = "residence";
locations[n].fastreload = "Nevis";
//Models
//Always
locations[n].models.always.locators = "Residence01_locators";
locations[n].models.always.l1 = "Residence01";
locations[n].models.always.window = "residence01_window";
locations[n].models.always.window.tech = "LocationWindows";
locations[n].models.always.window.level = 50;

//Day
locations[n].models.day.charactersPatch = "Residence01_patch";

//Night
locations[n].models.night.charactersPatch = "Residence01_patch";

//Environment
locations[n].environment.weather = "false";
locations[n].environment.sea = "false";

//Reload map
locations[n].reload.l1.name = "reload1_back";
locations[n].reload.l1.go = "Nevis_town";
locations[n].reload.l1.emerge = "reload3";
locations[n].reload.l1.autoreload = "0";
locations[n].reload.l1.label = "Невис";
LAi_LocationFightDisable(&locations[n], true);

locations[n].locators_radius.reload.dialog_event = 0.2;
locations[n].locators_radius.camdetector.dialog_event = 2.2;

n = n + 1;

// Church
locations[n].id = "Nevis_church";
locations[n].id.label = "Церковь";
locations[n].image = "loading\Church.tga";

//Town sack
locations[n].townsack = "Nevis";
Locations[n].lockWeather = "Inside";

//Sound
locations[n].type = "church";
locations[n].fastreload = "Nevis";
//Models
//Always
locations[n].filespath.models = "locations\inside\Church01";
locations[n].models.always.locators = "Church01_locators";
locations[n].models.always.tavern = "Church01";
locations[n].models.always.window = "church01_window";
locations[n].models.always.window.tech = "LocationWindows";
locations[n].models.always.window.level = 50;

//Day
locations[n].models.day.charactersPatch = "Church01_patch";

//Night
locations[n].models.night.charactersPatch = "Church01_patch";

//Environment
locations[n].environment.weather = "false";
locations[n].environment.sea = "false";

//Reload map
locations[n].reload.l1.name = "reload1_back";
locations[n].reload.l1.go = "Nevis_town";
locations[n].reload.l1.emerge = "reload7";
locations[n].reload.l1.autoreload = "0";
locations[n].reload.l1.label = "Невис";
n = n + 1;

ВОТ И ВСЁ!!!

Далее.
Открываем файл Pirates of the Caribbean\Program\Locations\locations_init.c
и ищём секцию, она в самом начале:

#include "locations\init\FalaiseDeFleur.c"
#include "locations\init\Redmond.c"
#include "locations\init\IslaMuelle.c"
#include "locations\init\Oxbay.c"
#include "locations\init\QuebradasCostillas.c"
#include "locations\init\Douwesen.c"
#include "locations\init\KhaelRoa.c"
#include "locations\init\Conceicao.c"
#include "locations\init\QuestLocations.c"
#include "locations\init\boarding.c"
и добавляем после последней строчки строчку:
#include "locations\init\Nevis.c"

дальше идём сюда: Pirates of the Caribbean\Program\Characters и открываем файл characters_init.c
также ищем секцию
#include "characters\init\FalaiseDeFleur.c"
#include "characters\init\Redmond.c"
#include "characters\init\IslaMuelle.c"
#include "characters\init\Oxbay.c"
#include "characters\init\Conceicao.c"
#include "characters\init\Douwesen.c"
#include "characters\init\officers.c"
#include "characters\init\StoryCharacters.c"
#include "characters\init\TempQuestCharacters.c"
#include "characters\init\Other.c"
#include "characters\init\QuebradasCostillas.c"
#include "characters\init\TempQuestEnemy.c"
#include "characters\init\FortCommandants.c"
#include "characters\init\Usurers.c"
#include "characters\init\Item Traders.c"
и также после последней строчки добавляем
#include "characters\init\Nevis.c"
идём вниз этого же файла
и ищем секцию ReloadProgressUpdate();
и после строки n = CreateQuebradasCostillasCharacters(n); ниже добавляем следующее:
ReloadProgressUpdate();
n = CreateNevisCharacters(n);
ReloadProgressUpdate();

далее закрываем этот файл и идём сюда: Pirates of the Caribbean\Program\Characters\init - это файл персонажей города.
И здесь нужно скопировать например файл Oxbay.c и переименовать его в Nevis.c...Инструкцию, как создавать персонажей
можете прочитать также в теме FAQ по модификациям пост от Жакуина Де Массе.

Идём дальше...Чтобы нормально отображалсь картинка острова в журнале торговли нужно прописать к ней путь в файле
Pirates of the Caribbean\RESOURCE\INI\INTERFACES\pictures.ini в секции:
[ISLANDSICON]
stextureName = small_islands.tga
wTextureWidth = 512
wTextureHeight = 256

picture = Redmond,0,0,128,128
picture = Conceicao,128,0,256,128
picture = Douwesen,256,0,384,128
picture = IslaMuelle,384,0,512,128
picture = Oxbay,0,128,128,256
picture = FalaiseDeFleur,128,128,256,256
picture = QuebradasCostillas,256,128,384,256
picture = KhaelRoa,384,128,512,256
и после посл.строчки добавить:
picture = Nevis, и пропишите также как предыдущие.

Чтобы добавить модель острова на глобальную карту необходимо саму модель перемоделировать, она здесь:
Pirates of the Caribbean\RESOURCE\MODELS\WorldMap\islands.gm
По моему есть какой то другой способ, без моделирования, но его я еще не нашёл sad.gif.

Ещё в файле Pirates of the Caribbean\Program\Characters\init\FortCommandants.c нужно создать коменданта форта Невиса, просто
скопируйте ничего не изменяя конец файла это:

makeref(ch,Characters[n]); //Командир гарнизона на Невисе
ch.name = "Форт Невис";
ch.lastname = "Commandant";
ch.id = "Nevis Commander";
ch.model = "Soldier_eng3";
ch.sex = "man";
ch.act.type = "Soldier";
ch.location = "Redmond";
ch.location.group = "reload";
ch.location.locator = "reload_fort1";
ch.nation = ENGLAND;
ch.rank = 1;
ch.reputation = "None";
ch.experience = "0";
ch.skill.Leadership = "6";
ch.skill.Fencing = "9";
ch.skill.Sailing = "1";
ch.skill.Accuracy = "9";
ch.skill.Cannons = "5";
ch.skill.Grappling = "1";
ch.skill.Repair = "1";
ch.skill.Defence = "8";
ch.skill.Commerce = "1";
ch.skill.Sneak = "1";
ch.money = "10";
ch.ship.type = SHIP_FORT;
ch.Fort.Cannons.Charge.Type = GOOD_BOMBS;
ch.Fort.Cannons.Type.1 = CANNON_TYPE_CULVERINE_LBS24;
ch.Fort.Cannons.Type.2 = CANNON_TYPE_CANNON_LBS32;
LAi_SetHP(ch, 100.0, 100.0);
n = n + 1;

Ещё нужно создать кой чаво, чтобы можно было этот самый форт захватить smile.gif...Для этого идём сюда:
Pirates of the Caribbean\Program\Locations\init\boarding.c и спускаемся ниже к секции FORTS...Скопируйте это:

// -------------------------------------------------
// ------------------------------------Nevis_fort
//ID
Locations[n].id = "Nevis_fort";
locations[n].id.label = "Fort inside";
//Info
Locations[n].filespath.models = "locations\Fort_inside\Fort_1\";
Locations[n].image = "loading\Fort.tga";
//Sound
locations[n].type = "deck";

//Models
//Always
Locations[n].models.always.locators = "fort1_l";
Locations[n].models.always.l1 = "fort1";
//Day
Locations[n].models.day.charactersPatch = "fort1_p";
Locations[n].models.day.fonar = "fort1_fd";
//Night
Locations[n].models.night.charactersPatch = "fort1_p";
Locations[n].models.night.fonar = "fort1_fn";
//Environment
Locations[n].environment.weather = "true";
Locations[n].environment.sea = "false";
Locations[n].boarding = "fort";
Locations[n].boarding.nextdeck = "NEXT1_Nevis_fort";

n = n + 1;

//ID
Locations[n].id = "NEXT1_Nevis_fort";
Locations[n].id.label = "Boarding deck";
//Info
Locations[n].filespath.models = "locations\Fort_inside\Fort_2\";
Locations[n].image = "loading\Fort.tga";
//Sound
Locations[n].type = "deck";

//Models
//Always
Locations[n].models.always.locators = "fort2_l";
Locations[n].models.always.l1 = "fort2";
//Day
Locations[n].models.day.charactersPatch = "fort2_p";
Locations[n].models.day.fonar = "fort2_fd";
//Night
Locations[n].models.night.charactersPatch = "fort2_p";
Locations[n].models.night.fonar = "fort2_fn";
//Environment
Locations[n].environment.weather = "true";
Locations[n].environment.sea = "true";
Locations[n].boarding = "fort";
Locations[n].boarding.nextdeck = "NEXT2_Nevis_fort";

n = n + 1;

//ID
Locations[n].id = "NEXT2_Nevis_fort";
Locations[n].id.label = "Boarding deck";
//Info
Locations[n].filespath.models = "locations\Fort_inside\Fort_3\";
Locations[n].image = "loading\Fort.tga";
//Sound
Locations[n].type = "deck";

//Models
//Always
Locations[n].models.always.locators = "fort3_l";
Locations[n].models.always.l1 = "fort3";
//Day
Locations[n].models.day.charactersPatch = "fort3_p";
Locations[n].models.day.fonar = "fort3_fd";
//Night
Locations[n].models.night.charactersPatch = "fort3_p";
Locations[n].models.night.fonar = "fort3_fn";
//Environment
Locations[n].environment.weather = "true";
Locations[n].environment.sea = "true";
Locations[n].boarding = "fort";
Locations[n].boarding.nextdeck = "";

n = n + 1;

Ну вот собственно и всё. Я описал лишь самое важное вкратце для того чтобы только добавить остров!
Командор Норрингтон
Думаю обновлять фак смысла нет, сделаю полный когда накопится много инфы а не по одному совету добавлять...
Jaoquin De Masse
Значит такс, сейчас я напишу (в общих чертах) как работать с альфа каналом. Я работал с Adobe Photoshop CS2. Редактировал файл goods.tga.tx. В Интернете я нарыл рисунок для товара лекарства (вроде даже из вмл). Затем через ConvertorTX перегнал в .tga формат.
Затем открыл Photoshop, в нем файлы goobs.tga и pic_x.tga.(картинка, скачанная с Интернета).
1.При помощи инструмента «Перемещение»(V) переносим изображение из файла pic_x.tga. в goobs.tga файлы с товарами.
2.Устанавливаем картинку нового товара примерно одинаково с остальными, как на рисунке 1.


Нажмите для просмотра прикрепленного файла

3.В верхней панели включаем «окно/каналы».
4.Затем выбираем альфа канал, как на рисунке 2.


Нажмите для просмотра прикрепленного файла

5.Включаем кисть «Ластик»(E) и аккуратно стираем красный слой (альфа) над рисунком, рисунок 3.

Нажмите для просмотра прикрепленного файла

6.Нажимаем одновременно Shift+Ctrl+E, объединить слои.
7.Сохраняем и смотрим в ConvertorеTX, что получилось. Должно получиться как на рисунке 4.


Нажмите для просмотра прикрепленного файла

ЗЫ – если кому надо эту картинку для товара, пишите в личку…
Jaoquin De Masse
Сейчас я напишу как перенести модели абордажных палуб из к3 в пкм (для тех у кого есть к3). Для начала в GM_Viewere откроем к3\RESOURCE\MODELS\Locations\decks\decks 01\ decks 01.гм, смотрим какие текстуры нужны и переносим их из к3RESOURCE\Textures в пкм\RESOURCE\Textures. Затем переносим и сами модели. Затем в GM_Viewere открываем к3\RESOURCE\MODELS\Locations\инсайд\кабин01\кабин01.гм, и также переносим текстуры и модели. Но модели идут в пкм\RESOURCE\MODELS\Locations …
Далее идем пкм\PROGRAM\Locations\initбоардинг.с
Там ищем выбираем любой корабль например Барак, и переправляем на новое. Где что обозначает написано выше…
Короче должно получится так:
Цитата
// -------------------------------------------------
// BOARDING_BARQUE
// -------------------------------------------------
//ID
Locations[n].id = BOARDING_BARQUE;
locations[n].id.label = "Boarding deck";
//Info
Locations[n].filespath.models = "locations\decks\deck02";
Locations[n].image = "loading\Boarding.tga";
//Sound
locations[n].type = "deck";
Locations[n].lockCamAngle = 0.4;

//Models
//Always
Locations[n].models.always.locators = "deck02_locators";
Locations[n].models.always.l1 = "deck02";
//Day
Locations[n].models.day.charactersPatch = "deck02_patch";
//Night
Locations[n].models.night.charactersPatch = "deck02_patch";
//Environment
Locations[n].environment.weather = "true";
Locations[n].environment.sea = "true";
Locations[n].boarding = "true";
Locations[n].boarding.nextdeck = "NEXT_BRD";

n = n + 1;

//ID
Locations[n].id = "NEXT_BRD";
Locations[n].id.label = "Boarding deck";
//Info
Locations[n].filespath.models = "locations\decks\cabin01";
Locations[n].image = "loading\Deck_03.tga";
//Sound
Locations[n].type = "deck";

//Models
//Always
Locations[n].models.always.locators = "Cabin01_locators_x";
Locations[n].models.always.l1 = "Cabin01";
//Day
Locations[n].models.day.charactersPatch = "cabin01_patch";
//Night
Locations[n].models.night.charactersPatch = "cabin01_patch";
//Environment
Locations[n].environment.weather = "true";
Locations[n].environment.sea = "true";
Locations[n].boarding = "true";
Locations[n].boarding.nextdeck = "";

n = n + 1;

Но! Локации во второй палубе другие и появится черный экран при переходе. Чтобы этого избежать скачиваем файл с локаторами Нажмите для просмотра прикрепленного файла и закидываем его в пкм\RESOURCE\MODELS\Locations\decks\decks01\
Вроде все! Запускаем игру ипроверяем!
Jaoquin De Masse
Люди, составте пожалуйста путевый FAQ про перегон моделей из 3Д Макса в гм. smile.gif
Captain Sparrow
Сейчас объясню, как создать новые навыки, все очень просто
заходи в Program\Interface\Perks\perks_init.c
открываем perks_init, появляется список
Вот это все навыки
Сначала вам нужно сделать 3 картинки своего навыка:
первый 128 закинуть в Resource\Textures\Interfaces\Perks\128
второй 64 закинуть в Resource\Textures\Interfaces\Perks\64
и третий должен быть тоже 64, но только черно-белым можно это
сделать в фотошопе ну и закинуть в Resource\Textures\Interfaces\Perks
после чего добавьте, например вот такую строчку в perks_init
ChrPerksList.list.Medicament.descr = "perkMedicament"; - это навык медика
после чего заходите в игру ну и наслаждайтесь

Вот как они примерно должны выглядить
Lugger
Цитата(Captain Sparrow @ Dec 29 2006, 19:28) *

Сейчас объясню, как создать новые навыки, все очень просто...

Толку от этого будет - просто картинка в меню перков и всё! А добавление расчётов, чтобы перк реально уменьшал повреждения или в этом духе? А от простой картинки толку мало.
Sonik
МИНИ-FAQ ПО TOOL (for seaward-forum)
--------------------------------------
ОСНОВНЫЕ ВОПРОСЫ:
--------------------------------------
__________________________
В:
Для чего вообще нужна программа TOOL?
О:
TOOL – программа, составленная из нескольких маленьких программ. TOOL умеет:
1. Просматривать gm-файлы и анимацию для них. Создавать анимацию для разных моделей.
2. Обрабатывать скелетную анимацию, что впоследствии выдаст более корректную анимацию персонажей в игре.
3. Конвертировать* .gm-файлы в VRML (конвертирует в этот формат, после чего этот файл обрабатывается в 3dsMax, сохраняется в этом же формате, и конвертируется обратно в .gm, хотя для кораблей этот способ имеет некоторые ограничения)
* - эта возможность имеет ряд ограничений, которые вы без особого труда найдете в разделе ВОПРОСЫ на этом форуме (www.seaward.ru/forum.htm), забив в поле поиска на форуме слово "MAYA" или "3d Max".
4. Редактировать и добавлять новые локаторы в 3d-модельках, и файлах локаторов.
5. Отображать и редактировать файлы с расширением .ptc.

!!!TOOL – это не программа 3d-моделирования - в ней нельзя создавать свои 3d-модели! Создавайте их в Maya 4.5 или 3ds MAX (для этого нужны определенные плагины, которые тоже есть в недрах форума)
__________________________
В:
Есть ли какие-нибудь самоучители для TOOL - Faq и т.п.?
О:
Существует, но их найти очень трудно, причем они на английском языке, - все самые основные опции, действия и примеры описаны в файле-помощи в программе TOOL (кнопка "?" справа вверху, но эта помощь тоже на английском). Есть описания упорядоченных действий правильного конвертирования файлов из TOOL в MAYA 3.0 и обратно, а остальное ищите на форумах, на этом форуме (www.seaward.ru/forum.htm) в разделе "Модификации" в теме "ВОПРОСЫ". Вообще разобраться в TOOL самому не составляет особой сложности, главное потратить время на метод "проб и ошибок" и тогда через пару дней можно уже смело создавать и редактировать что-нибудь в игре с помощью TOOL.
__________________________
В:
В Корсарах III на каждом корабле установлены ”нехорошие” сигнальные огни, которые напоминают огни самолета, заходящего на посадку, как их можно убрать с помощью TOOL?
О:
Модели кораблей в KIII сделаны очень даже неплохо, но их ночные "сигнальные огни" действительно портят впечатление об их качестве с первого взгляда. Как быть с фонариками, которые так не полюбили фанаты Корсаров?

Делаем все модели кораблей на примере простой лодки "Боевая Тартана" (что при продаже корабля достается нам):
1. Открываем TOOL, в ней выбираем "File -> Open gm". Ищем в открывшемся окне каталог Корсаров III: "C:\Корсары 3\RESOURCE\MODELS\Ships\WarTartane1", выбираем файл "WarTartane1.gm". Нажимаем "Открыть" и в черном окне TOOL появляется белая моделька на синем фоне. Без текстур и мачт. Это нормально. (Текстуры нужно конвертировать в формат .tga и в верхнем поле выбрать каталог текстур, но это делать необязательно, т.к. основное окно для нашей задачи нам не понадобится)
2. Щелкаем в верхней части окна TOOL по кнопке "View -> Locators". Появилось окно WarTartane1, в котором есть вкладка (-)__Locators.
3. Щелкаем по вкладке Locators, появилась таблица "Info", в которой слева направо есть загаловки

(?)-------------------------------------
Locator Name - имя локатора может принимать разные значения, обычно используются цифры вкупе с буквами. Напрямую зависят от следующего по порядку заголовка:
Locator Group - Это группа локаторов, которая прописана в скрипте и коде игры. На группу ссылаются определенные требования игры. Например, если значение этого столбца Flares, то эта строка отвечает за настройку позиции фонаря, а если geometry, то за настройку размещения какой-либо геометрии в данной модели (кстати, в данном случае имя 3d модели должно соответствовать имени Локатора в данной группе). Разберетесь, это только звучит сложно.
PosX,Y,Z - размещение данного локатора относительно центра модели.
XX,YY,ZZ - размер по осям X, Y, Z - имеет смысл изменять только группы локаторов Geometry (например мачты), значения от 0 - 0% до 10 - 10000% от оригинального размера (1 - 100%)
XY,XZ,YX,YZ,ZX,ZY - угол поворота локатора (используется пушками, группа локаторов CannonR, L, C, B)
s0, s1 – не тестированные мной значения, оставляейте их равными s0=1, s1=0. Если хотите, то в дальнейшем можно опробовать разные варианты значений этого параметра.
------------------------------------------
- Чтобы узнать какие из этих локаторов отвечают за фонари открываем программу ”GMview” (просмотрщик gm-моделек, есть на этом форуме ”www.seaward.ru/forum.htm”), в этой программе открываем нашу модель Tartane1 все в том же каталоге, что искали из TOOL (для удобства откроем и текстурку для этой тартаны ”Корсары III/Resource/Textures/Ships/Tartane1/Hull1”).
- В левом нижнем углу программки отметим в поле Locators две галочки ()Show labels и ()Show locators. Теперь мы наглядно видим где эти локаторы находятся непосредственно в gm-модельке.
- Смотрим... fm1a101, fm1a102, fm2a201, fm2a202 очень похоже на то, что эти локаторы в игре являются фонариками. Запускаем игру К3, продаем корабль, плаваем на тартане ночью - опа, и вправду фонари на этих местах. Сохраним игру, выходим из игры и делаем следующее:
4. Разворачиваем TOOL, смотрим на таблицу Info и видим, что fm1a101, fm1a102, fm2a201, fm2a202 принадлежат одной группе локаторов flares*, делаем вывод, что flares* - это фонарики во всех модельках кораблей.
5. Теперь щелкаем по самому левому пустому полю таблицы, столбец которых не имеет заголока, напротив fm2a202 - выделяется вся строка, нажимаем клавишу "delete" и все, одного огонька нет, делаем с другими то же самое. Только не удаляйте остальные локаторы. Они отвечают за расположение мачт, тросов, пушек и камер.
6. Теперь нажимаем APPLY CHANGES внизу слева окна с таблицей, закрываем окно, переходим в интерфейс TOOL.
7. Нажимаем "file -> Save gm". Внизу TOOL в поле строки состояния появилось сообщение "File saved in gm format" - все готово. Запускаем игру, загружаем наш сейв. Теперь тартана без огней! Ура, товарищи, мы сделали это.

Точно так же, по аналогии, делаем и с другими кораблями.
* - не только "flares" отвечает за огни на моделях кораблей, но и группа "lights" с именем локаторов "l00xx" - но эти фонари не нужно удалять, т.к. это кормовые огни, они придают кораблям ночью красивое освещение палубы и придают игре баланс (ночью в игре почти ничего не видно), в реальности они даже часто не гасились в бою – на палубе ничего не видно.

----------------------------------------------------------------------------------------------------------------
ОШИБКИ, КОТОРЫЕ ЧАСТО ВОЗНИКАЮТ У НОВЫХ ПОЛЬЗОВАТЕЛЕЙ:
----------------------------------------------------------------------------------------------------------------
__________________________
В:
Я скачиваю TOOL, запускаю установку - всплывает ошибка о какой-то отсутствующей программе. Что делать?
О:
Это совершенно нормальное явление, т.к. в Windows XP не предусматривается обязательная установка некоторых программ, таких, например, как Microsoft .NET-Framework - набор функций и описаний необходимых для TOOL. Существует две распространенных версий этой программы - 1.4 и 2.0.
И та и другая версии подходят для TOOL.
Microsoft .Net-Framework v1.4 можно найти в следующих местах:
1. Лицензионный диск WinXP (Запустите установку WinXP из Windows, в появившемся синем окошке выберите: Выполнение иных задач->Установка .NET-Framework) - далее пойдет установка, со всеми вопросами соглашайтейсь и нажимайте "next". НО!: Установка может и не пойти, т.е. после нажатия кнопки "Установка .NET-Framework" может ничего не произойти, тогда у вас пиратская версия Windows, переходите к следующему пункту.
2. Поищите самый последний диск Игромании из тех, что есть дома на полке (если таковой вообще имеется, если нет, то см. дальше), обычно в каталоге "Игромания ..-06\Soft\!Standard\microsoft_net" лежит эта прога, если такого каталога нет - поройтесь на диске через интерфейс. (Игромания обычно выкладывала версию 1.4, но в 2006 году вышла версия 2.0, напомню, что обе подходят)
3. Если есть дистрибьютив MS Office, то в каталоге воспользуйтесь поиском "dotnetfx".
4. Если нет результата, то остается последний способ - качать ~40 mb в незжатом состоянии файла dotnetfx.exe по адресу:
http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&displaylang=en
Все. После того как поставите .NET-framework, установка TOOL пойдет нормально.
__________________________
В:
Установка прошла успешно, но TOOL не хочет запускаться.
О:
Все просто - если TOOL не запускается, значит не хватает каких-либо библиотек в Вашем Windows XP (если это происходит, значит на компьютере есть еще программы, которые не запускаются) - выход - проверьте компьютер на наличие вирусов (троянов), сделайте дефрагментацию системного раздела, переустановите TOOL, в крайнем случае переустановите Windows XP (желательно SP2).
__________________________
В:
TOOL установилась, запустилась, но когда я сворачиваю все окна, или запускаю/закрываю какие-либо программы, или запускаю вторую копию TOOL, то вылетает ошибка Microsoft .NET Framework: Unhandled exception has.... Error in the application. Details, Continue, Quit.
О:
При возникновении подобной ошибки нажмите Continue в появившемся окне, разверните TOOL и можно работать дальше. TOOL не совершенна, в ней много глюков, нужно не забывать сохранять изменения, т.к. иногда TOOL может хитро вылететь в самый нужный момент:)

ПИШИТЕ ВОПРОСЫ В Личных Сообщениях ИЛИ НА E-MAIL. Буду рад ответить!
Crazy FF
уважаемый, а где мона качнуть данную программку? blink.gif
-=corsar=-
Вот решил обновить список программ для создания модов:
1 ConvertorTX - конвертирует *.tga в *.tga.tx - необходима для изменения скинов и другой графики...
2 GM-Viewer - просмотр *.gm моделей, экспорт *.obj
3 TOOL - прога для редактирования *.wrl & *.gm, локаторы, анимация итд.(требует наличия NetFramework)
4 Плагины для 3D Max - импорт *.obj & *.wrl, экспорт *.wrl
5 Майя 5.0 - программа для 3D моделирования (взято с форума bestgamer)
navy
TOOL лежит тут
Sonik
УСТАНОВКА МАЙА
для тех, кто в танке
Цитата
у одного моего друга майя пошла, а у другого нет, тоесть там чего-то с кряком...
Все дело в том, что не у всех есть включенная сетевая карта. Для установки кряка - необходим сетевой адрес. В инете, блин - сотни объяснений че и как сделать.
1. к майе качайте любой кряк для самой последней ее версии (на данный момент 8.5, подходит к любой майе меньшей версии) - если траблы с поиском кряка - то обращайтесь в асю.
2. Инструкция по кряку майи:
1) Создать дирректорию на диске C:\ и назовите ее "Flexlm" (должно быть так: "C:\Flexlm");
2) Скопировать файл "aw.dat" и "awkeygen.exe" в эту папку;
3) Установить Майю (исключительно английскую версию, любая русская глючит не-по-децки!!!)
4) Далее нужно выбрать "ПУСК-->ВСЕ ПРОГРАММЫ-->Autodesk (или Alias - в зависимости от версии майи)-->common utilities-->FlexLM license utilities"
5) Во вкладке "system settings" скопировать поле "Ethernet address" (ЕСЛИ В ПОЛЕ "Ethernet address" ОДНИ НУЛИ (000000), ТО СМОТРИТЕ КОНЕЦ СООБЩЕНИЯ - ПОСЛЕ ЧЕРТЫ!!!);
6) Из дериктории "C:\FLEXLM" открыть файл "aw.dat" с помощью Wordpad (не блокнот) и заменить слова "your host" на то, что скопировали в предыдущем шаге. Сохранить и выйти из Wordpad'a;
7) Создать ярлык файла "awkeygen.exe" и потом приписать в строке запуска ярлыка (Прав.кноп.->Свойства в строке "Объект") "awkeygen.exe aw.dat" и запустите файл с ярлыка;
Обычно после этого шага Maya у меня запускалась, но если не запускается и требует файл лицензии, то:
8) "ПУСК-->ВСЕ ПРОГРАММЫ-->Autodesk (или Alias - в зависимости от версии майи)-->Maya X.X-->Install license" Выбирайте "I would like to install license from a file";
9) Выбирать дирректорию с файлом "aw.dat" ("C:\Flexlm");
10) Нажать "Install";
11) Перезагрузить комп (хотя у меня все сразу работает).
-------------------------------

Если в шаге 5 у вас в поле "Ethernet address" одни нули то сделайте следующее прежде чем использовать шаг 5:
1. Нажать правой кнопкой мыши по "Мой Компьютер" выбрать "Свойства";
2. Далее во вкладке "Оборудование" выбрать "установка новых устройств"
3. Немного нужно подождать, после чего нажать "устройство уже подключено"[i] и в следующем окне - прокрутить в самый низ и выбрать [i]"добавление устройства" и "Установка оборудования, выбранного из списка"
4. Из списка выбрать "Сетевые платы" и потом - "Microsoft->Адаптер Microsoft замыкания на себя", 2 раза "Далее" и "готово".
5. У часов появится сеть с крестиком или желтым знаком - это и есть сетевуха замыкания на себя.
6. Попробуйте пункт "5)" из описания кряка сделать заново - нулей больше нет - теперь цифры и буквы.
Все.
Эти инструкции - 20 минут лазания в нете + моя доработка для тех, кто в танке



ИНСТРУКЦИЯ ПЕРЕГОНА OBJ->GM
Цитата
Товарищи, расскажите пожалуйста еще разок кто и как конвертирует obj в gm
не знаю, может быть я и нарушу правила конечно, но вот по этой ссылке от господина Flint'a есть подробное описание конвертирования и всех последовательных действий.
В кратце процесс перегонки моделей выглядит примерно так:
1й способ (быстрый - надо Gm-Viewer и Maya 5.0 - но здесь теряется очень много инфы от gm-модели):
- Конвертируем с помощью Gm-Viewer в формат obj, но после такого конвертирования придется в майе поправлять нормали и в некоторых местах геометрию
- Отредактировав в Maya (желательно 5.0, иначе потом из бОльшей версии придется конвертировать сохраненную модель с помощью hex-редактора для того, чтобы открыть ее в 5й версии, т.к. конвертиовать в gm можно только плагином, который поставляется для версий майи 4.5 и 5.0) нужно последовать инструкции, что дана по ссылке выше.
- после всех действий очистить папку куда вы конвертировали от всех файлов, кроме gm (и, возможно, col и подобных игровых расширений)
2й способ (при помощи 3dsMax 8.0, 9.0 и Maya 5.0 - более качественный):
- Конвертируем Gm в Vrml при помощи TOOL (ищите в инструментах). Настройки конвертирования либо в faq либоо в Help'e проги - там хоть на инглише - но все должно быть понятно.
- После конвертирования импортируем VRML в 3ds Max 8.0 или 9.0 - смысл в том, что конвертирование через VRML сохраняет больше информации от gm, нежели сразу в obj.
- в зависимости от ваших умений работать в максе или майе - делаем необходимые манипуляции с моделью (иначе это можно сделать в Maya после экспорта), после чего экспортируем в obj.
- открываем(!) obj модель в Maya 5.0 и следуем инструкции Flint'a.
- после всех действий очистить папку куда вы конвертировали от всех файлов, кроме gm (и, возможно, col и подобных игровых расширений)
Zeleboba
Незнаю будет ли это актуально но всё равно напишу
Я давно не был на форуме и заметил что добавилось большое количество моделей персов и это радует, так вот я напишу как добавить модели в К3 для абордажа или для охранников в городах
Зачем это нужно ? Да чтоб при абордаже не мелькали одни и теже лица !!!
Для этого находим файл nations_init.с в папке program\nations открываем и видим
void InitNations()
{
ref rNation;
//England
makeref(rNation,Nations[ENGLAND]);
rNation.Name = "England";
rNation.ShortName = "Eng";
rNation.worldMapShip = "british";
//Location fantom models
rNation.fantomModel.m0 = "off_eng_1";
rNation.fantomModel.m1 = "off_eng_2";
rNation.fantomModel.m2 = "sold_eng_1";
rNation.fantomModel.m3 = "sold_eng_2";
rNation.fantomModel.m4 = "sold_eng_3";
rNation.fantomModel.m5 = "sold_eng_4";
rNation.fantomModel.m6 = "sold_eng_5";
rNation.fantomModel.m7 = "sold_eng_6";
rNation.fantomModel.m8 = "sold_eng_7";
rNation.fantomModel.m9 = "sold_eng_8";
//Boarding models
rNation.boardingModel.enemy.m1 = "off_eng_1";
rNation.boardingModel.enemy.m1.ani = "man";
rNation.boardingModel.enemy.m2 = "off_eng_2";
rNation.boardingModel.enemy.m2.ani = "man";
rNation.boardingModel.enemy.m3 = "sold_eng_1";
rNation.boardingModel.enemy.m3.ani = "man";
rNation.boardingModel.enemy.m4 = "sold_eng_2";
rNation.boardingModel.enemy.m4.ani = "man";
rNation.boardingModel.enemy.m5 = "sold_eng_3";
rNation.boardingModel.enemy.m5.ani = "man";
rNation.boardingModel.enemy.m6 = "sold_eng_4";
rNation.boardingModel.enemy.m6.ani = "man";
rNation.boardingModel.enemy.m7 = "sold_eng_5";
rNation.boardingModel.enemy.m7.ani = "man";
rNation.boardingModel.enemy.m8 = "sold_eng_6";
rNation.boardingModel.enemy.m8.ani = "man";
rNation.boardingModel.enemy.m9 = "sold_eng_7";
rNation.boardingModel.enemy.m9.ani = "man";
rNation.boardingModel.enemy.m10 = "sold_eng_8";
rNation.boardingModel.enemy.m10.ani = "man";

Этот код только для Английской нации
Так вот чтобы добавить моделей к солдатам в городе тогда копируйте строку
rNation.fantomModel.m0 = "off_eng_1";
и заменяйте в ней m0 и "off_eng_1";
вместо m0 пишите m10,m11 и.т.д в зависимости сколько вы моделей добавите
а вместо "off_eng_1" в кавычках пишите имя модели которую вы добавляете она толжна лежать в папке
RESOURCE\MODELS\Characters
А если хотите добавить моделей на абордаж тогда копируйте
rNation.boardingModel.enemy.m10 = "sold_eng_8";
rNation.boardingModel.enemy.m10.ani = "man";
Первую строку исправляете аналогично,а во второ меняете номер модели m10 и в кавычках пишите какая анимация модели принадлежит если женская пишите woman если мужская ничё не меняйте
Советую добавить на абордаж женщин т.к сам процесс абордажа происходит веселее в компании с женщинами а не только с мужиками!!!
A.G
lighten.gif А теперь инструкция как прикрутить кирасы к персам . Шляпы, халаты, сапоги, очки и всё прочее нуждается хоть в малейшем знании манипуляций в 3D редакторе.


Для этого нам понадобятся TOOL, Convertor_TX и GM_view.

Внимание! При импорте WRL в TOOL должен быть отмечен "чекбокс" Invert Texture. В TOOL можно загружать только один файл. Можно импользовать только персов с анимацией "man.an" (так как у кирасы именно эта анимация). При анимации кираса будет искажться, ломаться, пропускать текстуру перса - это нормально, такая анимация у стандартных персов, в игре это не заметно.

Для примера возьмём "BigPirate.gm"

1. Выбираем перса и конвертируем его текстуру в TGA файл Convertor_TX(ом). После этого перемещаем текстуру в папку со всеми текстурами героев(...\Resource\Textures\Characters\).Теперь надо отконвертировать текстуры наших кирас и тоже перенести в папку со всеми текстурами.Это файлы GuardsmanEng_1.tga,GuardsmanEng_2B.tga,GuardsmanEng_3B.tga,GuardsmanEng_4.tga.

2. Загрузите вашего перса в TOOL и сохраните локаторы в отдельный файл нажатием на вкладку Locators\Write to File. Введите имя файла(на пример "BigPirate"(без расширения)) и нажмите "сохранить".

3. Теперь открываем TOOL и конвертируем в WRL перса у которого ужэ есть кираса (Например Hero1_Cirass.gm).
У вас получится файл Hero1_Cirass_x.wrl(да, да именно _х, и не вздумайте убирать галочку с чекбокса. Ну а если вы такой продвинутый юзер, что всё ужэ отдублировали и улыбаетесь сейчас, вам эти строчки всё ровно пофиг:))

4. Теперь выходим из TOOL и снова открываем его. Сейчас надо сохранить в WRL понравившегося перса - на пример "BigPirate.gm". Выходим из TOOL.

5. Открываем блокнотом файл BigPirate_x.wrl. Далее блокнотом открываем файл перса в кирасе - Hero1_Cirass_x.wrl. Находим в середине файла(не в начале!!!) такие строки :
***
Shape{
appearance Appearance{
material DEF lambert15SG
Material{diffuseColor 1.0 1.0 1.0}
texture ImageTexture{url "GuardsmanEng_1.tga" }}
geometry IndexedFaceSet{
creaseAngle 3.14
coord DEF polySurface12 Coordinate{
point[0.0771343 1.48619 -0.11395,0... и т.д. и т.п.
***
и начинаем выдиление со строчки "Shape{" и до самого конца файла. Далее копируем эти не понятные на первый взгляд слова и цифры в буфер обмена. Переходим к (уже открытому) файлу BigPirate_x.wrl и вставляем из буфера "текст" в самый конец фала после фигурной скобки - }. Далее нажимаем сохранить файл BigPirate_x.wrl. После этого переименовываем его в BigPirate.wrl.

6. Снова открываем TOOL и загружаем в него BigPirate.wrl. НЕ НАЖИМАЙТЕ НА КНОПКУ "Cycle Animation"(в противном случае вам придётся повторить шаг 6.) Теперь мы видим героя ужэ в кирасе. Но! Я не зря выбрал именно этого перса, так как он больше обычных героев и кираса на нем маловата. Для того чтобы расположить кирасу в нужное место и нужного размера используем вкладку "SCENE\Edit Scene". Здесь не обращая внимания на первое окно сразу переходим ко втрому. В этом окне мы видим название нашего файла и рядом "+". Нажимаем на плюс и появляются "деревом" две надписи "BigPirate" и ниже "polySurface12"(как вы ужэ догадались вторая это и есть кираса).

7. Далее вам надо расположить окна TOOL И Edit Scene так, чтоб вы могли манипулировать ползунками во воторм окне(оно состоит какбы из зх окон сразу) и одновременно наблюдать что происходит на самой модели. Если вы не видите текстуры на вашем персе: 1 - вы через чур уверены в себе и думаете, что мне больше нечего делать как писать всякую лабуду. 2 - вы не настроили TOOL(для этого надо зайти в папку с прогой и открыть блокнотом файл VrmlImExporter.ini). Во второй строчке укажите "полный" путь к папке с текстурами в игре.

8. Выделяем "polySurface12" нажатием лкм и начинаем, управляя ползунками, перемещать, увеличивать, уменьшать нашу кирасу. Я думаю за пару минут можно разобраться какой ползунок за что отвечает. ВНИМАНИЕ! чекбокс "Scale animation also" должен быть ОБЯЗАТЕЛЬНО выделен. Нюансы: если не получается ползунком установить в нужное положение кирасу - введите значения с клавиатуры и нажмите кнопку "Move to Position" в окне.

9. Когда вас всё наконецто будет устраивать закройте окно Edit Scene.

10. Теперь ещё раз сохраните вашего перса в формат WRL(это последний этап, так что "всё" должно вам хоть слегка нравиться).

11. Опять выходим из TOOL и переименовываем ваш файл "BigPirate_х.wrl" в "BigPirate_Сirass.wrl".

12. Заходим в TOOL и загружаем BigPirate_Сirass.wrl. Теперь нажимаем кнопочку "Save Gm" и в итоге получаем файл BigPirate_Сirass_х.gm. Смело убираем "_х" и этот файл почти готов для включения в игру.

14. Добавление следующих кирас гараздо проще. Копируем файл BigPirate_Сirass.wrl и вставляем в эту жэ папку. Переименовываем "Копия BigPirate_Сirass.wrl" в "BigPirate_Сirass1.wrl". Открываем блокнотом и находим в середине файла(то что мы вставляли) строку с названием файла текстуры для кирасы. У вас сейчас там "GuardsmanEng_1.tga". Меняем на название следующей кирасы "GuardsmanEng_2B.tga"(см. названия в верху). Сохраняем и повторяем пункт 14 до получения перса во всех кирасах(4шт).

15. Теперь конвертируем все из "*.wrl" в "*.gm". И не забываем загружать локаторы из сохранённого фаила нажатием на вкладку Locators\Read from File, выбираем наш файл BigPirate(без расширения).

16. После этого открываем тул и заргужаем любой файл "*.gm" нашего перса. Только теперь нажимаем кнопку "Cycle Animation", наслаждаемся движениями перса в кирасе и НИЧЕГО не сохраняя выходим из TOOL.

17. Открываем блокнотом файл HeroDescribe.txt в папке ...\Resource\Ini\texts\russian. Внимательно изучаем "шапку" и добавляем нашему персу модели в кирасах.

18. Начинаем новую игру(у меня почему то так) и при приобретении новых кирас видим ГГ в должном виде.

throw.gif
Zeleboba
Вот написал как сделать простейший квест в К3
Кто не умеет читать обязательно !!!!
Sprut
Случайно наткнулся на учебник для Майи 5. Скачать. Вес около 41Мб. Возможно кто нибудь искал такой учебник.
Мак
я дико звентиляюсь, но не мог бы кто-нибудь выложить майю и гм вивер? в инете куча всякого шлака, найти немогу sad.gif . буду очень признателен если кто-нибудь выложит.
RIZIY
Цитата
но не мог бы кто-нибудь выложить майю и гм вивер?

А Вы в курсе, что с 1 января 2008 года за скачку вареза (не говоря уже про "выложить") дают 6 лет с конфискацией орудия преступления.
tislic
Скажите пожалуйста названия всех локаторов скелета man4.mb, чтобы к новой созданной модели можно было привязать анимацию?
------------------------------------------------------------------------------
У кого ни будь, есть man4.mb с расставленными локаторами?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.