- Регистрация
- 28 Май 2013
- Сообщения
- 726
- Реакции
- 472
- Баллы
- 164
- Лучшие ответы
- 0



На досуге довелось расписывать процесс добавления руны телепортации, потом вспомнил про здешние уроки, пусть будет и здесь, если модераторы не против.
Думаю, пригодится для тех игроков, кому (как и мне) мало существующих телепортов и хочется более быстрого перемещения по мирами Готики (особенно в Возвращении). Отныне мододелы смогут просто отсылать их сюда (чтобы в дальнейшем избежать форумных баттлов сторонников обилия телепортационных рун с противниками такового). jk
Итак, как добавить еще одну руну телепорта:
Думаю, пригодится для тех игроков, кому (как и мне) мало существующих телепортов и хочется более быстрого перемещения по мирами Готики (особенно в Возвращении). Отныне мододелы смогут просто отсылать их сюда (чтобы в дальнейшем избежать форумных баттлов сторонников обилия телепортационных рун с противниками такового). jk
Итак, как добавить еще одну руну телепорта:
Этап 0. Прежде всего, необходимо разобраться как с помощью GothicVDFS распаковать мод, а с помощью GothicSourcer 3.14 декомпилировать скрипты. В этом вам помогут уже существующие руководства. В данном же уроке мы допустим, что вы уже в этом разобрались и перейдем непосредственно к добавлению руны.
Этап 1. Итак, вы декомпилировали скрипты и хотите добавить руну. К сожалению, в добавлении руны задействованы несколько файлов, в связи с чем рассмотрим их по очереди. В данном примере названия файлов взяты из мода "Гильдии", в др. модах они могут отличаться.
В любом случае, проще всего найти нужные файлы во всей куче скриптов следующим образом (см. скрин 1):
Берем название существующей руны и вбиваем его в поиск наверху программы (к примеру, TeleportFarm - телепорт на ферму Онара), после этого внизу окна программы выдается список мест, где встречается данное слово. Двойным щелчком открываем каждый из нужных нам файлов, смотрим как он устроен и встраиваем новые фрагаменты кода в соответствии с нижеследующей инструкцией.
Этап 3. Файл с константами (Constants.d).
1) В файле Constants.d находим следующую строку:
const int MAX_SPELL = XXX
На месте XXX в скриптах стоит число. Это число необходимо увеличить на 1.
Саму же строку вы сдвигаете вниз, а на ее месте прописываете вашу руну в следующем формате (см. скрин 2):
const int SPL_[уникальное название вашей руны на анг.] = номер_вашей_руны_равный_старому_значению_XXX;
2) Чуть ниже вы видите следующую строку:
const string spellFxInstanceNames[XXX] =
На месте XXX в скриптах стоит число. Это число необходимо увеличить на 1.
3) После этой строки вы увидите открывающиеся фигурные скобки и длинный список названий. Проматываете до конца этого списка.
Далее ставите указатель мыши после последнего пункта в списке. Ставите после этого пункта запятую. Жмете enter. В появившейся строчке вводите "Teleport".
4) Ниже видите строку:
const string spellFxAniLetters[XXX] =
На месте XXX в скриптах стоит число. Это число необходимо увеличить на 1.
После строки снова видите список, снова проматываете до конца списка и вставляете, также как и в пункте 3, в самом его конце строку, но на этот раз со словом "HEA"
5) Мотаете файл еще ниже, пока не находите следующую строку:
var int player_talent_runes[YYY]
На месте YYY стоит число. Это число необходимо увеличить на 1.
Все. С этим файлом закончили.
Этап 4. Файл с названиями (Text.d).
1) В файле Text.d находим следующую строку:
const string TXT_SPELLS[XXX] =
На месте XXX в скриптах стоит число. Это число необходимо увеличить на 1.
2) После этой строки вы увидите открывающиеся фигурные скобки и длинный список названий. Проматываете до конца этого списка.
Далее ставите указатель мыши после последнего пункта в списке. Ставите после этого пункта запятую. Жмете enter. В появившейся строчке в кавычках вводите название вашей руны. По этому пункту и пункту 3 см. скрин 3.
3) Далее ниже вы видите длинный список однотипнных строк. В любом месте списка вставляете новую строку (enter-ом), в которой вписываете вашу руну в формате:
const string NAME_SPL_[уникальное название вашей руны на анг.] = "Название вашей руны";
Пример вы видите на все том же скрине 2.
С этим файлом закончили.
Этап 5. Файл с обработкой маны (Spell_ProcessMana.d).
1) Вы видите длинный список однотипных операторов if (чего-то там) return (чего-то там).
В любом месте списка (к примеру, в конце - см. скрин 4) вставляете вашу руну (мое название BBTrollTP меняете на свое уникальное название):
Все. С этим файлом покончили.
Этап 6. Файл, объясняющий работу рун (equipweapn.d).
1) Почти в самом низу файла ищете следующую строчку:
func void Spell_Cast_Teleport()
ПЕРЕД этой строчкой вставляете следующий код (мое название BBTrollTP во всех местах меняете на свое уникальное название):
Из всего этого кода вам интересны лишь 2 строки:
Во-первых, B_PrintTeleportTooFarAway(NEWWORLD_ZEN);
Эта строчка отвечает за фразу ГГ о том, что "Это не сработает" (или что-то в этом роде), если ГГ находится в любом мире, отличном от Хориниса (NEWWORLD_ZEN). Если вы будете делать руну для Миненталя, то вместо NEWWORLD_ZEN вам нужно будет прописать OLDWORLD_ZEN, для Яркендара - ADDONWLORD_ZEN. Названия миров можно посмотреть в уже знакомом вам файле Constants.d.
Во-вторых, AI_Teleport(self,"NW_TROLLAREA_PATH_78");
Эта строчка отвечает за то, куда именно вы телепортируетесь. Вэйпоинт (точка назначения) указан в кавычках.
Допустим, вы хотите руну к ледяному дракону. Что для этого надо сделать? Во-первых, вы идете к желаемому месту в самой игре. Во-вторых, придя, вы активируете Марвин-режим и вбиваете в F2-консоли фразу "toggle waynet" (часть этой фразы консоль заполнит за вас, т.ч. будьте внимательны). Далее вы увидите на земле адъ и Израиль паутину из линий и кучу надписей на стыках линий. Выбираете любую надпись по вкусу поблизости от желаемого места назначения (это и есть названия вэйпоинтов), записываете ее на бумажку, закрываете игру, возвращайтесь к Соурсеру и впечатываете ее в кавычках вместо NW_TROLLAREA_PATH_78 из моего примера (КАПСЛОК ВАЖЕН!!!111).
2) Возвращайтесь к строке func void Spell_Cast_Teleport(), упомянутой ранее.
Ниже вы видите кучу однотипных операторов, немного похожих на предыдущий файл (с этапа 5).
Также как и в предыдущем файле, в конце всего этого чуда перед последней закрывающей скобкой вы вставляете следующее (мое название BBTrollTP меняете на свое уникальное название):
На этом с данным файлом мы закончили. Остался последний.
Этап 7. Файл со списком рун (Itru_palteleportsecret.d).
1) Где-нибудь посередине файла, между другими рунами, вставляете свою руну (мое название BBTrollTP во всех местах меняете на свое уникальное название):
Здесь особо ничего важного нет. value - это стоимость, visual - как руна выглядит в инвентаре (можете полистать список рун, посмотреть их визуалы рун и выбрать себе по вкусу). NAME_SPL_BBTrollTP - прописанное ранее название вашей руны. Остальное не важно...
Все. Руна создана.
Этап 8. Добавление руны в игру.
Теперь у меня есть новая руна ItRu_BBTrollTP, а у вас - ваша руна. Самый простой способ добавить эту руну в игру - воспользоваться читом insert ItRu_BBTrollTP , вбиваемым в F2-консоли.
Если же хотите добавить ее "цивилизованно", то придется еще немного поразбираться в скриптах. В данный урок это все уже не уместится, посему скажу лишь кратко 2 основных варианта:
1) Прописать в каком-нибудь диалоге B_GiveInvItems(self,other,ItRu_BBTrollTP,1); - как это сделать, см. сами.
2) Вставить руну в сам игровой мир в точку NW_TROLLAREA_PATH_78 (или другую) при помощи Wld_InsertItem(ItRu_BBTrollTP,"NW_TROLLAREA_PATH_78"); Сделать это можно как в диалоге, так и во время смены миров (файлы B_Enter_ТакойтоWorld). Детали см. сами.
Этап 9. Сохраняем скрипты, компилируем скрипты, запаковываем мод. Подразумевается то же, что и в п. 0, посему здесь не рассматривается.
Этап 1. Итак, вы декомпилировали скрипты и хотите добавить руну. К сожалению, в добавлении руны задействованы несколько файлов, в связи с чем рассмотрим их по очереди. В данном примере названия файлов взяты из мода "Гильдии", в др. модах они могут отличаться.
В любом случае, проще всего найти нужные файлы во всей куче скриптов следующим образом (см. скрин 1):
Берем название существующей руны и вбиваем его в поиск наверху программы (к примеру, TeleportFarm - телепорт на ферму Онара), после этого внизу окна программы выдается список мест, где встречается данное слово. Двойным щелчком открываем каждый из нужных нам файлов, смотрим как он устроен и встраиваем новые фрагаменты кода в соответствии с нижеследующей инструкцией.
Этап 3. Файл с константами (Constants.d).
1) В файле Constants.d находим следующую строку:
const int MAX_SPELL = XXX
На месте XXX в скриптах стоит число. Это число необходимо увеличить на 1.
Саму же строку вы сдвигаете вниз, а на ее месте прописываете вашу руну в следующем формате (см. скрин 2):
const int SPL_[уникальное название вашей руны на анг.] = номер_вашей_руны_равный_старому_значению_XXX;
2) Чуть ниже вы видите следующую строку:
const string spellFxInstanceNames[XXX] =
На месте XXX в скриптах стоит число. Это число необходимо увеличить на 1.
3) После этой строки вы увидите открывающиеся фигурные скобки и длинный список названий. Проматываете до конца этого списка.
Далее ставите указатель мыши после последнего пункта в списке. Ставите после этого пункта запятую. Жмете enter. В появившейся строчке вводите "Teleport".
4) Ниже видите строку:
const string spellFxAniLetters[XXX] =
На месте XXX в скриптах стоит число. Это число необходимо увеличить на 1.
После строки снова видите список, снова проматываете до конца списка и вставляете, также как и в пункте 3, в самом его конце строку, но на этот раз со словом "HEA"
5) Мотаете файл еще ниже, пока не находите следующую строку:
var int player_talent_runes[YYY]
На месте YYY стоит число. Это число необходимо увеличить на 1.
Все. С этим файлом закончили.
Этап 4. Файл с названиями (Text.d).
1) В файле Text.d находим следующую строку:
const string TXT_SPELLS[XXX] =
На месте XXX в скриптах стоит число. Это число необходимо увеличить на 1.
2) После этой строки вы увидите открывающиеся фигурные скобки и длинный список названий. Проматываете до конца этого списка.
Далее ставите указатель мыши после последнего пункта в списке. Ставите после этого пункта запятую. Жмете enter. В появившейся строчке в кавычках вводите название вашей руны. По этому пункту и пункту 3 см. скрин 3.
3) Далее ниже вы видите длинный список однотипнных строк. В любом месте списка вставляете новую строку (enter-ом), в которой вписываете вашу руну в формате:
const string NAME_SPL_[уникальное название вашей руны на анг.] = "Название вашей руны";
Пример вы видите на все том же скрине 2.
С этим файлом закончили.
Этап 5. Файл с обработкой маны (Spell_ProcessMana.d).
1) Вы видите длинный список однотипных операторов if (чего-то там) return (чего-то там).
В любом месте списка (к примеру, в конце - см. скрин 4) вставляете вашу руну (мое название BBTrollTP меняете на свое уникальное название):
Код:
if(activeSpell == SPL_BBTrollTP)
{
return spell_logic_BBTrollTP(manaInvested);
};
Этап 6. Файл, объясняющий работу рун (equipweapn.d).
1) Почти в самом низу файла ищете следующую строчку:
func void Spell_Cast_Teleport()
ПЕРЕД этой строчкой вставляете следующий код (мое название BBTrollTP во всех местах меняете на свое уникальное название):
Код:
func int Spell_Logic_BBTrollTP(var int manaInvested)
{
if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
{
return SPL_SENDCAST;
}
else if(self.attribute[ATR_MANA] >= SPL_Cost_Teleport)
{
return SPL_SENDCAST;
};
return SPL_NEXTLEVEL;
};
func void Spell_Cast_BBTrollTP()
{
B_PrintTeleportTooFarAway(NEWWORLD_ZEN);
if((self.id == 0) && (PLAYERISTRANSFER == TRUE) && (PLAYERISTRANSFERDONE == FALSE))
{
b_transferback(self);
};
if(Npc_GetActiveSpellIsScroll(self))
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;
}
else
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Teleport;
};
AI_Teleport(self,"NW_TROLLAREA_PATH_78");
AI_PlayAni(self,"T_HEASHOOT_2_STAND");
};
Во-первых, B_PrintTeleportTooFarAway(NEWWORLD_ZEN);
Эта строчка отвечает за фразу ГГ о том, что "Это не сработает" (или что-то в этом роде), если ГГ находится в любом мире, отличном от Хориниса (NEWWORLD_ZEN). Если вы будете делать руну для Миненталя, то вместо NEWWORLD_ZEN вам нужно будет прописать OLDWORLD_ZEN, для Яркендара - ADDONWLORD_ZEN. Названия миров можно посмотреть в уже знакомом вам файле Constants.d.
Во-вторых, AI_Teleport(self,"NW_TROLLAREA_PATH_78");
Эта строчка отвечает за то, куда именно вы телепортируетесь. Вэйпоинт (точка назначения) указан в кавычках.
Допустим, вы хотите руну к ледяному дракону. Что для этого надо сделать? Во-первых, вы идете к желаемому месту в самой игре. Во-вторых, придя, вы активируете Марвин-режим и вбиваете в F2-консоли фразу "toggle waynet" (часть этой фразы консоль заполнит за вас, т.ч. будьте внимательны). Далее вы увидите на земле адъ и Израиль паутину из линий и кучу надписей на стыках линий. Выбираете любую надпись по вкусу поблизости от желаемого места назначения (это и есть названия вэйпоинтов), записываете ее на бумажку, закрываете игру, возвращайтесь к Соурсеру и впечатываете ее в кавычках вместо NW_TROLLAREA_PATH_78 из моего примера (КАПСЛОК ВАЖЕН!!!111).
2) Возвращайтесь к строке func void Spell_Cast_Teleport(), упомянутой ранее.
Ниже вы видите кучу однотипных операторов, немного похожих на предыдущий файл (с этапа 5).
Также как и в предыдущем файле, в конце всего этого чуда перед последней закрывающей скобкой вы вставляете следующее (мое название BBTrollTP меняете на свое уникальное название):
Код:
if(Npc_GetActiveSpell(self) == SPL_BBTrollTP)
{
Spell_Cast_BBTrollTP();
};
Этап 7. Файл со списком рун (Itru_palteleportsecret.d).
1) Где-нибудь посередине файла, между другими рунами, вставляете свою руну (мое название BBTrollTP во всех местах меняете на свое уникальное название):
Код:
instance ItRu_BBTrollTP(C_Item)
{
name = NAME_Rune;
mainflag = ITEM_KAT_RUNE;
flags = 0;
value = 500;
visual = "ItRu_MasterOfDesaster.3DS";
material = MAT_STONE;
spell = SPL_BBTrollTP;
wear = WEAR_EFFECT;
effect = "SPELLFX_WEAKGLIMMER";
description = NAME_SPL_BBTrollTP;
text[1] = NAME_Manakosten;
count[1] = SPL_Cost_Teleport;
text[5] = NAME_Value;
count[5] = value;
};
Все. Руна создана.
Этап 8. Добавление руны в игру.
Теперь у меня есть новая руна ItRu_BBTrollTP, а у вас - ваша руна. Самый простой способ добавить эту руну в игру - воспользоваться читом insert ItRu_BBTrollTP , вбиваемым в F2-консоли.
Если же хотите добавить ее "цивилизованно", то придется еще немного поразбираться в скриптах. В данный урок это все уже не уместится, посему скажу лишь кратко 2 основных варианта:
1) Прописать в каком-нибудь диалоге B_GiveInvItems(self,other,ItRu_BBTrollTP,1); - как это сделать, см. сами.
2) Вставить руну в сам игровой мир в точку NW_TROLLAREA_PATH_78 (или другую) при помощи Wld_InsertItem(ItRu_BBTrollTP,"NW_TROLLAREA_PATH_78"); Сделать это можно как в диалоге, так и во время смены миров (файлы B_Enter_ТакойтоWorld). Детали см. сами.
Этап 9. Сохраняем скрипты, компилируем скрипты, запаковываем мод. Подразумевается то же, что и в п. 0, посему здесь не рассматривается.
Вложения
-
277,3 КБ Просмотров: 349
-
147,4 КБ Просмотров: 334
-
373,9 КБ Просмотров: 315
-
102,3 КБ Просмотров: 283
Последнее редактирование модератором:
-
10
- Показать все