Добавление нового оружия в игру.

Форум Административный раздел Системный раздел для главной FAQ
Сообщений: 4 • Страница 1 из 1 1
Аватара
Добавление нового оружия в игру.

В данной статье я подробно распишу как добавить новое оружие в игру на основе существующего путём "клонирования".

Для начала, маленькое отступление.
-----------------------------------------------------------------------------------------------------------------------------------------------
На всякий случай напомню три главных правила при редактировании хемулей машин и оружия:
1. Соблюдать регистр букв.
(Если имя, к примеру, оружия в настройках - Storm_01, то и в продаже оно должно быть Storm_01 а не storm_01.)
2. Пробелы в именах недопустимы.
(Если имя оружия - Storm_01, то оно и должно быть Storm_01 а не Storm 01.)
3. Внимательность и точность.
(Достаточно в скрипте пропустить, или добавить лишний слеш/точку/стрелку (и т.д.) и игра вылетит.
---------------------------------------------------------------------------------------------------------------------------------------------------
Итак приступим.
Сейчас я добавляю в Меридиан второй Максим, так что буду всё описывать пошагово, как делаю сам.
(Не переживайте, в Махине процесс полностью идеентичен)
Используемые материалы: гелевая шариковая ручка и лист бумаги.
(можно, конечно, создать текстовый документ, но мне на бумаге проще)
Используемый софт: TME, "Блокнот" и "Фотошоп".
Игра, естественно, должна быть распакована.
(У меня она, правда, нераспакована. Просто у меня на другом винте лежат распакованные ресурсы всех трёх игр, беру когда что-то надо оттуда, так мне удобнее.)

Перво-наперво придумываем имя для оружия и записываем на листок первую строчку: Имя на русском - Максим МК2

Весь процесс добавления состоит из нескольких частей.

------------------------------------------------------------------------------------------------------------------------------------------
Часть 1 - Дублирование моделей и прописывание их для движка
------------------------------------------------------------------------------------------------------------------------------------------
1. Заходим в папку data\models\guns и создаём папку maxim02
2. Записываем на листке: Путь для моделей - data\models\guns\maxim02
3. Находим в data\models\guns файлы модели:
sml_maxim01.sam
sml_maxim01_gun.sam
4. Открывем модель лафета sml_maxim01.sam в ТМЕ и смотрим какие используются текстуры (покраска/объём/горелая):
Спойлер

Получаем: sml_maxim01.dds, sml_maxim01b.tga и gun_8.dds
5. Открывем модель оружия sml_maxim01_gun.sam в ТМЕ и смотрим какие используются текстуры (покраска/объём/горелая):
Спойлер

Получаем те-же: sml_maxim01.dds, sml_maxim01b.tga и gun_8.dds
6. Копируем модели и текстуры и вставляем в (созданную) папку data\models\guns\maxim02
7. Переименовываем sml_maxim01.sam в maxim02.sam, а sml_maxim01_gun.sam в maxim02_gun.sam
8. Проверяем, должны быть такие файлы:
data\models\guns\maxim02\maxim02.sam
data\models\guns\maxim02\maxim02_gun.sam
data\models\guns\maxim02\sml_maxim01.dds
data\models\guns\maxim02\sml_maxim01b.tga
data\models\guns\maxim02\gun_8.dds
Записываем на листок: Файлы моделей - maxim02.sam и maxim02_gun.sam
9. Открываем data\models\guns\maxim02\sml_maxim01.dds в Фотошопе.
Спойлер

Немного перекрашиваем, чтоб новый Максим визуально отличался, и сохраняем его с такими (DXT2) настройками:
Спойлер

10. Открываем в "Блокноте" data\models\animmodels.xml
11. Вбиваем в поиск имя стандартной модели лафета максима (sml_maxim01.sam) и находим описание модели:
Спойлер
Код: Ctrl+A, Ctrl+C
       <model
id="maxim01"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01.sam">
</model>

12. Копируем весь блок, и тут-же вставляем, получаем две идеинтичные модели:
Спойлер
Код: Ctrl+A, Ctrl+C
       <model
id="maxim01"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01.sam">
</model>
<model
id="maxim01"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01.sam">

13. Новосозданной модели меняем путь и имя файла модели (берём записанные на листе (параметр file=)), и даём новое имя - maxim02 (параметр id=)
Спойлер
Код: Ctrl+A, Ctrl+C
       <model
id="maxim01"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01.sam">
</model>
<model
id="maxim02"
shadow="1"
windwavy="0"
file="data\models\guns\maxim02\maxim02.sam">
</model>

14. Вбиваем в поиск имя стандартной модели пушки максима (sml_maxim01_gun.sam) и находим описание модели:
Спойлер
Код: Ctrl+A, Ctrl+C
       <model
id="maxim01gun"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01_gun.sam">

<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>

<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>

15. Копируем весь блок, и тут-же вставляем, получаем две идеинтичные модели:
Спойлер
Код: Ctrl+A, Ctrl+C
       <model
id="maxim01gun"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01_gun.sam">

<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>

<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>
<model
id="maxim01gun"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01_gun.sam">

<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>

<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>

16. Новосозданной модели меняем путь и имя файла модели (берём записанные на листе (параметр file=)), и даём новое имя - maxim02 (параметр id=)
Спойлер
Код: Ctrl+A, Ctrl+C
       <model
id="maxim01gun"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01_gun.sam">

<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>

<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>
<model
id="maxim02gun"
shadow="1"
windwavy="0"
file="data\models\guns\maxim02\maxim02_gun.sam">

<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>

<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>

На листок записываем: Имена моделей - maxim02 и maxim02gun
18. Сохраняем изменения в animmodels.xml
19. Открываем в "Блокноте" data\models\servers.xml, копируем любой блок, и дублируем дважды, получаем например:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Item
id="cub"
file="data\models\AnimModels.xml" />
<Item
id="cub"
file="data\models\AnimModels.xml" />
<Item
id="cub"
file="data\models\AnimModels.xml" />

20. На двух новых меняем имена моделей (берём с листа):
Спойлер
Код: Ctrl+A, Ctrl+C
       <Item
id="cub"
file="data\models\AnimModels.xml" />
<Item
id="maxim02"
file="data\models\AnimModels.xml" />
<Item
id="maxim02gun"
file="data\models\AnimModels.xml" />

21. Сохраняем изменения в servers.xml
22. Копируем обе новые созданные записи:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Item
id="maxim02"
file="data\models\AnimModels.xml" />
<Item
id="maxim02gun"
file="data\models\AnimModels.xml" />

23. Вставляем их во ВСЕ servers.xml ВСЕХ карт вашей игры.
Для Меридиана это:
data\maps\r5m1\servers.xml
data\maps\r5m2\servers.xml
data\maps\r6m1\servers.xml
data\maps\r6m2\servers.xml
data\maps\sin\servers.xml
data\maps\menu\servers.xml
(необязательно, только если хотите использовать в меню)
Для Махины:
data\maps\r1m1\servers.xml
data\maps\r1m2\servers.xml
data\maps\r1m3\servers.xml
data\maps\r1m4\servers.xml
data\maps\r2m1\servers.xml
data\maps\r2m2\servers.xml
data\maps\r3m1\servers.xml
data\maps\r3m2\servers.xml
data\maps\r4m1\servers.xml
data\maps\r4m2\servers.xml
data\maps\mainmenu\servers.xml
(необязательно, только если хотите использовать в меню)
Если этого не сделать, на картах, в servers.xml которых модели непрописаны, вместо них будет выведен ящик.

Всё, с моделями закончили.

На листе у нас:
Имя на русском - Максим МК2
Путь для моделей - data\models\guns\maxim02
Файлы моделей - maxim02.sam и maxim02_gun.sam
Имена моделей - maxim02 и maxim02gun

------------------------------------------------------------------------------------------------------------------------------------------
Часть 2 - Дублирование оружия
------------------------------------------------------------------------------------------------------------------------------------------
1. Открываем data\gamedata\gameobjects\smallguns.xml, вбиваем в поиск имя стандартного максима (maxim01) и находим его описание:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim01"
ModelFile = "maxim01"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>

2. Копируем весь блок и тут-же вставляем, получаем два Максима:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim01"
ModelFile = "maxim01"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>
<Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim01"
ModelFile = "maxim01"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>

3. Во втором (новом) блоке меняем имя модели (параметр ModelFile =) на имя нашего ОРУЖИЯ (берём с листка(maxim02))
(Лафет (maxim02_gun) прописывать не нужно, он "цепляется" движком игры автоматически)
Так-же даём новое имя оружия для продажи в магазинах - maxim02 (параметр Name =)
Спойлер
Код: Ctrl+A, Ctrl+C
       <Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim01"
ModelFile = "maxim01"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>
<Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim02"
ModelFile = "maxim02"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>

Сохраняем smallguns.xml
Записываем на листок: Имя оружия для продажи - maxim02

Оружие готово.
Здесь так-же можно менять его характеристики (скорострельность/скорость перезарядки/цена/тип патрона/эффект выстрела/эффект при попадании и т.д.)

На листе у нас:
Имя на русском - Максим МК2
Путь для моделей - data\models\guns\maxim02
Файлы моделей - maxim02.sam и maxim02_gun.sam
Имена моделей - maxim02 и maxim02gun
Имя оружия для продажи - maxim02


----------------------------------------------------------------------------------------------------------------------------------------------
Часть 3.1 - Прописывание оружия в продажу (для проверки) в Меридиан
----------------------------------------------------------------------------------------------------------------------------------------------
1. Открываем в "Блокноте" data\maps\r5m1\dynamicscene.xml
2. Вбиваем в поиск TheApple_Shop и находим магазин, примерно такой блок:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Name="TheApple_Shop"
Belong="1110"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="kpvtS01" />

<Item
PosX="2"
PosY="0"
Flags="16"
Prototype="vulcan01" />

<Item
PosX="4"
PosY="0"
Flags="16"
Prototype="rapier01" />

</GunsAndGadgets>
</Object>

3. Дублируем одну из пушек и даём ей наше имя для продажи (берём с листка (параметр Prototype=))
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Name="TheApple_Shop"
Belong="1110"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="kpvtS01" />

<Item
PosX="2"
PosY="0"
Flags="16"
Prototype="vulcan01" />

<Item
PosX="4"
PosY="0"
Flags="16"
Prototype="rapier01" />


<Item
PosX="4"
PosY="0"
Flags="16"
Prototype="maxim02" />

</GunsAndGadgets>
</Object>

Сохраняем dynamicscene.xml

P.S. Если у вас в продаже ничего нет (чистая игра), то блок будет выглядеть так:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Name="TheApple_Shop"
Belong="1110"
Prototype="shop">
</Object>

В этом случае вам нужно заменить его этим:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Name="TheApple_Shop"
Belong="1110"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="maxim02" />
</GunsAndGadgets>
</Object>

Теперь наше оружие можно купить в Малом яблоке
----------------------------------------------------------------------------------------------------------------------------------------------
Часть 3.2 - Прописывание оружия в продажу (для проверки) в Махину
----------------------------------------------------------------------------------------------------------------------------------------------
1. Открываем в "Блокноте" data\maps\r1m1\dynamicscene.xml
2. Вбиваем в поиск TheGloohoe_Shop и находим магазин, примерно такой блок:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Name="TheGloohoe_Shop"
Belong="1008"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="additional_fuel_tank" />

<Item
PosX="1"
PosY="0"
Flags="16"
Prototype="additional_durability" />

<Item
PosX="0"
PosY="1"
Flags="16"
Prototype="cooling_system_guns" />
</GunsAndGadgets>
</Object>


3. Дублируем одну из пушек и даём ей наше имя для продажи (берём с листка (параметр Prototype=))
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Name="TheGloohoe_Shop"
Belong="1008"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="additional_fuel_tank" />

<Item
PosX="1"
PosY="0"
Flags="16"
Prototype="additional_durability" />

<Item
PosX="0"
PosY="1"
Flags="16"
Prototype="cooling_system_guns" />
<Item
PosX="0"
PosY="1"
Flags="16"
Prototype="maxim02" />
</GunsAndGadgets>
</Object>


Сохраняем dynamicscene.xml

P.S. Если у вас в продаже ничего нет (чистая игра), то блок будет выглядеть так:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Name="TheGloohoe_Shop"
Belong="1008"
Prototype="shop">
</Object>

В этом случае вам нужно заменить его этим:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Object
Name="TheGloohoe_Shop"
Belong="1008"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="maxim02" />
</GunsAndGadgets>
</Object>

Теперь наше оружие можно купить в Глухом
----------------------------------------------------------------------------------------------------------------------------------------------
Часть 4 - Добавление иконки для оружия
----------------------------------------------------------------------------------------------------------------------------------------------
1. Открываем папку data\if\ico\inventorydlg\weapon
2. Находим файл maxim01.dds, копируем его, вставляем здесь же и переименовываем в maxim02.dds
В итоге должно быть два одинаковых файла:
data\if\ico\inventorydlg\weapon\maxim01.dds
data\if\ico\inventorydlg\weapon\maxim02.dds
3. Открываем maxim02.dds в Фотошопе:
Спойлер

Немного перекрашиваем и сохраняем с такими (DXT3) настройками:
Спойлер

4. Открываем в "Блокноте" data\if\ico\modelicons.xml дублируем любой блок (но именно с двумя путями), например:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Item id="vector01"
file="data\if\ico\InventoryDlg\weapon\vector01.dds"
file1="data\if\ico\InventoryDlg\weapon\vector01.dds"/>
<Item id="vector01"
file="data\if\ico\InventoryDlg\weapon\vector01.dds"
file1="data\if\ico\InventoryDlg\weapon\vector01.dds"/>

5. Во втором (новом) блоке имя модели (оружия) из листка (параметр id=) и меняем имя файла иконки на тот, что только-что сделали:
Спойлер
Код: Ctrl+A, Ctrl+C
       <Item id="vector01"
file="data\if\ico\InventoryDlg\weapon\vector01.dds"
file1="data\if\ico\InventoryDlg\weapon\vector01.dds"/>
<Item id="maxim02"
file="data\if\ico\InventoryDlg\weapon\maxim02.dds"
file1="data\if\ico\InventoryDlg\weapon\maxim02.dds"/>

----------------------------------------------------------------------------------------------------------------------------------------------
Часть 5 - Добавление имени оружия (на русском)
----------------------------------------------------------------------------------------------------------------------------------------------
Открываем в "Блокноте" data\if\diz\model_names.xml и дублируем любой блок.
В параметр id= вставляем (с листка) Имя оружия для продажи.
В параметр value= вставляем (с листка) Имя на русском.
Спойлер
Код: Ctrl+A, Ctrl+C
       <Item
id="maxim02"
locForm="0"
value="Максим МК2" />

----------------------------------------------------------------------------------------------------------------------------------------------
Часть 6 - Добавление описания оружия (на русском) для Энциклопедии (Махина) и Путевых заметок (Меридиан)
----------------------------------------------------------------------------------------------------------------------------------------------
Открываем в "Блокноте" data\if\strings\uidescription.xml и дублируем любой блок.
В параметр id= вставляем (с листка) Имя оружия для продажи.
В параметр value= вставляем (из фантазии) описание на русском.
Спойлер
Код: Ctrl+A, Ctrl+C
       <string
id="maxim02_diz"
value="Усовершенствованная модель малого импульсного лазера, отличается повышенной мощностью и скорострельностью." />

============================================================================================================
Ну вот и всё. "Максим МК2" добавлен в игру. Теперь заходим в игру и проверяем:
Спойлер

У меня всё в норме, чего и вам желаю. Удачи.

Автор bat13 06.01.2014

Третий Закон: Любая достаточно развитая технология неотличима от магии. (Кларк)
Аватара
Дорогой kto, хотел бы уточнить как меняется с ограниченного боезапаса в безграничный?
Как я понял за количество патронов отвечает оператор "ShellsPoolSize".
Аватара
Stalker, просто удали его.

Профиль уверенного водителя Белаза
Аватара
Когда понадобится совет "как удалить?" я обязательно тебя спрошу!

Добавлено:
Все, все нашел!
Сообщений: 4 • Страница 1 из 1 1