• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык

Не стесняюсь спросить....

Scarecrow

Участник форума
Регистрация
11 Авг 2014
Сообщения
158
Благодарности
85
Баллы
220
Подскажите пожалуйста, как создать новую руну телепортации?
Вроде делаю так, как стандартные, а пишет - неопределенная функция. Надо еще что-то добавить или что?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.175
Благодарности
6.155
Баллы
1.565
Scarecrow, код бы посмотреть
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.175
Благодарности
6.155
Баллы
1.565
Scarecrow, и ошибку и код руны
 

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.771
Благодарности
557
Баллы
275
Scarecrow, код руны, блин. Полностью, что пишешь и куда вставляешь.
 

Scarecrow

Участник форума
Регистрация
11 Авг 2014
Сообщения
158
Благодарности
85
Баллы
220
Ну, создаю заклинание - spell_logic_teleport6.

func int spell_logic_teleport6(var int manainvested)
{
printdebugnpc(PD_MAGIC,"Spell_Logic_Teleport6");
if(manainvested >= SPL_SENDCAST_TELEPORT)
{
AI_Teleport(self,"GOLEM");
AI_PlayAni(self,"T_HEASHOOT_2_STAND");
return SPL_SENDCAST;
};
return SPL_NEXTLEVEL;
};

Потом иду в spell_processmana и пишу
if(Npc_GetActiveSpell(self) == SPL_TELEPORT6)
{
return spell_logic_teleport6(manainvested);
};

а потом в spell_processmana_release и пишу
if(Npc_GetActiveSpell(self) == SPL_TELEPORT6)
{
return SPL_SENDSTOP;
};


Все это пишу после скриптов оригинальных рун, в magic_intern добавил - const int SPL_TELEPORT6 = 59;
Еще не понимаю, как приписать текст этой руне, когда гг ее использует, в text.d как понимаю, но куда именно - не знаю.
Соусер ругается на то, что в spell_processmana написано.

Может, есть еще какой гайд по вставке нового заклинания, помимо того, что в разделе скриптинга?
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.175
Благодарности
6.155
Баллы
1.565
Scarecrow, сам код руны в каком файле прописываешь? Или новый файл создал?
 

Scarecrow

Участник форума
Регистрация
11 Авг 2014
Сообщения
158
Благодарности
85
Баллы
220
MEG@VOLT, ну да в AI/magic создал новый файл - spell_logic_teleport6.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.175
Благодарности
6.155
Баллы
1.565
MEG@VOLT, ну да в AI/magic создал новый файл - spell_logic_teleport6.
Ну вот и первая ошибка. Я так понимаю, ты новичек в этом - лучше в уже существующий файл с рунами пихай свою. Тогда ошибка пропадет.
А так посмотри на файл gothic.rsc вроде, точно не могу щас сказать, не у компа. Это тот файл, в котором все файлы прописаны. И посмотри последовательность каждого файла.
 

Scarecrow

Участник форума
Регистрация
11 Авг 2014
Сообщения
158
Благодарности
85
Баллы
220
MEG@VOLT, благодарю за подсказку. Ага, пока мало что понимаю. новенький я тут, правда) Тогда попробую так.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
printdebugnpc(PD_MAGIC,"Spell_Logic_Teleport6");
Для Г1 делаешь руну? Это тот момент, который неплохо бы указать сразу. По умолчанию здесь подразумевается, что речь идёт о платформе Г2.

const int SPL_TELEPORT6 = 59;
Используй одно из резервных значений. Например, попробуй прописать своё заклинание вместо const int SPL_NEW5 = 58;

Также в текстовом массиве TXT_SPELLS нужно прописать на соответствующем месте название заклинания, которое выводится на экран при его активации. В текстовом массиве spellFXInstanceNames пропиши название соответствующего заклинанию визуального эффекта. В текстовом массиве spellFXAniLetters пропиши код используемой для каста анимации.
 

Suleiman

Участник форума
Регистрация
23 Янв 2012
Сообщения
137
Благодарности
91
Баллы
190
Я занялся переводом Возвращения Ксереса, у меня есть исходники (только скрипты без миров) и возник вопрос как их собрать и что надо подменить, чтобы увидеть результаты перевода в игре?
В моде используется LeGo и Icarus и возможно это тоже требует учета каких-то нюансов.
Вначале я думал, что зашлю автору демку перевода получи бинарники и если со шрифтами, позициями слов все будет хорошо, то дальше дело техники. Потом оказалось, что будет гораздо больше моментов нуждающихся в перепроверке и такой способ не годится как постоянный. Автору я конечно написал, но он пока молчит, так что может здесь мне смогут помочь.
 

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.007
Благодарности
516
Баллы
350
Я занялся переводом Возвращения Ксереса, у меня есть исходники (только скрипты без миров) и возник вопрос как их собрать и что надо подменить, чтобы увидеть результаты перевода в игре?
В моде используется LeGo и Icarus и возможно это тоже требует учета каких-то нюансов.
Вначале я думал, что зашлю автору демку перевода получи бинарники и если со шрифтами, позициями слов все будет хорошо, то дальше дело техники. Потом оказалось, что будет гораздо больше моментов нуждающихся в перепроверке и такой способ не годится как постоянный. Автору я конечно написал, но он пока молчит, так что может здесь мне смогут помочь.
Ничто не мешает тебе запустит собственный мир игры, желательно пустой. А там уже смотри название предметов и вызывай НПС чтобы проверить диалоги
То есть по факту, берешь .ini от другого мода, прописывает там локацию пустую и запускаешь игру с уже имеющимися скриптами
 

