Уроки по коддингу. - Игровые Форумы


Игровые Форумы > Проекты BestGamer > Корсары III: Тайны Дальних Морей > Ваше творчество
-- Уроки по коддингу.
Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.02.2007, 00:40   #1
Экс Администратор
 
 Аватар для Flint
 
Отсутствует :(

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

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

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

Сдесь спрашиваем по скриптам К3-ТДМ.

Постораемся помочь.

По мере вопросов и развертывания работ будем выдавать хелпы и проги .

Копирование материалов данной темы на другие интернет ресурсы постить тока с сылкой на эту тему!

Последний раз редактировалось Flint, 03.02.2007 в 01:51.
   
__________________
Чрезмерное злоупотребление компьютерными играми сносит башню.
Доказано минздравом.


Старый 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.
   
__________________
Чрезмерное злоупотребление компьютерными играми сносит башню.
Доказано минздравом.


Старый 04.02.2007, 12:24   #3
Экс Администратор
 
 Аватар для Flint
 
Отсутствует :(

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

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

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

Урок № 2
Рассмотрим, как добавлять предметы и подзорные трубы


Или Лабока, как говорит барышня в телерекламе.. Но мы ..

Хотим свой телескоп построить? Запросто..

Идем в \program\items\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; - шанс находки.
itm.uniq = 1; - весчь уникальная 1 да, 0 нет.
n++;

далее в RESOURSE/INI/TEXTS/RUSSIAN/ItemsDescribe.txt
ищем описания труб и делаем описание своей.

itmname_spyglass5 {Труба Галилео Галилея} - итем наме. трубы которую описываем
itmdescr_spyglass5 - ИД описание по которому труба обращаеться в файл itm.describe = "itmdescr_spyglass5";
{
Телескоп великого Галилея. До сих пор неизвестно, каким ветром его занесло в Новый Свет. Превосходная работа, но сила увеличения, увы, такова, что ничего кроме Луны и нескольких планет расмотреть в него не представляется возможным.
}

Дальше идем в \RESOURCE\Textures\INTERFACES\LIST_WEAPON_HIGHLIGH T.tga.tx

ПО уже знакомому принцыпу добавляем нашу трубу и конвертируем обратно...

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

Там ищем WEAPONS

Такой блок.

[WEAPONS]
sTextureName = LIST_WEAPON_HIGHLIGHT.tga текстура наша. Без ТХ формата указывать.

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

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 = spyglass5, 512, 512, 640, 640 //тут наша труба
picture = blade28, 640, 512, 768, 640
picture = blade27, 768, 512, 896, 640
picture = gun10, 896, 512, 1024, 640

Все она в игре!

Теперь предмет..


makeref(itm,Items[n]);
itm.id = "Patent_Pirate"; - Ид предмета
itm.name = "itmname_Patent_Pirate"; - внутренее имя
itm.describe = "itmdescr_Patent_Pirate"; - описание.
itm.model = ""; - модель ее нет.
itm.type = "quest"; - тип предмета пока учим как делать quest. В следуюших уроках раскажем как сделать другой полезный тип предмета.
itm.picIndex = 39; - индекс на картинке все знакомо только картинка другая=)
itm.picTexture = "ITEMS_1"; - нетрогаем
itm.price = 0; - стоимость..
n++;

\RESOURCE\INI\texts\russian\ItemsDescribe

itmname_Patent_Pirate {Пиратский знак} - название предмета и внутренее имя.
itmdescr_Patent_Pirate - ИД описания
{
Золотая монета, доказывающая, что вы являетесь членом берегового братства.
}

Добавляем, меняем.
теперь идем RESOURCE\Textures\INTERFACES\items1.tga.tx

Конвертируем, добавляем иконку как написано в первом уроке. НО ПОМНИМ ТУТ РАЗМЕРЫ 64х64. Все сделали сконвертили....

Теперь идем в знакомый файл RESOURCE\INI\interfaces\pictures и ищум блок [ITEMS_1]

sTextureName = items1.tga - название текстуры
wTextureWidth = 512 - высота
wTextureHeight = 512 - ширина
picture = itm1,0,0,64,64 - тут tm1 указываем в itm.picIndex = 39;
picture = itm2,64,0,128,64
picture = itm3,128,0,192,64
picture = itm4,192,0,256,64
picture = itm5,256,0,320,64
picture = itm6,320,0,384,64
picture = itm7,384,0,448,64
picture = itm8,448,0,512,64
picture = itm9,0,64,64,128
picture = itm10,64,64,128,128
picture = itm11,128,64,192,128
picture = itm12,192,64,256,128
picture = itm13,256,64,320,128
picture = itm14,320,64,384,128
picture = itm15,384,64,448,128
picture = itm16,448,64,512,128
picture = itm17,0,128,64,192
picture = itm18,64,128,128,192
picture = itm19,128,128,192,192
picture = itm20,192,128,256,192
picture = itm21,256,128,320,192
picture = itm22,320,128,384,192
picture = itm23,384,128,448,192
picture = itm24,448,128,512,192
picture = itm25,0,192,64,256
picture = itm26,64,192,128,256
picture = itm27,128,192,192,256
picture = itm28,192,192,256,256
picture = itm29,256,192,320,256
picture = itm30,320,192,384,256
picture = itm31,384,192,448,256
picture = itm32,448,192,512,256
picture = itm33,0,256,64,320
picture = itm34,64,256,128,320
picture = itm35,128,256,192,320
picture = itm36,192,256,256,320
picture = itm37,256,256,320,320
picture = itm38,320,256,384,320
picture = itm39,384,256,448,320
picture = itm40,448,256,512,320

Дальше бдописываем.. Из учета одна клетка 64х64 и все поле 512х512.. Алгоритм указан в уроке первом...

picture = itm41,0,320,64,384
picture = itm42,64,320,128,384
picture = itm43,128,320,192,384
picture = itm44,192,320,256,384

Все предмет в игре.. Только специфика К3 такова что его вы не увидете . В уроке 4 скажу как можно добавить предмет игроку.

Последний раз редактировалось dima12, 17.05.2008 в 18:06.
   
__________________
Чрезмерное злоупотребление компьютерными играми сносит башню.
Доказано минздравом.


Старый 05.02.2007, 21:07   #4
Экс Администратор
 
 Аватар для Flint
 
Отсутствует :(

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

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

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

Урок № 3
Сегодня я вас научу добавлять корабли

\resource\models\ships тут мы наблюдаем корабли.. Например добавляем папку с нашим судном. Обязательно должен кончаться на 1!! Galeoth_h1 к примеру.. Открываем ее и смотрим что бы все файлы имели такое же название..

galeoth_h1_mast1.gm
galeoth_h1_mast3.gm

Сделали? Хорошо! Теперь идем resource\models\ships\Sailorspoints тут копируем сайлор поинты с наиболее похожего судна и обзываем как наш корабль..

Galeoth_h1 в данном случае....

Теперь идем в текстуры... \resource\textures\Ships

Создаем папку которая называеться так же как и наш корабль.. Galeoth_h1 с такой структурой.

Galeoth_h1
- Hull1
- Hull2
- Hull3

Внутри каждой папки должа быть текстура.. В принципе в Hull1 чистое дно, Hull2 первый апгрейт днища, Hull3 второй апгрейт днища..

Пока это все что мы тут можем делать...

Туперь идем в \program\ships\Ships_init

///////////////////////////////////////////////////////////////////////////
/// Galeon HEAVY Название для ориентации
///////////////////////////////////////////////////////////////////////////
makeref(refShip,ShipsTypes[SHIP_GALEON_H]); //Название судна
refShip.Name = "Galeon_h"; //Название судна
refship.Soundtype = "frigate"; //Звуки. .Можно прикрутить звуки мановара к Люгеру
refShip.Class = 3; //Клас судна
refShip.Cannon = CANNON_TYPE_CANNON_LBS16; //Калибр орудий установленый по дефолту.
refShip.MaxCaliber = 24; //Макс калибр пушек
refShip.Weight = Tonnes2CWT(1100); //Масса корабля
refShip.Capacity = 3000; //грузоподъемность
refShip.CannonsQuantity = 36; //колво орудий
refShip.rcannon = 15; //Орудия правого борта
refShip.lcannon = 15; //Орудия леаого борта
refShip.fcannon = 2; //Носовые орудия
refShip.bcannon = 4; //Кормовые орудия
refShip.MaxCrew = 400; //Макс команда
refShip.MinCrew = 64; //Мин команда
refShip.BoardingCrew = 200; //Абордажники
refShip.GunnerCrew = 36; //Стрелки
refShip.CannonerCrew = 72; //Канониры
refShip.SailorCrew = 400; //Моряки
refShip.SpeedRate = 12.0; //Скорость
refShip.TurnRate = 25.0; //Маневр
refShip.Price = 105000; //Стоимость
refShip.HP = 4000; //Жизнь корабля
refShip.SP = 100; //Паруса
refShip.AbordageLocation = "Boarding Deck_01"; //Локация абордажа
refship.Type.Merchant = false; //Возможность использования компютером как Торгового судна
refship.Type.War = true; //Возможность использования компютером как Военного судна
refShip.fWindAgainstSpeed = 2.0; //Скорости по отношению к ветеру..
refShip.sea_enchantment = 1.2; //Это что то связано с встречами..
refShip.lowpolycrew = 20; //Колво матросиков на палубе
refShip.buildtime = 80; //Время на постройку.. Но походу неиспользуеться..

refship.Rocking.y = 0.4; //Раскачивание судна по оси У
refship.Rocking.az = 0.02; //Раскачивание судна по оси z
refship.WaterLine = -0.2; //Ватерлиния чем меньше значение тем выше из воды выглядывает судно... Можно сделать подводную локу или воздушный корабль

refship.SpeedDependWeight = 0.5; //тут скорость к масе
refship.SubSeaDependWeight = 0.3; //тут тоже что то. В игре не заметно...
refship.TurnDependWeight = 0.5; //ПОгружение от веса..
refShip.Height.Bombs.Y = 2.5; refShip.Height.Bombs.DY = 2.0;
refShip.Height.Grapes.Y = 4.0; refShip.Height.Grapes.DY = 1.0;
refShip.Height.Knippels.Y = 26.0; refShip.Height.Knippels.DY = 20.0;
refShip.Height.Balls.Y = 2.5; refShip.Height.Balls.DY = 2.0;
//Это параметры залпа....

refship.InertiaAccelerationX = 4.5; refship.InertiaBrakingX = 4.5; //Ускорения-хамедления.
refship.InertiaAccelerationY = 3; refship.InertiaBrakingY = 3; //Ускорения-хамедления.
refship.InertiaAccelerationZ = 4.5; refship.InertiaBrakingZ = 4.5; //Ускорения-хамедления.

refShip.GeraldSails.rey_b2 = 1;
refShip.GeraldSails.rey_b3 = 1;
refShip.GeraldSails.rey_b2.vscale = 0.98;
refShip.GeraldSails.rey_b3.vscale = 0.8;
refship.Track.Enable = true;
refship.Track1.ZStart = 0.0;
refship.Track1.LifeTime = 14.5;
refship.Track1.Width = "5.2, 7.3";
refship.Track1.Speed = "5.5, 6.5";
refship.Track2.ZStart = -0.15;
refship.Track2.LifeTime = 8.5;
refship.Track2.Width = "6.0, 8.0";
refship.Track2.Speed = "0.15, 0.25";
//Тоже не совсем понятные параметры.. Я их не трогаюю. Но походу они на чтото влияют

Так у нас есть корабль!!
Но теперь идем в program\ships\ships.н

там строчка
#define SHIP_TYPES_QUANTITY 23 //сюда добавляем +1

То есть
#define SHIP_TYPES_QUANTITY 24

Дальше видим такие строчки

//6 это наш клас

нам надо


//3
#define SHIP_CORVETTE 10
#define SHIP_PINNACE 12
Дописываем Галеон


//3
#define SHIP_CORVETTE 10
#define SHIP_GALEON_H 23 //Тут надо не забывать что #define SHIP_TYPES_QUANTITY 24 это значит последний номер судна 23!
#define SHIP_PINNACE 12

Все тут закончено...

В принципе судно плавает по морям океанам и вы его захватить можете! Но лутче сделать так для теста(ВНИМАНИЕ В ВЕРИСЯХ ТДМ начиная от 0.1.0201 НЕРАБОТАЕТ!!!! И спользуйте ТДМ 0.01 или К3) дать герою со старта корабль.

Идем в program\characters\characters_init

находим там в персонаже


ch.shotgun = "0";
ch.Ship.Type = GenerateShip(SHIP_LUGGER, 1);
SetBaseShipData(ch);

Вот эту строчку и правим ch.Ship.Type = GenerateShip(SHIP_LUGGER, 1);.

В нашем случае ch.Ship.Type = GenerateShip(SHIP_GALEON_H, 1);

Все запускаем игру... И видем свой корабль!!!

Но возникают вопросы.. А почему нет картинки судна в интрфейсе? А почему нет описания???

Все по порядку... Так пока в игре.. Находим удачный вид корабля и СКРИНИМ .. Помните потом будете резать картинку до квадрата и масштабить до 256х256 так что выбирайте ракурс!

Скрин есть обрабатываем.. Я юзаю стандартный офис Пиктуре Менеджер.. Там все это делаеться ЕЛЕМЕНТАРНО .. В обшем обрезали до квадрата, потом смаштабили до 256х256.. Теперь открываем фотошоп и перегоняем в ТГА, обзывая его как и нашу модель в нашем случае galeon_h.tga! Дальше открываем ConvertorTX и там конвертируем в ТГА.ТХ файл директория конвертации RESOURCE\Textures\INTERFACES\SHIPS конвертим в 16 битном режиме и все выходим отсюда и идем в RESOURCE\INI\interfaces\pictures

Ищем тут такое [SHIPS_lugger]

Видим такой блок

[SHIPS_lugger]
sTextureName = ships\lugger.tga
wTextureWidth = 128
wTextureHeight = 128
picture = ship,0,0,128,128

Меняем под свой корабль..

[SHIPS_galeon_h]
sTextureName = ships\galeon_h.tga
wTextureWidth = 128
wTextureHeight = 128
picture = ship,0,0,128,128

Все картинка у нас ..

Теперь такая весчь как описание?
RESOURCE\INI\texts\russian\common

Там ищем Lugger.
Видим такую строчку
string = Lugger,"Люгер"

Меняем под свой корабль

string = Galeon_h,"Тяж. Галеон"
Добавляем под люгер..

Дальше крутим вниз и видим такое
string = Lugger_descr,"Как один из самых быстрых кораблей 16-го века, люгер пользовался большой популярностью среди берегового братства, контрабандистов и военных, использовавших его в качестве быстрого курьерского или разведывательского судна."

Мы меняем под свое..
string = Galeon_h_descr,"Ля-ля "

Теперь нас смущает постоянно меняющаяся иконка в левом верхнем углу.. В принципе добавить можно и свою(аналогия с оружием размер 64х64) но я предпочитаю дефолт.. Уж слишком много возни .

Идем сюда \program\battle_interface\BattleInterface

И тут ищем знакомое lugger

Такой вот кейс.

case "lugger":
BI_intNRetValue[0] = 0+0*8;
BI_intNRetValue[1] = 0+0*8 + 1;
BI_intNRetValue[2] = BI_ICONS_TEXTURE_SHIP1;
break;

В приницпе алгоритм такой ищем наиболее похожий корабль и на базе его делаем наш..

case "galeon_h":
BI_intNRetValue[0] = 2+3*8;
BI_intNRetValue[1] = 2+3*8 + 1;
BI_intNRetValue[2] = BI_ICONS_TEXTURE_SHIP1;
break;

Все теперь запускаем игру и наслаждаемся ..

Хотя нет есть фиха Sailorspoints.
Открываем наш галеон \MODELS\Ships\SAILORSPOINTS\Galeoth_h1
[SIZE]
points = 28
links = 30
[POINT_DATA]
point 0 = -1.053810,1.572414,5.501140,0
point 1 = 1.015286,1.554920,5.494949,0
point 2 = 1.021910,1.332422,2.101484,0
point 3 = -1.003741,1.324923,2.151694,0
point 4 = -1.028343,1.334921,-1.200451,0
point 5 = 1.053739,1.382422,-1.307331,0
point 6 = -0.932265,1.537422,6.736780,0
point 7 = 0.928816,1.519911,6.657925,0
point 8 = -0.867764,1.547411,-4.546486,0
point 9 = 0.718989,1.492410,-4.582409,0
point 10 = 0.966041,1.454911,-8.690816,4
point 11 = -1.064782,1.452408,-8.631719,4
point 12 = 3.249074,1.434911,-0.637954,10
point 13 = 3.228406,1.469920,-0.248444,10
point 14 = 0.840388,1.427552,7.692973,3
point 15 = 1.031660,1.347551,5.505277,2
point 16 = 1.005709,1.337549,2.096193,2
point 17 = -1.058242,1.335025,-1.223066,1
point 18 = 1.007782,1.347523,-1.275707,2
point 19 = -1.057008,1.465025,-4.540694,1
point 20 = 1.077551,1.432525,-4.599940,2
point 21 = -3.285402,1.322526,-0.675767,10
point 22 = -3.284778,1.342523,-0.364964,10
point 23 = -1.026730,1.330025,2.165932,1
point 24 = -1.020359,1.357526,5.523181,1
point 25 = -0.760462,1.825028,7.740371,3
point 26 = 1.011494,1.410026,-7.762551,10
point 27 = -1.012654,1.475022,-7.877825,10

[LINK_DATA]
link 0 = 0,3
link 1 = 3,4
link 2 = 8,4
link 3 = 11,8
link 4 = 1,2
link 5 = 5,2
link 6 = 7,1
link 7 = 10,9
link 8 = 5,9
link 9 = 6,0
link 10 = 9,8
link 11 = 18,12
link 12 = 12,13
link 13 = 14,13
link 14 = 0,24
link 15 = 3,23
link 16 = 4,17
link 17 = 1,15
link 18 = 16,2
link 19 = 18,5
link 20 = 20,9
link 21 = 19,8
link 22 = 21,17
link 23 = 22,21
link 24 = 22,25
link 25 = 7,26
link 26 = 6,26
link 27 = 26,21
link 28 = 6,27
link 29 = 6,24
link 30 = 7,14
link 25 = 7,26
link 26 = 25,27
link 27 = 6,27
link 28 = 6,23
link 29 = 7,14

Муть да?? И я так думаю . В обшем мини мануал..
[SIZE]
points = 28 //колво поинтов с нулем считаем.
links = 30 //колво линков с нулем.
[POINT_DATA]
point 0 = -1.053810,1.572414,5.501140,0 //координаты поинта 0. Координаты -1.053810 - Х, 1.572414 - Z, 5.501140-Y. Берем маю/макс и начинаем смотреть координаты там и водить сюда.. Метод тыка тут... И только ОН!
point 1 = 1.015286,1.554920,5.494949,0

[LINK_DATA]
link 0 = 0,3 //показывает куда итди! Например с Поинта 0 на поинт 3.
link 1 = 3,4
link 2 = 8,4

Все это напряжно? Да..
Тут есть две новости плохая и хорошая.
Плохая нет тулов которые пишут сейлор поинты в интерфесе(может быть ты напишешь его?). Тока тыком.. Хотя есть тулы которые его пишут но очень косячно..

Хорошая это то что Сайлор поинты ты можешь править прямо в игре. Как? Расказываю... Загружай свой Галеон, море смотрим как матросики бегают.. Дальше два пути, выбирай сам как лутче тебе.
1. Сохранить игру, дальше правишь сейлор поинты, сохранить документ и загружаешь игру.. Вуаля новые сейлор поинты работают.
2. Правишь сейлор поинты, сохранить документ, выходишь на глобальную карту, снова в море вуаля новые сейлор поинты!

Все это хорошо но как пустить в продажу?
А просто.
Идем в \program\scripts\utils
Там ищем такое
for (int i = SHIP_LUGGER; i <= SHIP_FRIGATE; i++)

А теперь внимание идем в program\ships\ships.н
Там смотрим порядковый номер фрегата 13. Так вот продвинутые юзеры, все порядковые номера после 13 в верфь не попадут. Более того порядок идет по номерам.. То есть Если под 14 номером будет Лодка то идти она будет после фрегата и доступна будет на крутых левелах. Вот так вот!

Меняем строчку под свои нужды.. Или порядкове номера и наслаждаемся кораблем в Верфи.

Удачи!
Следуюющий урок раскажет как добавить персонажа и диалог ему .

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


Старый 25.02.2007, 19:23   #5
Экс Администратор
 
 Аватар для Flint
 
Отсутствует :(

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

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

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

Урок № 4
В этом уроке мы научимся создавать персонажей! И писать им диалоги..


Для начала создадим перса в городе.

идем в program\characters\init там видим список городов и еще несколько файлов.. Так вот например в \characters\init\LaVega будут персы которые живут в этом городе.. Что в прочем не мешает вам создать файл Vasya_Pupkin и туда ложить персов. . Главное что бы они лежали в \characters\init

Теперь открываем там написаны блоки.

makeref(ch,Characters[n]); //Трактирщик - эта функция создаёт перса, и для удобства пишетсья кто это.

ch.id = "LaVega_tavernkeeper"; //id перса, по нему движок общаеться с персом
ch.model = "barmen_7"; // модель перса. Смотреть в RESOURCE\MODELS\Characters
ch.greeting = "Barmen_3"; // приветсвие может и не быть.. Это стандартный привет.
ch.sex = "man"; // анимация. man, woman.
ch.location = "LaVega_Tavern"; //локация. Может быть любой локацией от LaVega_town до ну любой .. Смотреть локации можно в \program\locations\init в даном случае \program\locations\init\LaVega и прописывать
ch.location.group = "barmen"; //група локаторов. Смотреть как я говорил можно в игре идем в program\locations\locations_loader там ищем
/*
VisibleLocatorsGroup("reload", 1.0, 15.0, 55, 0, 255, 0);
VisibleLocatorsGroup("characters", 1.0, 15.0, 55, 255, 0, 0);
VisibleLocatorsGroup("goto", 1.0, 15.0, 55, 255, 0, 0);
VisibleLocatorsGroup("sit", 1.0, 15.0, 55, 255, 0, 0);
VisibleLocatorsGroup("item", 1.0, 15.0, 55, 255, 0, 255);
*/

И убираем /* и */. Тоесть делаем так

VisibleLocatorsGroup("reload", 1.0, 15.0, 55, 0, 255, 0);
VisibleLocatorsGroup("characters", 1.0, 15.0, 55, 255, 0, 0);
VisibleLocatorsGroup("goto", 1.0, 15.0, 55, 255, 0, 0);
VisibleLocatorsGroup("sit", 1.0, 15.0, 55, 255, 0, 0);
VisibleLocatorsGroup("item", 1.0, 15.0, 55, 255, 0, 255);

ch.location.locator = "stay"; //Локатор название его.
ch.Dialog.Filename = "TavernOwner_dialog.c"; //Диалог прописываеться в program\dialogs\russian

ch.nation = SPAIN; //национальность
LAi_SetBarmanType(ch); //анимация бармена.
LAi_RemoveLoginTime(ch); //обновление анимации
LAi_group_MoveCharacter(ch, "SPAIN_CITIZENS"); //Група.
LAi_SetImmortal(ch, true); //Неуязвимый.
n = n + 1;

Но это простой смертный... Можно ему добавить конкретное оружие, параметры.

GiveItem2Character(ch, BLADE_SABER); //сабля в инветарие.
ch.equip.blade = BLADE_SABER; //сабля в руках
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 = "Arabella";//имя корабля
ch.Ship.Type = SHIP_Frigate; //Тип корабля. Подробнее смотрим в
ch.Ship.Cannons.Type = CANNON_TYPE_CANNON_LBS16;//Тип установленных орудий.

В принципе перса прописали.. Заходим в игру. Новая игра и смотрим появился ли он? Если да то радуемся.. Но смотреть сообшение..

"Ошибка открытия файла диалога." не все нравиться пишем диалог?
Создаем файл.
ХХХ_dialog.с (под ХХХ я имел виду такое жде название как и в строчке ch.Dialog.Filename = "TavernOwner_dialog.c";). И еще виндовс создает файл ХХХ_dialog.с.txt и двиг разумееться ругаеться , делаем так копируем уже готовый файл диалога и обзываем как надо!

Открываем и видим ужос..

void ProcessDialogEvent() //Лутче не трогать это
{
ref NPChar; //Лутче не трогать это
aref Link, NextDiag; //Лутче не трогать это
DeleteAttribute(&Dialog,"Links"); //Лутче не трогать это
makeref(NPChar,CharacterRef); //Лутче не трогать это
makearef(Link, Dialog.Links); //Лутче не трогать это
makearef(NextDiag, NPChar.Dialog); //Лутче не трогать это
switch(Dialog.CurrentNode) //Лутче не трогать это
{
case "First time": //Название первого Кейса.. Он активируеться при разговоре первом..
dialog.text = ""; //Тут пишем что нам НПС говорит
link.l1 = ""; //Ответ наш
link.l1.go = ""; //Переход на Кайс
link.l2 = ""; //Ответ наш
link.l2.go = ""; //Переход на Кайс
link.l3 = ""; //Ответ наш
link.l3.go = ""; //Переход на Кайс
link.l4 = ""; //Ответ наш
link.l4.go = ""; //Переход на Кайс
break;

case "Exit": //Это кайс выхода.. ЕГо не трогаем...
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;
}
}


Дальше практикуем..

case "First time":
dialog.text = "Сеньор капитан!";
link.l1 = "Черт, откуда ты знаешь что я капитан?";
link.l1.go = "next"; //перенаправление на Кайс
break; //Это обязательно должно быть!

case "next": //Вот он! Кайс
dialog.text = "Я видел как с корабля " + PChar.Ship.Name + ", спустили шлюпку и вы на ней приплыли в этот великолепный город"; //" + PChar.Ship.Name + " это функция вписать название судна ГГ
link.l1 = "Да ты прав, я капитан " + PChar.Name + ", что тебе от меня надо?";
link.l1.go = "1";
link.l2 = "У меня нет времени с тобой разговаривать!";
link.l2.go = "exit";
NextDiag.TempNode = "Second Time"; //Это если заговорим снова! То активируеться диалог не с "First time", а с "Second Time"
break;

case "1":
dialog.text = "Понимаете капитан, у меня есть информация для вас.";
link.l1 = "Что ты предлогаешь?";
link.l1.go = "11";

case "11":
dialog.text = "Я могу вам предложить детальную иформацию о судоходстве.";
link.l1 = "Я сам знаю как управлять судном!";
link.l1.go = "exit";
link.l2 = "Я слушаю.";
link.l2.go = "111";
break;

case "111":
dialog.text = "Не так быстро, за информацию я прошу 400 монет";
if (sti(pchar.money) >= 400) //Проверка что у ГГ есть 400 монет
{
link.l1 = "Платить, ну уж нет, и без тебя разберемся!";
link.l1.go = "exit";
link.l2 = "Вот деньги.";
link.l2.go = "1111";
}
else //если нет денег то активируеться это
{
Link.l1 = "Проклятие у меня нет денег!";
Link.l1.go = "exit";
}
NextDiag.TempNode = "First Time";
break;

case "1111":
AddMoneyToCharacter(pchar, -400); //Отбирает у ГГ 400 монет
dialog.text = "Вот смотрите есть несколько типов ветров.. В обшем мне влом писать ";
link.l1 = "Спасибо за интересную информацию!";
link.l1.go = "exit";
AddCharacterExp(pchar, 1000); //Добавляет опыт
PlayStereoSound("new_level"); //Звук "Новый Уровень"
NextDiag.TempNode = "Second time" //Следующий раз будет диалог "Second time"
break;

case "Second time":
dialog.text = "Капитан, надеюсь вам помогла моя информация?";
link.l1 = "Да спасибо тебе!";
link.l1.go = "exit";
break;

case "exit": //Кайсе Ексит.
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;
}
} //это закрываем скобки обязательно..

Вот такие диалоги можно и нужно делать! По дейсвиям.
AddCharacterExp(pchar, хххх); добавить опыта/отнять опыта тогда надо минус писать.
AddMoneyToCharacter(pchar, хххх); добавить денег персонажу/отобрать деньги у персонажа.
pchar.Experience = makeint(pchar.Experience) - ХХХХ; отобрать у ГГ опыт.

В принципе более сложные действия в диалоге сложно сделать.. Надо делать квестом. Хотя возможно я что то забыл..

Следующий урок будет по прописыванию локаций в игру

Последний раз редактировалось dima12, 17.05.2008 в 18:08.
   
__________________
Чрезмерное злоупотребление компьютерными играми сносит башню.
Доказано минздравом.


Старый 24.03.2007, 11:55   #6
BGTeam
 
 Аватар для Kopcap
 
Отсутствует :(

Регистрация: 17.10.2006
Адрес: Пермь
Сообщения: 3,808

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

По умолчанию

Итак наконец я добрался до написания уроков!

Урок №5
«Кодинг квестов»



Итак значит все квесты в К3 могут кодяться в разных местах. Можно это делать чисто через диалоги, но у этого способа очень много минусов, поэтому мы его рассматривать не будем.
Мы рассмотрим вариант кодинга квестов в файле Quest/quest_reaction.c(можно ещё это делать в story_line.c, но в этом файле делается основная сюжетная линия, и поэтому не будет перемешивать код)
Значит открываем файл quest_reaction.cи идем в самый низ… там сначала делаем комментарий:
////////////////////////////////////////////////////////////////
///////////////Квест такой-то делал тот-то//////////////////////
////////////////////////////////////////////////////////////////
А дальше пишем уже знакомое всем

Код:
 
Case“имя кейса”:
Собственно тело кейса……
Break;
Далее все будет делаться через эти конструкции…
Теперь разберем какой-нибудь уже сделанный квест.
Рассмотрим квест «Конвоир» (2 квест сюжетки)

Квест начинается у губернатора Ла-вега, значит смотрим его файл диалога… LaVega_Hovernor_dialog.c
Среди прочего кода там находим строчки…

Код:
 
link.l3 ="Нет, ли у вас какого-нибудь поручения для молодого капитана?";
link.l3.go ="quest_guard";
дальше ищем case quest_guard там идет продолжение диалога, просматриваем его и видим

Код:
 
case "begin_quest":
NextDiag.CurrentNode = NextDiag.TempNode; 
DialogExit(); 
AddDialogExitQuest("begin_quest"); //// нас интересует вот эта строка в ней происходит запуск кейса begin_quest из файла quest_reaction …
break;
далее идем в файл quest_reaction иищем там case begin_quest

вот он

Код:
 
case "begin_quest":
AddQuestRecord("quest_guard", "1"); // здесь происходит запись в судовой журнал.. (все записи судового журнала находятся в resource\ini\texts\russian\questbook\quests_texts.txt)
ChangeCharacterAddressGroup(characterFromID("MatteusDull"), "LaVega_town", "Goto", "Goto21")); // здесь идет помещение персонажа с ИД MatteusDull в город ЛА-вега в локатор goto 21 
Characters[GetCharacterIndex("LaVega_Hovernor")].Dialog.CurrentNode = "SecondTime"; // прописываем какой-диалог будет с нами говорить губернатор при следующей с ним встреей (этим мы убрали возможность взять квест много раз…)
break;
далее по квесту мы должны поговрить с матеуссом ….. значит смотрим его диалог MatteusDull_dialog.c
итак сейчас нас там интересует кейс exit…..

Код:
 
case "Exit": 
AddDialogExitQuest("go_to_ship_Matteus"); // запусккейсаизквест_реактиона
AddQuestRecord("quest_guard","ship"); // запись в судовой журнал
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;
опять идем в квест_реатион и видим там это…

Код:
 
case "go_to_ship_Matteus": 
LAi_SetActorType(characterFromID("MatteusDull")); // прописываем тип актера Матеусу 
LAi_ActorRunToLocator(characterFromID("MatteusDull"), "reload", "reload1_back", "reload_Matteus", -1); // заставляем его бежать на пристань.. после чего запускается сразу кейс reload_Matteus
AddPassenger(pchar, characterFromID("MatteusDull"), false); // добавляем его в пассажиры 
// я слегка укоротил это кейс потому что нашел там один косяк…=) ну ладно об этом пока не будем 
break;
теперь смотрим кейс reload_Matteus

Код:
 
case "reload_Matteus": 
ChangeCharacterAddressGroup(characterFromID("MatteusDull"), "Matteus_deck", "Goto", "goto6")); // перемещаем Матеуса в локацию Matteus_deck
pchar.quest.reloadPITER.win_condition.l1 = "location";
pchar.quest.reloadPITER.win_condition.l1.location = "Montserrat";
pchar.quest.reloadPITER.win_condition = "reload_PiterBlake_to_Matteus_deck"; // а вот в этих 3 строчках написано, что когда ГГ окажется около острова Монтсерат запустить кейс
reload_PiterBlake_to_Matteus_deck
break;
теперь смотрим далее на этот кейс

