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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

    Не ленитесь, голосуйте в этой теме за тех форумчан, которые по вашему мнению больше всех проявили себя в этом году
    По желанию, аргументировать свой выбор можете в теме обсуждения голосования.

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

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625
КАК расширить диапазон сепаратор_хум?
Увеличиваешь вот это число
1622116352478.png
с 16 на сколько тебе нужно, т.е. еще на +3 = 19
Проставляешь ниже следующим так же на +3...
Чтобы в итоге GIM_MAX у тебя был равен 69...
 

LastDragon

Участник форума
Регистрация
5 Июл 2017
Сообщения
18
Благодарности
1
Баллы
155
Увеличиваешь вот это число
с 16 на сколько тебе нужно, т.е. еще на +3 = 19
Проставляешь ниже следующим так же на +3...
Чтобы в итоге GIM_MAX у тебя был равен 69...

А новые гильдии перед сепаратор хум, верно?
Screenshot_3.png
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625
LastDragon, Ну вот)))
Правильно заданый вопрос, содержит в себе половину ответа )))
Немного завел тебя в заблюждение, извини.
B_InitGuildAttitudes - пуста, в принципе если хочешь можешь конечно с ней побаловаться, по аналогии с нижесказанной.
А так есть функция B_InitMonsterAttitudes, но ониа только для сепаратора, и монстров. А т.к. у тебя новые гильдии выше сепаратора, то и у них уже все прописано как нужно.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Это немного не правильно, потому что ты сдвигаешь гильдии монстров, (Это же ведь чисто для просмотра, оно закодировано в движке) из-за чего игроки в будущем могут увидеть приколы.
И да, это же просто
По мне оптимальный вариант сделан в моде Ксерес.
Если интересно.
Полностью обнуляется массив TXT_GUILDS
Оставляем лишь
var string TXT_GUILDS[GIL_MAX];

