Игровые Форумы - Показать сообщение отдельно - Уроки по коддингу.
Показать сообщение отдельно
Старый 03.02.2007, 01:16   #2
Экс Администратор
 
 Аватар для Flint
 
Отсутствует :(

Регистрация: 12.11.2006
Адрес: Киев
Сообщения: 2,101

Репутация: 2060   Добавить отзыв для Flint

Отправить сообщение для  Flint с помощью ICQ
По умолчанию

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

№ Урок 1
Начнем с добавления в игру оружия.

Например хотите добавить свое оружие(необязательно делать модель!).

Идем в папку RESOURCE\MODELS\Ammo там лежит все оружие. Для просмотра моделей используем gm view.

Теперь записываем название модельки меча. И идем PROGRAM\Items\initItems.с там ищем раздел //WEAPONS

Там будет такой блок.


makeref(itm,Items[n]); - это нетрогать
itm.id = "blade1"; - ID сабли, я пишу Blade*, где * номер сабли, т.е, если из 25 то писать 26
itm.groupID = BLADE_ITEM_TYPE; - ID, т.е. что это, сабля, труба, пистолет
itm.name = "itmname_blade1";- Имя сабли, обычно пишут itmname_blade* где * следующий номер за последним
itm.describe = "itmdescr_blade1"; - это для описания, на одно описание можно повесить хоть десять сабель … Как делать описане читаем дальше.
itm.model = "blade9"; - модель, вернее её имя, помните мы выписали приглянувшуюся модель, вот пишем ее сюда без разрешения. blade22.gm, а мы пишем blade22
itm.folder = "items"; - папка с моделькой так и оставляем
itm.picIndex = 8; - номер квадрата в котором рисунок сабли можно повесить на любой, как делать рисунок разберу дальше.
itm.picTexture = "WEAPONS"; - имя текстуры рисунка в описании так и оставляем.
itm.price = 500; - Цена меча +/-рандом и навыки.
itm.dmg_min = 1.0; - минимальное повреждение наносимое саблей
itm.dmg_max = 6.0; - максимальное повреждение наносимое саблей
itm.miss = 16.0; Шанс промаха
itm.piercing = 6; - защита
itm.block = 2; - блокировка
itm.minlevel = 1; - минимальный уровень чтобы ГГ взял ее в руки
itm.rare = 32; - редкость появления
itm.uniq = 0; - уникальная ли весчь? 0 нет, 1 да.
itm.param.time = 0.05; - нетрогаем
itm.param.colorstart = argb(64, 64, 64, 64); - нетрогаем
itm.param.colorend = argb(0, 32, 32, 32); - нетрогаем
n++;


Для удобства лутче вставлять перед блоком свой ник.

//Flint
makeref(itm,Items[n]);
itm.id = "blade1";

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


Теперь делаем описание.
Идём открываем: RESOURCE\INI\TEXTS\RUSSIAN\ItemsDescribe.txt
В нём описание сабли:

itmname_blade1 {Дешевая сабля} - название сабли
itmdescr_blade1 - номер описания которое ставим в itm.describe = "itmdescr_blade1";


{
Обычная сабля, каких полно на островах. Немногим лучше железного лома, но она хотя бы притворяется острой.
}

Все сохраняем и выходим.

Теперь самое сложное.. Вставляем иконку.. БеремConvertorTXи ищем файлик RESOURCE\Textures\INTERFACES\LIST_WEAPON_HIGHLIGHT .tga.tx Смотрим его в ConvertorTX и жмем конвертировать. Теперь он у нас в ТГА формате.

Дальше запускаем фотошоп создаем новое окошко 128х128 точек и ваяем свой меч, фон можно украсть с файла LIST_WEAPON_HIGHLIGHT.tga.tx. Переписывать книги по фотошопу не буду, а лутче выкладу сылы на литературу в другой теме.

В обшем сделали мы файлик 128х128 теперь его переносим в ячейку следуюющую за картинкой. Как на срине 1.

Теперь ConvertorTXом снова конвертим в 16 битном качестве..

Идем в RESOURCE\INI\interfaces\pictures

Там ищем WEAPONS

Такой блок.

[WEAPONS]
sTextureName = LIST_WEAPON_HIGHLIGHT.tga текстура наша. Без ТХ формата указывать.
wTextureWidth = 1024 - Ширина текстуры
wTextureHeight = 1024 - Высота текстур

picture = blade1,0,0,128,128 Координаты...
picture = blade2,128,0,256,128
picture = blade3,256,0,384,128
picture = blade4,384,0,512,128
picture = blade5,512,0,640,128
picture = blade6,0,128,128,256
picture = blade7,128,128,256,256
picture = blade8,256,128,384,256
picture = blade9,384,128,512,256
picture = blade10,512,128,640,256
picture = blade11,0,256,128,384
picture = blade12,128,256,256,384
picture = blade13,256,256,384,384
picture = blade14,384,256,512,384
picture = blade15,512,256,640,384
picture = blade16,0,384,128,512
picture = blade17,128,384,256,512
picture = blade18,256,384,384,512
picture = blade19,384,384,512,512
picture = blade20,512,384,640,512
picture = gun1,640,0,768,128
picture = gun2,768,0,896,128
picture = gun3,640,128,768,256
picture = gun4,768,128,896,256
picture = gun5,640,256,768,384
picture = gun6,768,256,896,384
picture = gun7,640,384,768,512
picture = spyglass1,896,0,1024,128
picture = spyglass2,896,128,1024,256
picture = spyglass3,896,256,1024,384
picture = spyglass4,896,384,1024,512


Алгоритм такой.
следующий ряд пишем как предыдуший.
0(верхний край, правый по х оси), 512(верхний край по оси у), 128(нижний левый край по оси х), 640(нижний край по у оси)

Для примера вот ряд.

Picture = gun8, 0, 512, 128, 640
picture = blade24, 128, 512, 256, 640
picture = blade21, 256, 512, 384, 640
picture = blade29, 384, 512, 512, 640
picture = blade30, 512, 512, 640, 640
picture = blade28, 640, 512, 768, 640
picture = blade27, 768, 512, 896, 640
picture = gun10, 896, 512, 1024, 640

blade30 это привязка уазываеться в itm.picIndex = 8 в данном случае будет itm.picIndex = 30.

Все картинка отображаться!!

Меч в игре.

Чтобы раздать его фантомам дописываем в \program\loc_ai\LAi_equip

ВНИМАНИЕ ЭТО РЕАЛЬНО ТОКА В ТДМ. В К3 другой метод и у фантомов там было 7 мечей .

Ищем string LAi_NPC_EquipBladeSelection(int rank)

Дальше смотрим блоки.
if (1 <= rank <= 3) - с какого по какой ранг фантома юзаеться
{
irand = rand(4) - скока вероятностей выпадения.. Тут если скажем 6 мечей то ставим 5.
if (irand == 0) {sel = 1} - первая веротность сел 1
if (irand == 1) {sel = 2}
if (irand == 2) {sel = 3}
if (irand == 3) {sel = 15}
if (irand == 4) {sel = 4}
}


switch(sel)
{
case 1:
blade = "blade1"; - это и есть сел один.
break;

Например добавим меч 30 фантомам.

if (1 <= rank <= 3) - с какого по какой ранг фантома юзаеться
{
irand = rand(4) - скока вероятностей выпадения.. Тут если скажем 6 мечей то ставим 5.
if (irand == 0) {sel = 1} - первая веротность сел 1
if (irand == 1) {sel = 2}
if (irand == 2) {sel = 3}
if (irand == 3) {sel = 15}
if (irand == 4) {sel = 4}
if (1 <= rank <= 3) - с какого по какой ранг фантома юзаеться
{
irand = rand(4) - скока вероятностей выпадения.. Тут если скажем 6 мечей то ставим 5.
if (irand == 0) {sel = 1} - первая веротность сел 1
if (irand == 1) {sel = 2}
if (irand == 2) {sel = 3}
if (irand == 3) {sel = 15}
if (irand == 4) {sel = 4}
if (irand == 5) {sel = 23} - сел это кайсе +1. Если последний касе 22 то ставим 23
}

case 23:
blade = "blade30";
break;

Все есть вероятность около 20% что фантому дадут ЭТОТ МЕЧ.

По пистолям точно так же только разница в итеме.

makeref(itm,Items[n]);
itm.id = "gun1";
itm.groupID = GUN_ITEM_TYPE;
itm.name = "itmname_gun1";
itm.describe = "itmdescr_gun1";
itm.folder = "items";
itm.model = "pistol1";
itm.picIndex = 5;
itm.picTexture = "WEAPONS";
itm.price = 1500;
itm.chargeQ = 1; - количество зарядов
itm.chargespeed = 8; - скорость вскидывания
itm.dmg_min = 8.0; - минимальный урон
itm.dmg_max = 18.0; - максимальный урон
itm.accuracy = 40; - точность
itm.minlevel = 1;
itm.rare = 28;
itm.uniq = 0;
n++;

Первый урок окончен.

Последний раз редактировалось КиллерМЕН, 17.02.2013 в 14:15.
   
__________________
Чрезмерное злоупотребление компьютерными играми сносит башню.
Доказано минздравом.