Код:
 
case "reload_PiterBlake_to_Matteus_deck":
DoReloadFromSeaToLocation("Matteus_deck", "goto", "goto9"); // здесь происходит релаод ГГ с моря в локацию
LAi_SetActorType(characterFromID("MatteusDull")); //делаем Матеуса актером
LAi_ActorDialog(characterFromID("MatteusDull"), Pchar, "", 1, 1); 
// заставляем его начать диалог с ГГ Characters[GetCharacterIndex("MatteusDull")].Dialog.CurrentNode = "ship"; // прописываем какой именно дилаог должен начать маттеус
Break;
Далее идем опять в диалог маттеуса там смотрим его и т.д. и оттуда есть несколько вариантов развития
Вот они….(это уже опять вернулись в квест_реактион)
Это в случае если с Матеусом не договорились и с ним начинается бой
Код:
 
case "kill_Matteus0": 
LAi_SetWarriorType(CharacterFromID("MatteusDull")); // тип воина для Матеуса 
LAi_group_MoveCharacter(CharacterFromID("MatteusDull"), "enemy"); //помещаем его в группу враги
LAi_group_FightGroups("enemy", LAI_GROUP_PLAYER, true); // начинаем бой между группой враги и группой ГГ (то есть между Матеусом и ГГ) 
LAi_SetFightMode(pchar, true); // боевой режим для ГГ RemovePassenger(Pchar,CharacterFromID("MatteusDull")); // удаляем Матеуса из пассажиров
LAi_QuestDelay("kill_Matteus1", 1.0); // запускаем следующий кейс через 1 секунду 
break;
Код:
 