Дальше создаем функцию, которая будет назначать в соответствующую строку свое название и вызываем её в циклической функции или триггер-скрипте:
Daedalus:
FUNC VOID SetGuild()
{
    TXT_GUILDS[0] = "Без гильдии"; //GIL_NONE
    if (Mod_Gilde == 1) //GIL_PAL
    {
        TXT_GUILDS[1] = "Ополчение";
    }
    else if (Mod_Gilde == 2)
    {
        TXT_GUILDS[1] = "Рыцарь";
    }
    else if (Mod_Gilde == 3)
    {
        TXT_GUILDS[1] = "Паладин";
    }
    else
    {
        TXT_GUILDS[1] = "Неизвестный";
    };
    if (Mod_Gilde == 4) //GIL_MIL
    {
        TXT_GUILDS[2] = "Наемник";
    }
    else if (Mod_Gilde == 19)
    {
        TXT_GUILDS[2] = "Охотник на орков";
    }
    else if (Mod_Gilde == 5)
    {
        TXT_GUILDS[2] = "Охотник на драконов";
    };
    if (Mod_Gilde == 6) //GIL_VLK
    {
        TXT_GUILDS[3] = "Послушник огня";
    }
    else if (Mod_Gilde == 7)
    {
        TXT_GUILDS[3] = "Маг огня";
    }
    else if (Mod_Gilde == 8)
    {
        TXT_GUILDS[3] = "Слуга ордена";
    };
    if (Mod_Gilde == 12) //GIL_KDF
    {
        TXT_GUILDS[4] = "Черный послушник";
    }
    else if (Mod_Gilde == 13)
    {
        TXT_GUILDS[4] = "Черный маг";
    }
    else if (Mod_Gilde == 15)
    {
        TXT_GUILDS[4] = "Черный воин";
    }
    else if (Mod_Gilde == 14)
    {
        TXT_GUILDS[4] = "Призыватель демонов";
    }
    else if (Mod_Gilde == 16)
    {
        TXT_GUILDS[4] = "Рыцарь демонов";
    };
    if (Mod_Gilde == 9) //GIL_NOV
    {
        TXT_GUILDS[5] = "Послушник Воды";
    }
    else if (Mod_Gilde == 10)
    {
        TXT_GUILDS[5] = "Маг Воды";
    }
    else if (Mod_Gilde == 17)
    {
        TXT_GUILDS[5] = "Воин воды";
    }
    else if (Mod_Gilde == 11)
    {
        TXT_GUILDS[5] = "Судья";
    }
    else if (Mod_Gilde == 18)
    {
        TXT_GUILDS[5] = "Страж";
    };
    TXT_GUILDS[6] = ""; //GIL_DJG
    TXT_GUILDS[7] = ""; //GIL_SLD
    TXT_GUILDS[8] = ""; //GIL_BAU
    TXT_GUILDS[9] = ""; //GIL_BDT
    TXT_GUILDS[10] = ""; //GIL_STRF
    TXT_GUILDS[11] = "Зомби"; //GIL_DMT
    TXT_GUILDS[12] = ""; //GIL_OUT
    TXT_GUILDS[13] = ""; //GIL_PIR
    TXT_GUILDS[14] = ""; //GIL_KDW
    TXT_GUILDS[15] = "";
    TXT_GUILDS[16] = ""; //Gil_Seperator_Hum
    TXT_GUILDS[17] = "Мясной жук";
    TXT_GUILDS[18] = "Овца";
    TXT_GUILDS[19] = "Гоблин";
    TXT_GUILDS[20] = "Скелет-гоблина";
    TXT_GUILDS[21] = "Вызванный скелет-гоблина";
    TXT_GUILDS[22] = "Падальщик";
    TXT_GUILDS[23] = "Гигантская крыса";
    TXT_GUILDS[24] = "Полевой хищник";
    TXT_GUILDS[25] = "Кровавая муха";
    TXT_GUILDS[26] = "Ящер";
    TXT_GUILDS[27] = "Волк";
    TXT_GUILDS[28] = "Вызванный волк";
    TXT_GUILDS[29] = "Краулер";
    TXT_GUILDS[30] = "Луркер";
    TXT_GUILDS[31] = "Скелет";
    TXT_GUILDS[32] = "Вызванный скелет";
    TXT_GUILDS[33] = "Скелет-маг";
    TXT_GUILDS[34] = "Зомби";
    TXT_GUILDS[35] = "Снеппер";
    TXT_GUILDS[36] = "Мракорис";
    TXT_GUILDS[37] = "Мракорис-скелет";
    TXT_GUILDS[38] = "Гарпия";
    TXT_GUILDS[39] = "Каменный голем";
    TXT_GUILDS[40] = "Огненный голем";
    TXT_GUILDS[41] = "Ледяной голем";
    TXT_GUILDS[42] = "Вызванный голем";
    TXT_GUILDS[43] = "Демон";
    TXT_GUILDS[44] = "Вызванный демон";
    TXT_GUILDS[45] = "Тролль";
    TXT_GUILDS[46] = "Болотная акула";
    TXT_GUILDS[47] = "Дракон";
    TXT_GUILDS[48] = "Кротокрыс";
    TXT_GUILDS[49] = "Аллигатор";
    TXT_GUILDS[50] = "Болотный голем";
    TXT_GUILDS[51] = "Каменный страж";
    TXT_GUILDS[52] = "Гаргулья?";
    TXT_GUILDS[53] = "Артефакт";
    TXT_GUILDS[54] = "Вызванный каменный страж";
    TXT_GUILDS[55] = "Вызванный зомби";
    TXT_GUILDS[56] = "СВОБОДНО";
    TXT_GUILDS[57] = "СВОБОДНО";
    TXT_GUILDS[58] = "Орк-сепаратор";
    TXT_GUILDS[59] = "Орк";
    TXT_GUILDS[60] = "Орк-друг";
    TXT_GUILDS[61] = "Орк-нежить";
    TXT_GUILDS[62] = "Человек-ящер";
    TXT_GUILDS[63] = "СВОБОДНО";
    TXT_GUILDS[64] = "СВОБОДНО";
    TXT_GUILDS[65] = "СВОБОДНО";
};

Естественно не забывая дополнить возможности для новых гильдии добавив нужные исправления Mod_Gilde


Человеку выше я бы порекомендовал начать с азов, добавить нового NPC, отредактировать старого, написать диалог и пр.
 

LastDragon

Участник форума
Регистрация
5 Июл 2017
Сообщения
18
Благодарности
1
Баллы
155
LastDragon, Ну вот)))
Правильно заданый вопрос, содержит в себе половину ответа )))
Немного завел тебя в заблюждение, извини.
B_InitGuildAttitudes - пуста, в принципе если хочешь можешь конечно с ней побаловаться, по аналогии с нижесказанной.
А так есть функция B_InitMonsterAttitudes, но ониа только для сепаратора, и монстров. А т.к. у тебя новые гильдии выше сепаратора, то и у них уже все прописано как нужно.

А расширять Guilds вообще нужно?
Пост автоматически объединён:

Это немного не правильно, потому что ты сдвигаешь гильдии монстров, из-за чего игроки в будущем могут увидеть приколы.
По мне оптимальный вариант сделан в моде Ксерес.
Если интересно.
Полностью обнуляется массив TXT_GUILDS
Оставляем лишь
var string TXT_GUILDS[GIL_MAX];

