- Регистрация
- 24 Мар 2006
- Сообщения
- 9.900
- Благодарности
- 6.777
- Баллы
- 1.625
Увеличиваешь вот это числоКАК расширить диапазон сепаратор_хум?
Проставляешь ниже следующим так же на +3...
Чтобы в итоге GIM_MAX у тебя был равен 69...
Увеличиваешь вот это числоКАК расширить диапазон сепаратор_хум?
Увеличиваешь вот это число
с 16 на сколько тебе нужно, т.е. еще на +3 = 19
Проставляешь ниже следующим так же на +3...
Чтобы в итоге GIM_MAX у тебя был равен 69...
Да, все правильно.А новые гильдии перед сепаратор хум, верно?
Да, все правильно.
Где отношения гильдий друг к другу прописываются знаешь?
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] = "СВОБОДНО";
};
LastDragon, Ну вот)))
Правильно заданый вопрос, содержит в себе половину ответа )))
Немного завел тебя в заблюждение, извини.
B_InitGuildAttitudes - пуста, в принципе если хочешь можешь конечно с ней побаловаться, по аналогии с нижесказанной.
А так есть функция B_InitMonsterAttitudes, но ониа только для сепаратора, и монстров. А т.к. у тебя новые гильдии выше сепаратора, то и у них уже все прописано как нужно.
Это немного не правильно, потому что ты сдвигаешь гильдии монстров, из-за чего игроки в будущем могут увидеть приколы.
По мне оптимальный вариант сделан в моде Ксерес.
Если интересно.
Полностью обнуляется массив 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, отредактировать старого, написать диалог и пр.
Если надо, то да.А расширять Guilds вообще нужно?
В текстовом расширял, дописывал гильдии. В общем, попробую оба варианта.N1kX, Вот что я и забыл)))
В принципе такой вариант тоже подходит, но когда я расширял до 100 гильдий - ни каких приколов не ловаил, потому, что все делал правиьно)))
А забыл я про text.d файл, в нем тоже нужно делать расширения...
Если надо, то да.
Не знаю, игра тебе прямо говорит, что ты вылез и поломал всеВ принципе такой вариант тоже подходит, но когда я расширял до 100 гильдий - ни каких приколов не ловаил, потому, что все делал правиьно)))
GIL_ATTITUDES[256]
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
};
N1kX, Ну да, визуально все было норм.
Судя из ошибки, ползем в файл guilds.d
Дописываем к каждой строке, по столько ATT_X, сколько добавили новых гильдий. + дописываем столько строк, сколько новых гильдий было создано.
Так же не забываем про количество, указанное вGIL_ATTITUDES[256]
т.е. если допустим, берем наш пример с тремя новыми гильдиями, константа должна выглядеть вот так:
N1kX, Ну да, визуально все было норм.
Судя из ошибки, ползем в файл guilds.d
Дописываем к каждой строке, по столько ATT_X, сколько добавили новых гильдий. + дописываем столько строк, сколько новых гильдий было создано.
Так же не забываем про количество, указанное вGIL_ATTITUDES[256]
т.е. если допустим, берем наш пример с тремя новыми гильдиями, константа должна выглядеть примерно вот так:
Вот честно, что такое const int TAB_ANZAHL = 255(как в оригинале); я не знаю, по этому в моем примере его тоже увеличил.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 };
Это немного не правильно, потому что ты сдвигаешь гильдии монстров, (Это же ведь чисто для просмотра, оно закодировано в движке) из-за чего игроки в будущем могут увидеть приколы.
И да, это же просто
По мне оптимальный вариант сделан в моде Ксерес.
Если интересно.
Полностью обнуляется массив 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, отредактировать старого, написать диалог и пр.
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);
};
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.
Все верно, или что-то упустил?
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] = "Рыцарь";
};
};
....
};
Все здорово конечно, но в самом движке при этом ничего не меняется. Константы там определены отдельно от скриптов и логика некоторых гильдий тоже строго определена. Из особо явных ошибок тупого сдвига сепаратора - это несоответствие требуемых ключей анимаций и ключей в mds. Так что в хересе сделано грамотно, что гильдии объединены в группы, а различаются на уровне аивара. Движок конечно тоже можно поправить, но моя имха нахрен не надо.
Оставь имена переменных в покое. Пусть массив хранит начальные значения строк.
А вот когда назначаешь персонажу следующую по рангу гильдию, тогда и переписываешь конкретную строку. Никаких триггер циклов!!!
Создай себе пачку функций типа:
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] = "Рыцарь"; }; }; .... };
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";
};
};
};
Не надо ничего объявлять. В диалоге ты просто должен сделать такЯ дииико извиняюсь, НО что-то пошло не так
Ошибки при компиляции:
GUILD_INDEX Ожидается целое число. Сделал так:
При назначении переменной "rank" - ошибка компиляции, неизвестный идентификатор. Если объявлять эту переменную глобально - все компилится, но не работает. Т.е. гильдия по умолчанию - Ополчение...
В чем проблема?