case "kill_Matteus1":
Pchar.quest.kill_Matteus_next.win_condition.l1 = "NPC_Death";
Pchar.quest.kill_Matteus_next.win_condition.l1.character = "MatteusDull";
PChar.quest.kill_Matteus_next.win_condition = "kill_Matteus2";
// Здесь описано, что после убийства матеуса запутситься кейс kill_Matteus2
break;
Код:
 
case "kill_Matteus2":
AddQuestRecord("quest_guard","kill_Matteus0"); // опятьзапись всудовойжурнал…
QuestToSeaLogin_PrepareLoc("Montserrat", "reload", "reload_3", false);
QuestToSeaLogin_Launch(); // а эти 2 строчки нужны для того, чтобы ГГ вернулся назад в море
//доделать!!!! вариант квеста после убийства чувака ( а этот комментарий я оставлю без комментариев=)))
break;
это был 1 вариант когда ГГ убивал Матеуса…..
теперь рассмотрим 2 продолжение квеста.. это кейс shore_dialog_Montserrat, который запускается опять же таки из диалога с матеусом…

Код:
 
case "shore_dialog_Montserrat":
ChangeCharacterAddressGroup(characterFromID("MatteusDull"), "Montserrat_shore", "Goto", "goto2")); // перемещаем матеуса в бухту
DoReloadCharacterToLocation("Montserrat_shore","goto","goto1"); // перемещаем ГГ в бухту
LAi_QuestDelay("shore_dialog_Montserrat_next", 1.0); // запускаем следующий кейс
LAi_SetActorType(characterFromID("MatteusDull")); // типа актера для Матеуса
Characters[GetCharacterIndex("MatteusDull")].Dialog.CurrentNode = "shore_dialog"; // диалог для Матеуса
break;
далее наичнаем диалог между ГГ и матеусом….