Дальше создаем функцию, которая будет назначать в соответствующую строку свое название и вызываем её в циклической функции или триггер-скрипте:
Daedalus:
FUNC VOID SetGuild()
{
    TXT_GUILDS[0] = "Без гильдии"; //GIL_NONE
    if (Mod_Gilde == 1) //GIL_PAL
    {
        TXT_GUILDS[1] = "Ополчение";
    }
    else if (Mod_Gilde == 2)
    {
        TXT_GUILDS[1] = "Рыцарь";
    }
    else if (Mod_Gilde == 3)
    {
        TXT_GUILDS[1] = "Паладин";
    }
    else
    {
        TXT_GUILDS[1] = "Неизвестный";
    };
    if (Mod_Gilde == 4) //GIL_MIL
    {
        TXT_GUILDS[2] = "Наемник";
    }
    else if (Mod_Gilde == 19)
    {
        TXT_GUILDS[2] = "Охотник на орков";
    }
    else if (Mod_Gilde == 5)
    {
        TXT_GUILDS[2] = "Охотник на драконов";
    };
    if (Mod_Gilde == 6) //GIL_VLK
    {
        TXT_GUILDS[3] = "Послушник огня";
    }
    else if (Mod_Gilde == 7)
    {
        TXT_GUILDS[3] = "Маг огня";
    }
    else if (Mod_Gilde == 8)
    {
        TXT_GUILDS[3] = "Слуга ордена";
    };
    if (Mod_Gilde == 12) //GIL_KDF
    {
        TXT_GUILDS[4] = "Черный послушник";
    }
    else if (Mod_Gilde == 13)
    {
        TXT_GUILDS[4] = "Черный маг";
    }
    else if (Mod_Gilde == 15)
    {
        TXT_GUILDS[4] = "Черный воин";
    }
    else if (Mod_Gilde == 14)
    {
        TXT_GUILDS[4] = "Призыватель демонов";
    }
    else if (Mod_Gilde == 16)
    {
        TXT_GUILDS[4] = "Рыцарь демонов";
    };
    if (Mod_Gilde == 9) //GIL_NOV
    {
        TXT_GUILDS[5] = "Послушник Воды";
    }
    else if (Mod_Gilde == 10)
    {
        TXT_GUILDS[5] = "Маг Воды";
    }
    else if (Mod_Gilde == 17)
    {
        TXT_GUILDS[5] = "Воин воды";
    }
    else if (Mod_Gilde == 11)
    {
        TXT_GUILDS[5] = "Судья";
    }
    else if (Mod_Gilde == 18)
    {
        TXT_GUILDS[5] = "Страж";
    };
    TXT_GUILDS[6] = ""; //GIL_DJG
    TXT_GUILDS[7] = ""; //GIL_SLD
    TXT_GUILDS[8] = ""; //GIL_BAU
    TXT_GUILDS[9] = ""; //GIL_BDT
    TXT_GUILDS[10] = ""; //GIL_STRF
    TXT_GUILDS[11] = "Зомби"; //GIL_DMT
    TXT_GUILDS[12] = ""; //GIL_OUT
    TXT_GUILDS[13] = ""; //GIL_PIR
    TXT_GUILDS[14] = ""; //GIL_KDW
    TXT_GUILDS[15] = "";
    TXT_GUILDS[16] = ""; //Gil_Seperator_Hum
    TXT_GUILDS[17] = "Мясной жук";
    TXT_GUILDS[18] = "Овца";
    TXT_GUILDS[19] = "Гоблин";
    TXT_GUILDS[20] = "Скелет-гоблина";
    TXT_GUILDS[21] = "Вызванный скелет-гоблина";
    TXT_GUILDS[22] = "Падальщик";
    TXT_GUILDS[23] = "Гигантская крыса";
    TXT_GUILDS[24] = "Полевой хищник";
    TXT_GUILDS[25] = "Кровавая муха";
    TXT_GUILDS[26] = "Ящер";
    TXT_GUILDS[27] = "Волк";
    TXT_GUILDS[28] = "Вызванный волк";
    TXT_GUILDS[29] = "Краулер";
    TXT_GUILDS[30] = "Луркер";
    TXT_GUILDS[31] = "Скелет";
    TXT_GUILDS[32] = "Вызванный скелет";
    TXT_GUILDS[33] = "Скелет-маг";
    TXT_GUILDS[34] = "Зомби";
    TXT_GUILDS[35] = "Снеппер";
    TXT_GUILDS[36] = "Мракорис";
    TXT_GUILDS[37] = "Мракорис-скелет";
    TXT_GUILDS[38] = "Гарпия";
    TXT_GUILDS[39] = "Каменный голем";
    TXT_GUILDS[40] = "Огненный голем";
    TXT_GUILDS[41] = "Ледяной голем";
    TXT_GUILDS[42] = "Вызванный голем";
    TXT_GUILDS[43] = "Демон";
    TXT_GUILDS[44] = "Вызванный демон";
    TXT_GUILDS[45] = "Тролль";
    TXT_GUILDS[46] = "Болотная акула";
    TXT_GUILDS[47] = "Дракон";
    TXT_GUILDS[48] = "Кротокрыс";
    TXT_GUILDS[49] = "Аллигатор";
    TXT_GUILDS[50] = "Болотный голем";
    TXT_GUILDS[51] = "Каменный страж";
    TXT_GUILDS[52] = "Гаргулья?";
    TXT_GUILDS[53] = "Артефакт";
    TXT_GUILDS[54] = "Вызванный каменный страж";
    TXT_GUILDS[55] = "Вызванный зомби";
    TXT_GUILDS[56] = "СВОБОДНО";
    TXT_GUILDS[57] = "СВОБОДНО";
    TXT_GUILDS[58] = "Орк-сепаратор";
    TXT_GUILDS[59] = "Орк";
    TXT_GUILDS[60] = "Орк-друг";
    TXT_GUILDS[61] = "Орк-нежить";
    TXT_GUILDS[62] = "Человек-ящер";
    TXT_GUILDS[63] = "СВОБОДНО";
    TXT_GUILDS[64] = "СВОБОДНО";
    TXT_GUILDS[65] = "СВОБОДНО";
};