Suleiman

Участник форума
Регистрация
23 Янв 2012
Сообщения
137
Благодарности
91
Баллы
190
Ничто не мешает тебе запустит собственный мир игры, желательно пустой. А там уже смотри название предметов и вызывай НПС чтобы проверить диалоги
То есть по факту, берешь .ini от другого мода, прописывает там локацию пустую и запускаешь игру с уже имеющимися скриптами

Разобрался, оказывается скрипты в моде лежат в отдельном mod архиве, их вполне можно подменять перепаковывать и видеть результат в игре.
 

Suleiman

Участник форума
Регистрация
23 Янв 2012
Сообщения
137
Благодарности
91
Баллы
190
Еще один вопрос возник, мне нужно добавить шрифты другого цвета, которые идут с модом, но в которых нет кириллицы. Нашел программу Font2Targa для экспорта шрифтов, которая делает то что мне нужно, но где взять ttf шрифтов готики с кириллицей, гугление находит только латиницу.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.274
Баллы
910
Еще один вопрос возник, мне нужно добавить шрифты другого цвета, которые идут с модом, но в которых нет кириллицы. Нашел программу Font2Targa для экспорта шрифтов, которая делает то что мне нужно, но где взять ttf шрифтов готики с кириллицей, гугление находит только латиницу.
Возьми оригинальные шритфы из русской версии лежат в textures.vdf/textures_addon.vdf
Покрась их в нужные цвета с помощью фотошопа/gimp
исходники в расширении tga гладешь в _work\data\textures
textures.vdf/textures_addon.vdf отключаешь, дописываешь им в расширении .d
Заходишь в игру, шрифты должны будут скомпилироваться, скомпилированные варианты из _work\data\textures\_compiled засовываешь в мод
Не хочешь париться? Просто забери русские шрифты из textures.vdf/textures_addon.vdf и закинь их в мод
Шрифты начинаются с font_....
 

Suleiman

Участник форума
Регистрация
23 Янв 2012
Сообщения
137
Благодарности
91
Баллы
190
Заходишь в игру, шрифты должны будут скомпилироваться, скомпилированные варианты из _work\data\textures\_compiled засовываешь в мод

Ничего не скомпилировалось, делал на textures_addon.vdf аддоне, все текстуры аддона в том числе фоновый экран пропали хотя я все что распаковал положил в _work\data\textures, после запуска игры в папке compiled пусто. Может на это систем пак влиять?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.274
Баллы
910
Ничего не скомпилировалось, делал на textures_addon.vdf аддоне, все текстуры аддона в том числе фоновый экран пропали хотя я все что распаковал положил в _work\data\textures, после запуска игры в папке compiled пусто. Может на это систем пак влиять?
После распаковки надо заблокировать оригинальный textures_addon.vdf. Если хоть где-то есть доступные текстуры в mod/vdf файлах компиляции новых не будет.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
В случае с Г2 сталкивался с тем, что движок не хотел компилировать текстуры карт, шрифтов и загрузочных экранов. У меня была версия без мод-стартера, возможно, это влияет. Компилировал текстуры Гоманом.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.274
Баллы
910
У цели заклинания макс. здоровье не меняет своего значения, хотя сила меняется исправно. Где-то есть косяк, о котором я не знаю видимо или хитрость.
Daedalus:
func void B_StopAltern()
{
    Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagic);
    Npc_ClearAIQueue(self);
    AI_Standup(self);
    if(!Npc_IsPlayer(self))
    {
        if(self.guild < GIL_SEPERATOR_HUM)
        {
            B_AssessDamage();
        }
        else
        {
            Npc_SetTempAttitude(self,ATT_HOSTILE);
        };
    };
};

func void ZS_Altern()
{
    //Npc_ClearAIQueue(self);
    //B_ClearPerceptions(self);
    self.attribute[ATR_HITPOINTS_MAX] = (self.attribute[ATR_HITPOINTS_MAX] - (self.attribute[ATR_HITPOINTS_MAX] % 2)) / 2;
    if(self.attribute[ATR_HITPOINTS] > self.attribute[ATR_HITPOINTS_MAX])
    {
        self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS_MAX];
    };
    self.attribute[ATR_STRENGTH] = (self.attribute[ATR_STRENGTH] - (self.attribute[ATR_STRENGTH] % 2)) / 2;
    self.aivar[AIV_ALTERN] = 1;
    AI_SetWalkMode(self,NPC_WALK);
};

func int ZS_Altern_Loop()
{
    if(self.aivar[AIV_ALTERN] == 1)
    {
        B_StopAltern();
        return LOOP_END;
    };
    return LOOP_CONTINUE;
};

func void ZS_Altern_END()
{
};
 
Сверху Снизу