Код:
 
case "shore_dialog_Montserrat_next": 
LAi_ActorDialog(characterFromID("MatteusDull"),characterFromID("Blaze"),"",0,1);
break;
после диалога запускается кейс Go_to_jungle ( запсукаем его опять де таки из диалога маттеуса)

Код:
 
case "Go_to_jungle":
RemovePassenger(Pchar,CharacterFromID("MatteusDull")); // удаляем Матеуса из пассажиров
ChangeCharacterAddressGroup(characterFromID("guardM1"), "Montserrat_town_exit", "Goto", "guard1")); // прописываем охрану у города
ChangeCharacterAddressGroup(characterFromID("guardM2"), "Montserrat_town_exit", "Goto", "guard2")); //прописываем охрану у города
// Для этого персонажи с такими ИД должны быть прописаны!!! 
Locations[FindLocation("Montserrat_town_exit")].locators_radius.goto.goto_quest = 3.0; // делаем радиус локатора goto_quest большим
 
pchar.quest.dialog_with_guard.win_condition.l1 = "locator";
pchar.quest.dialog_with_guard.win_condition.l1.location = "Montserrat_town_exit";
pchar.quest.dialog_with_guard.win_condition.l1.locator_group = "goto";
pchar.quest.dialog_with_guard.win_condition.l1.locator = "goto_quest";
pchar.quest.dialog_with_guard.win_condition = "dialog_with_guard";
 