Естественно не забывая дополнить возможности для новых гильдии добавив нужные исправления Mod_Gilde


Человеку выше я бы порекомендовал начать с азов, добавить нового NPC, отредактировать старого, написать диалог и пр.

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

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625
N1kX, Вот что я и забыл)))
В принципе такой вариант тоже подходит, но когда я расширял до 100 гильдий - ни каких приколов не ловаил, потому, что все делал правиьно)))
А забыл я про text.d файл, в нем тоже нужно делать расширения...
А расширять Guilds вообще нужно?
Если надо, то да.
 

LastDragon

Участник форума
Регистрация
5 Июл 2017
Сообщения
18
Благодарности
1
Баллы
155
N1kX, Вот что я и забыл)))
В принципе такой вариант тоже подходит, но когда я расширял до 100 гильдий - ни каких приколов не ловаил, потому, что все делал правиьно)))
А забыл я про text.d файл, в нем тоже нужно делать расширения...

Если надо, то да.
В текстовом расширял, дописывал гильдии. В общем, попробую оба варианта.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
В принципе такой вариант тоже подходит, но когда я расширял до 100 гильдий - ни каких приколов не ловаил, потому, что все делал правиьно)))
Не знаю, игра тебе прямо говорит, что ты вылез и поломал все :)
00:08 Warn: 0 U: GUILDS:Guild-attitude-table size mismatch : Size has to be 66 .... <zError.cpp,#474>
А то, что работает визуально - это лишь на первый взгляд
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625
N1kX, Ну да, визуально все было норм.
Судя из ошибки, ползем в файл guilds.d
Дописываем к каждой строке, по столько ATT_X, сколько добавили новых гильдий. + дописываем столько строк, сколько новых гильдий было создано.
Так же не забываем про количество, указанное в GIL_ATTITUDES[256]
т.е. если допустим, берем наш пример с тремя новыми гильдиями, константа должна выглядеть примерно вот так:
Daedalus:
const int TAB_ANZAHL = 343;

const int GIL_ATTITUDES[343] =
{
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_NEUTRAL,ATT_HOSTILE,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL
};
Вот честно, что такое const int TAB_ANZAHL = 255(как в оригинале); я не знаю, по этому в моем примере его тоже увеличил.
 
Последнее редактирование:

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
N1kX, Ну да, визуально все было норм.
Судя из ошибки, ползем в файл guilds.d
Дописываем к каждой строке, по столько ATT_X, сколько добавили новых гильдий. + дописываем столько строк, сколько новых гильдий было создано.
Так же не забываем про количество, указанное в GIL_ATTITUDES[256]
т.е. если допустим, берем наш пример с тремя новыми гильдиями, константа должна выглядеть вот так:

В моде, откуда я взял это сообщение все сделано правильно, но движок так не считает.
Сейчас при наличии Юни или опытного скриптера на Ikarus они могут сделать свой c_Gilvalues, если нужно 100500 гильдии
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.641
Баллы
625
Все здорово конечно, но в самом движке при этом ничего не меняется. Константы там определены отдельно от скриптов и логика некоторых гильдий тоже строго определена. Из особо явных ошибок тупого сдвига сепаратора - это несоответствие требуемых ключей анимаций и ключей в mds. Так что в хересе сделано грамотно, что гильдии объединены в группы, а различаются на уровне аивара. Движок конечно тоже можно поправить, но моя имха нахрен не надо.
 

LastDragon

Участник форума
Регистрация
5 Июл 2017
Сообщения
18
Благодарности
1
Баллы
155
N1kX, Ну да, визуально все было норм.
Судя из ошибки, ползем в файл guilds.d
Дописываем к каждой строке, по столько ATT_X, сколько добавили новых гильдий. + дописываем столько строк, сколько новых гильдий было создано.
Так же не забываем про количество, указанное в GIL_ATTITUDES[256]
т.е. если допустим, берем наш пример с тремя новыми гильдиями, константа должна выглядеть примерно вот так:
Daedalus:
const int TAB_ANZAHL = 343;

