Форма входа
 
Приветствуем тебя, корсар Юнга!

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!


Купить игры
 



Чат
 
500


Статистика
 
Пользователи, посетившие сайт за текущий день:
Maydg, Danila130, Andrey__3010, Ramaloce, Kriogener
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

  • Страница 1 из 1
  • 1
Модератор форума: NikK  
Урок по "быстрым переходам"
MettДата: Воскресенье, 24.11.2013, 20:05 | Сообщение # 1
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
Итак, большинство начинающих модмейкеров при прописывании новой локации сталкивается с такой проблемой: что написать в этой строке Locations[n].fastreload = "???";

Сейчас будем разбираться. Для этого заходим в папку program\battle_interface и открываем файл fast_reload_table.c
Что мы там увидим:
В самом верху файла задаются дефайны (#define) - новичкам их лучше не трогать.

Смотрим дальше...
Код
void initFastReloadTable()

собственно функция, которая отвечает за переходы, в ней они все и прописаны.

Теперь разберем содержимое этой функции на примере Форт Оранжа.
Код
makearef(curTable, objFastReloadTable.table.FortOrange);

это функция записывает значение objFastReloadTable.table.FortOrange в переменную curTable типа aref, т.е. был object objFastReloadTable.table.FortOrange, а стал aref curTable
Зачем это делается?
Для того чтобы движок каждый раз при инициализации (проще говоря: при запуске функции) не искал в переменных этот объект.
Сколько раз вызывается объект, столько раз будет происходить цикл поиска, а перевод на переменную сократит этот цикл во много раз, и, следовательно, уменьшится нагрузка на движок, что в свою очередь добавляет стабильности игре.

Рассмотрим готовый пример:
Код
curTable.l1.pic = FRP_STORE;
curTable.l1.tex = FRT_STORE;
curTable.l1.location = "FortOrange_store";

и

Код
objFastReloadTable.table.FortOrange.l1.pic = FRP_STORE;
objFastReloadTable.table.FortOrange.l1.tex = FRT_STORE;
objFastReloadTable.table.FortOrange.l1.location = "FortOrange_store";

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

Код
makearef(curTable,objFastReloadTable.table.FortOrange);

на месте FortOrange надо прописать то, что записано в Locations[n].fastreload
Например у меня будет прописано Locations[n].fastreload = "Nassau";
Тогда я буду писать так:
Код
makearef(curTable,objFastReloadTable.table.Nassau);


Теперь немного инфы про строки ниже.
Это собственно древо переходов.
В строке curTable.l1.pic задается картинка перехода.
В строке curTable.l1.tex задается текст, которым подписан переход.
В строке curTable.l1.location задается локация, в которую ведет «быстрый переход».
Если вы внимательно смотрели файл, то заметили, что значения в curTable.l1.pic и curTable.l1.tex задаются дефайнами.
Теперь рассмотри порядок «быстрых переходов».
Первым будет магазин, потом таверна и только потом резиденция (как видно l1, l2, l3).
Код
// store
curTable.l1.pic = FRP_STORE;
curTable.l1.tex = FRT_STORE;
curTable.l1.location = "FortOrange_store";
// tavern
curTable.l2.pic = FRP_TAVERN;
curTable.l2.tex = FRT_TAVERN;
curTable.l2.location = "FortOrange_tavern";
// residence
curTable.l3.pic = FRP_RESIDENCE;
curTable.l3.tex = FRT_RESIDENCE;
curTable.l3.location = "FortOrange_townhall";


К слову, это сделано для расчетов в других файлах, которые отвечают за интерфейс, сам же порядок переходов зависит от того, что расположили первым.
Допустим надо первым сделать резиденцию, пишем ее вверху, можно хоть с номером l100, она все ровно будет на первом месте, но лучше так не извращаться, мало ли к каким последствиям это приведет.
Код
// residence
curTable.l100.pic = FRP_RESIDENCE;
curTable.l100.tex = FRT_RESIDENCE;
curTable.l100.location = "FortOrange_townhall";
// store
curTable.l1.pic = FRP_STORE;
curTable.l1.tex = FRT_STORE;
curTable.l1.location = "FortOrange_store";


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

Урок написал Mett 04.04.2013


Что толку, если не можешь сделать мир лучше.
IvanCorsair29GLДата: Понедельник, 02.12.2013, 22:49 | Сообщение # 2
Матрос
Группа: Корсар
Сообщений: 58
Награды: 5
Репутация: 35
Статус: В открытом море
спасибо!)

