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