// в этих 5 строчках описано, что когда ГГ окажется в локаторе goto_questто запуститься кейс dialog_with_guard
break;
Код:
 
case "dialog_with_guard":
ChangeCharacterAddressGroup(characterFromID("MatteusDull"), "Lavega_townhall", "Goto", "goto1")); // здесь переноситсья к Губернатору Ла-Вега (так надо!)
LAi_SetActorType(characterFromID("guardM1")); // тип актера одному из стражников
LAi_ActorDialog(characterFromID("guardM1"),Pchar , "", 0, 0.1);// начинаем диалог с ГГ
Break;
Дальше идут кейсы, в которых вам уже должно быть все знакома.. так что их я разбирать не буду…….

Значит чтобы вам было легче вот списочек функций в игре (далеко не всех!, и возможно у какой-то из них неправильное описание =))
У некоторых функций есть перед её именем указан тип..НО для её использования тип писать не надо….
В скобках после имени указаны параметры функции… их нужно заменять на свое……

Ну что ж пока что все….Продолжение следует…..
Вложения
Тип файла: rar функции.rar (4.3 Кбайт, 167 просмотров)

Последний раз редактировалось dima12, 17.05.2008 в 18:11.
   
__________________
Нужный человек не в том месте может перевернуть мир!


Закрытая тема


Здесь присутствуют: 1 (пользователей - 0 , гостей - 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +4, время: 17:15

Архив  


Рейтинг@Mail.ru Rambler's Top100

© Copyright 2007-2015 BestGamer.Ru

vBulletin, Copyright © Jelsoft Enterprises Ltd.