const int GIL_ATTITUDES[343] =
{
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_NEUTRAL,ATT_HOSTILE,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
    ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL
};
Вот честно, что такое const int TAB_ANZAHL = 255(как в оригинале); я не знаю, по этому в моем примере его тоже увеличил.

TAB_ANZAHL = 256 - мне казалось, это общее значение соотношений. Т.е. 16 гильдий оригинала, 16*16=256
Пост автоматически объединён:

Это немного не правильно, потому что ты сдвигаешь гильдии монстров, (Это же ведь чисто для просмотра, оно закодировано в движке) из-за чего игроки в будущем могут увидеть приколы.
И да, это же просто
По мне оптимальный вариант сделан в моде Ксерес.
Если интересно.
Полностью обнуляется массив TXT_GUILDS
Оставляем лишь
var string TXT_GUILDS[GIL_MAX];

Дальше создаем функцию, которая будет назначать в соответствующую строку свое название и вызываем её в циклической функции или триггер-скрипте:
Daedalus:
FUNC VOID SetGuild()
{
    TXT_GUILDS[0] = "Без гильдии"; //GIL_NONE
    if (Mod_Gilde == 1) //GIL_PAL
    {
        TXT_GUILDS[1] = "Ополчение";
    }
    else if (Mod_Gilde == 2)
    {
        TXT_GUILDS[1] = "Рыцарь";
    }
    else if (Mod_Gilde == 3)
    {
        TXT_GUILDS[1] = "Паладин";
    }
    else
    {
        TXT_GUILDS[1] = "Неизвестный";
    };
    if (Mod_Gilde == 4) //GIL_MIL
    {
        TXT_GUILDS[2] = "Наемник";
    }
    else if (Mod_Gilde == 19)
    {
        TXT_GUILDS[2] = "Охотник на орков";
    }
    else if (Mod_Gilde == 5)
    {
        TXT_GUILDS[2] = "Охотник на драконов";
    };
    if (Mod_Gilde == 6) //GIL_VLK
    {
        TXT_GUILDS[3] = "Послушник огня";
    }
    else if (Mod_Gilde == 7)
    {
        TXT_GUILDS[3] = "Маг огня";
    }
    else if (Mod_Gilde == 8)
    {
        TXT_GUILDS[3] = "Слуга ордена";
    };
    if (Mod_Gilde == 12) //GIL_KDF
    {
        TXT_GUILDS[4] = "Черный послушник";
    }
    else if (Mod_Gilde == 13)
    {
        TXT_GUILDS[4] = "Черный маг";
    }
    else if (Mod_Gilde == 15)
    {
        TXT_GUILDS[4] = "Черный воин";
    }
    else if (Mod_Gilde == 14)
    {
        TXT_GUILDS[4] = "Призыватель демонов";
    }
    else if (Mod_Gilde == 16)
    {
        TXT_GUILDS[4] = "Рыцарь демонов";
    };
    if (Mod_Gilde == 9) //GIL_NOV
    {
        TXT_GUILDS[5] = "Послушник Воды";
    }
    else if (Mod_Gilde == 10)
    {
        TXT_GUILDS[5] = "Маг Воды";
    }
    else if (Mod_Gilde == 17)
    {
        TXT_GUILDS[5] = "Воин воды";
    }
    else if (Mod_Gilde == 11)
    {
        TXT_GUILDS[5] = "Судья";
    }
    else if (Mod_Gilde == 18)
    {
        TXT_GUILDS[5] = "Страж";
    };
    TXT_GUILDS[6] = ""; //GIL_DJG
    TXT_GUILDS[7] = ""; //GIL_SLD
    TXT_GUILDS[8] = ""; //GIL_BAU
    TXT_GUILDS[9] = ""; //GIL_BDT
    TXT_GUILDS[10] = ""; //GIL_STRF
    TXT_GUILDS[11] = "Зомби"; //GIL_DMT
    TXT_GUILDS[12] = ""; //GIL_OUT
    TXT_GUILDS[13] = ""; //GIL_PIR
    TXT_GUILDS[14] = ""; //GIL_KDW
    TXT_GUILDS[15] = "";
    TXT_GUILDS[16] = ""; //Gil_Seperator_Hum
    TXT_GUILDS[17] = "Мясной жук";
    TXT_GUILDS[18] = "Овца";
    TXT_GUILDS[19] = "Гоблин";
    TXT_GUILDS[20] = "Скелет-гоблина";
    TXT_GUILDS[21] = "Вызванный скелет-гоблина";
    TXT_GUILDS[22] = "Падальщик";
    TXT_GUILDS[23] = "Гигантская крыса";
    TXT_GUILDS[24] = "Полевой хищник";
    TXT_GUILDS[25] = "Кровавая муха";
    TXT_GUILDS[26] = "Ящер";
    TXT_GUILDS[27] = "Волк";
    TXT_GUILDS[28] = "Вызванный волк";
    TXT_GUILDS[29] = "Краулер";
    TXT_GUILDS[30] = "Луркер";
    TXT_GUILDS[31] = "Скелет";
    TXT_GUILDS[32] = "Вызванный скелет";
    TXT_GUILDS[33] = "Скелет-маг";
    TXT_GUILDS[34] = "Зомби";
    TXT_GUILDS[35] = "Снеппер";
    TXT_GUILDS[36] = "Мракорис";
    TXT_GUILDS[37] = "Мракорис-скелет";
    TXT_GUILDS[38] = "Гарпия";
    TXT_GUILDS[39] = "Каменный голем";
    TXT_GUILDS[40] = "Огненный голем";
    TXT_GUILDS[41] = "Ледяной голем";
    TXT_GUILDS[42] = "Вызванный голем";
    TXT_GUILDS[43] = "Демон";
    TXT_GUILDS[44] = "Вызванный демон";
    TXT_GUILDS[45] = "Тролль";
    TXT_GUILDS[46] = "Болотная акула";
    TXT_GUILDS[47] = "Дракон";
    TXT_GUILDS[48] = "Кротокрыс";
    TXT_GUILDS[49] = "Аллигатор";
    TXT_GUILDS[50] = "Болотный голем";
    TXT_GUILDS[51] = "Каменный страж";
    TXT_GUILDS[52] = "Гаргулья?";
    TXT_GUILDS[53] = "Артефакт";
    TXT_GUILDS[54] = "Вызванный каменный страж";
    TXT_GUILDS[55] = "Вызванный зомби";
    TXT_GUILDS[56] = "СВОБОДНО";
    TXT_GUILDS[57] = "СВОБОДНО";
    TXT_GUILDS[58] = "Орк-сепаратор";
    TXT_GUILDS[59] = "Орк";
    TXT_GUILDS[60] = "Орк-друг";
    TXT_GUILDS[61] = "Орк-нежить";
    TXT_GUILDS[62] = "Человек-ящер";
    TXT_GUILDS[63] = "СВОБОДНО";
    TXT_GUILDS[64] = "СВОБОДНО";
    TXT_GUILDS[65] = "СВОБОДНО";
};