05
korsary4Дата: Пятница, 08.08.2014, 14:07 | Сообщение # 3
Адмирал
Группа: Администратор
Сообщений: 5204
Награды: 496
Репутация: 1935
Статус: В открытом море
Не знаю почему, но вот у меня в одном из городов, при указывании наличия быстрого перехода в локации, вот такие ошибки выдает:

Код
RUNTIME ERROR - file: battle_interface\reload_tables.c; line: 32
missed attribute: go
RUNTIME ERROR - file: battle_interface\reload_tables.c; line: 32
no rAP data
RUNTIME ERROR - file: battle_interface\reload_tables.c; line: 40
missed attribute: emerge
RUNTIME ERROR - file: battle_interface\reload_tables.c; line: 40
no rAP data
RUNTIME ERROR - file: battle_interface\reload_tables.c; line: 41
missed attribute: name
RUNTIME ERROR - file: battle_interface\reload_tables.c; line: 41
no rAP data




Единственное, что можно сказать об удаче с уверенностью — она изменит.
--------
NathanielДата: Пятница, 08.08.2014, 14:25 | Сообщение # 4
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата korsary4 ()
у меня в одном из городов, при указывании наличия быстрого перехода в локации, вот такие ошибки выдает

Я на них вообще не обращаю особого внимания, хотя в логе их многовато бывает... Не критические они...


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
MettДата: Пятница, 08.08.2014, 15:06 | Сообщение # 5
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
korsary4, я бы настоятельно рекомендовал глянуть на то, как прописана сама локациия и переходы из нее в другие места
потому что нехорошая ошибка получается
быстрый переход задан, но не определяется локация, локатор для перехода
могут потом сбои пойти

Цитата Nathaniel ()
Я на них вообще не обращаю особого внимания, хотя в логе их многовато бывает

а у меня они в логе вообще не встречаются.. хм


Что толку, если не можешь сделать мир лучше.
korsary4Дата: Пятница, 08.08.2014, 17:52 | Сообщение # 6
Адмирал
Группа: Администратор
Сообщений: 5204
Награды: 496
Репутация: 1935
Статус: В открытом море
Цитата Nathaniel ()
Я на них вообще не обращаю особого внимания, хотя в логе их многовато бывает... Не критические они...

Я пока все что могу - исправляю, чтобы лишних косяков не было.

Цитата Mett ()
я бы настоятельно рекомендовал глянуть на то, как прописана сама локациия и переходы из нее в другие места

Да я смотрел ее, вроде нормально все. Во все здания заходит -выходит, ну и сам быстрый переход тоже работает то.
Удалял вообще все переходу по локации, оставляя что-то одно, то резиденция, то таверна или что, все равно таже ошибка.

p.s. Пока сообщение писал, решил еще кое-что сделать. Убрал быстрый переход - тоже самое есть, потом удалил в придачу все переходы - тоже самое, удалил загрузку локаторов, хоть персонаж и попал в середину локации и не двигается, но в логи ничего про старое не пишет)) jokingly
Неужели там в gm файле локаторов что-то такое?



Единственное, что можно сказать об удаче с уверенностью — она изменит.
--------
NikKДата: Суббота, 09.08.2014, 01:15 | Сообщение # 7
Капитан I ранга
Группа: Корсар
Сообщений: 1682
Награды: 91
Репутация: 689
Статус: В открытом море
korsary4, что за локация? Может там два одинаковых локатора прикручены, которые между собой конфликтуют.

Цитатами пользуются те, кто не в состоянии формулировать собственные мысли.
  • Страница 1 из 1
  • 1
Поиск:

Copyright Pirates-Life.Ru © 2008-2024


Семь Футов под Килем - Бухта Корсаров и Пиратов!