Mett | Дата: Воскресенье, 24.11.2013, 19:54 | Сообщение # 1 |
Гардемарин
|
| Итак, большинство начинающих модмейкеров при прописывании новой локации сталкивается с такой проблемой: что написать в этой строке 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
Сообщение отредактировал Mett - Воскресенье, 24.11.2013, 20:00 |
|
| |