Естественно не забывая дополнить возможности для новых гильдии добавив нужные исправления Mod_Gilde


Человеку выше я бы порекомендовал начать с азов, добавить нового NPC, отредактировать старого, написать диалог и пр.

А можно еще немного подробнее? Как бы, азы по мануалам я прошел... А вот как правильно добавить новые гильдии нигде не написано. Максимум - изменение имеющихся.
Вообще, я бы с радостью поковырялся в скриптах Ксереса, но раз в открытом доступе исходников скриптов нет, придется приставать ко всем с вопросами :rolleyes:
Можно пример для наглядности, что должно быть прописано в Mod_Gilde?
 
Последнее редактирование:

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Mod_Gildeэто просто переменная, числового типа, которая назначается у какого-нибудь человека, который посвящает тебя в гильдию.
Например
Mod_Gilde == 4
В моде Возвращение ксереса мы становимся наемником в разговоре с Ларесом.
Daedalus:
FUNC VOID Info_Mod_Lares_Aufnahme_Ja()
{
    Spine_UnlockAchievement(SPINE_ACHIEVEMENT_53);
    Spine_UnlockAchievement(SPINE_ACHIEVEMENT_55);
    Spine_UnlockAchievement(SPINE_ACHIEVEMENT_58);
      
    AI_Output(hero, self, "Info_Mod_Lares_Aufnahme_Ja_15_00"); //Я хочу присоединиться к вам.
  
    AI_Output(self, hero, "Info_Mod_Lares_Aufnahme_Ja_37_01"); //Если тебе нужно оружие, спроси Беннета.
    AI_Output(self, hero, "Info_Mod_Lares_Aufnahme_Ja_37_02"); //Вот твои доспехи.

    CreateInvItems    (self, ITAR_SLD_L, 1);
    B_GiveInvItems    (self, hero, ITAR_SLD_L, 1);

    AI_UnequipArmor    (hero);
    AI_EquipArmor    (hero, ItAr_SLD_L);
  
    AI_Output(self, hero, "Info_Mod_Lares_Aufnahme_Ja_14_03"); //Но не заходи в город в доспехах, иначе ополчение не пропустит тебя.
  
    if (Npc_KnowsInfo(hero, Info_Mod_Lee_WieStehts))
    {
        Log_CreateTopic    (TOPIC_MOD_SLD_ORKJAEGER, LOG_MISSION);
        B_SetTopicStatus    (TOPIC_MOD_SLD_ORKJAEGER, LOG_RUNNING);
        B_LogEntry_NMore    (TOPIC_MOD_GILDENAUFNAHME, TOPIC_MOD_SÖLDNER, TOPIC_MOD_SLD_ORKJAEGER, "Я теперь наемник.", "Я теперь наемник.", "Сильвио решает, кто может вступить в охотники на орков.");
    }
    else
    {
        B_LogEntry_More    (TOPIC_MOD_GILDENAUFNAHME, TOPIC_MOD_SÖLDNER, "Я теперь наемник.", "Я теперь наемник.");
    };

    B_SetTopicStatus    (TOPIC_MOD_GILDENAUFNAHME, LOG_SUCCESS);
    B_SetTopicStatus    (TOPIC_MOD_SÖLDNER, LOG_SUCCESS);

    B_SetTopicStatus    (TOPIC_MOD_FEUERMAGIER, LOG_FAILED);
    B_SetTopicStatus    (TOPIC_MOD_WASSERMAGIER, LOG_FAILED);
    B_SetTopicStatus    (TOPIC_MOD_MILIZ, LOG_FAILED);
    B_SetTopicStatus    (TOPIC_MOD_DAEMONENBESCHWOERER, LOG_FAILED);
  
    Mod_Gilde = 4; //назначение нашей переменной, чтобы изменилось имя в окне характеристик

    Snd_Play ("LEVELUP");

    B_GivePlayerXP    (400);

    hero.guild = GIL_MIL; //назначение нашей гильдии, которое будет неизменно
    Npc_SetTrueGuild    (hero, GIL_MIL);  //назначение нашей гильдии, которое будет неизменно

    Monster_Max += 6;

    Info_ClearChoices    (Info_Mod_Lares_Aufnahme);
};

В этом примере есть плохой косяк - не стоит называть переменные/функции со спецсимволами, как TOPIC_MOD_SÖLDNER, лучше бы назвали авторы
TOPIC_MOD_SÖLDNER -> TOPIC_MOD_SOELDNER
 
Последнее редактирование:

LastDragon

Участник форума
Регистрация
5 Июл 2017
Сообщения
18
Благодарности
1
Баллы
155
Mod_Gildeэто просто переменная, числового типа, которая назначается у какого-нибудь человека, который посвящает тебя в гильдию.
Например
Mod_Gilde == 4
В моде Возвращение ксереса мы становимся наемником в разговоре с Ларесом.
Daedalus:
FUNC VOID Info_Mod_Lares_Aufnahme_Ja()
{
    Spine_UnlockAchievement(SPINE_ACHIEVEMENT_53);
    Spine_UnlockAchievement(SPINE_ACHIEVEMENT_55);
    Spine_UnlockAchievement(SPINE_ACHIEVEMENT_58);
     
    AI_Output(hero, self, "Info_Mod_Lares_Aufnahme_Ja_15_00"); //Я хочу присоединиться к вам.
 
    AI_Output(self, hero, "Info_Mod_Lares_Aufnahme_Ja_37_01"); //Если тебе нужно оружие, спроси Беннета.
    AI_Output(self, hero, "Info_Mod_Lares_Aufnahme_Ja_37_02"); //Вот твои доспехи.

    CreateInvItems    (self, ITAR_SLD_L, 1);
    B_GiveInvItems    (self, hero, ITAR_SLD_L, 1);

    AI_UnequipArmor    (hero);
    AI_EquipArmor    (hero, ItAr_SLD_L);
 
    AI_Output(self, hero, "Info_Mod_Lares_Aufnahme_Ja_14_03"); //Но не заходи в город в доспехах, иначе ополчение не пропустит тебя.
 
    if (Npc_KnowsInfo(hero, Info_Mod_Lee_WieStehts))
    {
        Log_CreateTopic    (TOPIC_MOD_SLD_ORKJAEGER, LOG_MISSION);
        B_SetTopicStatus    (TOPIC_MOD_SLD_ORKJAEGER, LOG_RUNNING);
        B_LogEntry_NMore    (TOPIC_MOD_GILDENAUFNAHME, TOPIC_MOD_SÖLDNER, TOPIC_MOD_SLD_ORKJAEGER, "Я теперь наемник.", "Я теперь наемник.", "Сильвио решает, кто может вступить в охотники на орков.");
    }
    else
    {
        B_LogEntry_More    (TOPIC_MOD_GILDENAUFNAHME, TOPIC_MOD_SÖLDNER, "Я теперь наемник.", "Я теперь наемник.");
    };

    B_SetTopicStatus    (TOPIC_MOD_GILDENAUFNAHME, LOG_SUCCESS);
    B_SetTopicStatus    (TOPIC_MOD_SÖLDNER, LOG_SUCCESS);

    B_SetTopicStatus    (TOPIC_MOD_FEUERMAGIER, LOG_FAILED);
    B_SetTopicStatus    (TOPIC_MOD_WASSERMAGIER, LOG_FAILED);
    B_SetTopicStatus    (TOPIC_MOD_MILIZ, LOG_FAILED);
    B_SetTopicStatus    (TOPIC_MOD_DAEMONENBESCHWOERER, LOG_FAILED);
 
    Mod_Gilde = 4; //назначение нашей переменной, чтобы изменилось имя в окне характеристик

    Snd_Play ("LEVELUP");

    B_GivePlayerXP    (400);

    hero.guild = GIL_MIL; //назначение нашей гильдии, которое будет неизменно
    Npc_SetTrueGuild    (hero, GIL_MIL);  //назначение нашей гильдии, которое будет неизменно

    Monster_Max += 6;

    Info_ClearChoices    (Info_Mod_Lares_Aufnahme);
};

В этом примере есть плохой косяк - не стоит называть переменные/функции со спецсимволами, как TOPIC_MOD_SÖLDNER, лучше бы назвали авторы
TOPIC_MOD_SÖLDNER -> TOPIC_MOD_SOELDNER

Вроде все работает. Спасибо.
Но, на всякий случай, хотелось бы проверить правильность выполненных действий:

1. Из файла TEXT полностью удаляем блок TXT_GUILDS[66]
2. Там же прописываем var string TXT_GUILDS[GIL_MAX];
3. Создаем функцию, которая будет назначать в соответствующую строку свое название и вызываем её в циклической функции или триггер-скрипте.
4. Создаем глобальную переменную Mod_Gilde.

Все верно, или что-то упустил?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.641
Баллы
625
1. Из файла TEXT полностью удаляем блок TXT_GUILDS[66]
2. Там же прописываем var string TXT_GUILDS[GIL_MAX];
3. Создаем функцию, которая будет назначать в соответствующую строку свое название и вызываем её в циклической функции или триггер-скрипте.
4. Создаем глобальную переменную Mod_Gilde.

Все верно, или что-то упустил?
Оставь имена переменных в покое. Пусть массив хранит начальные значения строк.
А вот когда назначаешь персонажу следующую по рангу гильдию, тогда и переписываешь конкретную строку. Никаких триггер циклов!!!
Создай себе пачку функций типа:
Daedalus:
func void B_SetGuild(var C_Npc slf, var int guild_index, var int rank)
{
    slf.guild = guild_index;
    if (guild_index == GIL_MIL)
    {
        if (rank == 0)
        {
            TXT_GIILDS[guild_index] = "Ополчение";
        };

        if (rank == 1)
        {
            TXT_GIILDS[guild_index] = "Рыцарь";
        };
    };
    ....
};
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Все здорово конечно, но в самом движке при этом ничего не меняется. Константы там определены отдельно от скриптов и логика некоторых гильдий тоже строго определена. Из особо явных ошибок тупого сдвига сепаратора - это несоответствие требуемых ключей анимаций и ключей в mds. Так что в хересе сделано грамотно, что гильдии объединены в группы, а различаются на уровне аивара. Движок конечно тоже можно поправить, но моя имха нахрен не надо.

Аиварами удобнее...
 

LastDragon

Участник форума
Регистрация
5 Июл 2017
Сообщения
18
Благодарности
1
Баллы
155
Оставь имена переменных в покое. Пусть массив хранит начальные значения строк.
А вот когда назначаешь персонажу следующую по рангу гильдию, тогда и переписываешь конкретную строку. Никаких триггер циклов!!!
Создай себе пачку функций типа:
Daedalus:
func void B_SetGuild(var C_Npc slf, var int guild_index, var int rank)
{
    slf.guild = guild_index;
    if (guild_index == GIL_MIL)
    {
        if (rank == 0)
        {
            TXT_GIILDS[guild_index] = "Ополчение";
        };

        if (rank == 1)
        {
            TXT_GIILDS[guild_index] = "Рыцарь";
        };
    };
    ....
};

Я дииико извиняюсь, НО что-то пошло не так :(
Ошибки при компиляции:
GUILD_INDEX Ожидается целое число. Сделал так:
Daedalus:
func void SetGuild(var C_Npc slf, var int guild_index, var int rank)
{
    slf.guild = guild_index;
    if (guild_index == GIL_MIL)
    {
        if (rank == 0)
        {
            TXT_GUILDS[2] = "Test1";
        };
        if (rank == 1)
        {
            TXT_GUILDS[2] = "Test2";
        };
    };
};

При назначении переменной "rank" - ошибка компиляции, неизвестный идентификатор. Если объявлять эту переменную глобально - все компилится, но не работает. Т.е. гильдия по умолчанию - Ополчение...
В чем проблема?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Я дииико извиняюсь, НО что-то пошло не так :(
Ошибки при компиляции:
GUILD_INDEX Ожидается целое число. Сделал так:

При назначении переменной "rank" - ошибка компиляции, неизвестный идентификатор. Если объявлять эту переменную глобально - все компилится, но не работает. Т.е. гильдия по умолчанию - Ополчение...
В чем проблема?
Не надо ничего объявлять. В диалоге ты просто должен сделать так
SetGuild(hero,GIL_MIL, 1);

Тогда у тебя станет test2 в окне характеристик
 
Сверху Снизу