Перейти к содержанию

Сообщения от Текущие вопросы и ответы по редактору карт

В ответ пользователю Эритроцитоз
Аватар пользователя
#2061
Никогда не писал комбат скрипты, подскажите, как сделать, чтобы, когда враг наносил урон существам игрока и убивал какое-то их кол-во, то на поле боя сразу респались существа (столько же, сколько убито) на стороне врага?
Мои карты:
Town
Готовится:Чума (40%), Сосиска(42%), Война Грааля
Аватар пользователя
#2062
У комбат скриптов есть одна неприятная особенность: про них практически нет информации в стандартном мануале. Я бы предложил использовать для обучения карты разрабов, на некоторых (как например в кампании 6, миссии 5) неплохие комбат скрипты. В частности, функция, отслеживающая движение существа защищающегося героя:
function DefenderCreatureMove(Unit)
Существ призывает вот эта функция (временное призывание):
SummonCreature(кому, какое, сколько, координаты)
Отслеживал количество смертей я бы с помощью
GetCreatureNumber(unitName);
Как-то так.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
#2063
Ment

GetCreatureNumber(unitName);
.
Как присвоить unitname?
И как вызваьт это отслеживание в определенный момент?
Мои карты:
Town
Готовится:Чума (40%), Сосиска(42%), Война Грааля
Аватар пользователя
#2064
Ну вот пример применения:
function DefenderCreatureMove(Unit)
if GetCreatureType(Unit)==CREATURE_SNOW_APE then
SummonCreature(DEFENDER, 54, GetCreatureNumber(Unit), 13,8);
end;
end;
Что произойдёт: каждый раз, когда у врага ход передастся йети, призовётся столько существ номер 54, сколько йети в стеке. Выглядит немного нестандартно для скриптового языка, но работает.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
#2065
у меня такой вопрос: я уже какой раз сталкиваюсь с так называемыми картами-модами, к сожалению, на моей версии 3.0 большинство не работают, но это ладно, так вот, насколько я понял, там игроками были созданы боссы - наверное, монстры с большими статами, изменены герои, и тп. Я тоже, конечно, пытался сделать нечто подобное, у меня вообще вся папка data изменена, у существ/героев изменено все, но к счастью на мои карты, скачанные через интернет, эти изменения не переносятся, т.к карта запрашивает именно те ресурсы игры, что находятся на компьютете, на котором она стоит.
Ну, это все предисловие, суть в следующем:
А как сделать так, чтобы переносить свои "моды" вместе с картой через интернет?
Заранее, спасибо.

Whatever
Аватар пользователя
#2066
Если моды создаются в редакторе, всё переносится вместе с картой автоматически. Если в блокноте, надо вносить всё в архив с картой вручную, с сохранением всей структуры папок.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
#2067
а что, собственно, значит, моды в редакторе? Ну...например, я поставил на карту героя, изменил ему shared, у меня он теперь выглядит как друид, допустим, я выкладываю карту в интернет, он и там будет такой же? И еще - если я потом создаю новую карту и ставлю этого героя, то он опять выглядит нормально, а при запуске игры все-равно превращается в друида.

Whatever
Аватар пользователя
#2068
Ну...например, я поставил на карту героя, изменил ему shared, у меня он теперь выглядит как друид, допустим, я выкладываю карту в интернет, он и там будет такой же?
Именно так.
И еще - если я потом создаю новую карту и ставлю этого героя, то он опять выглядит нормально, а при запуске игры все-равно превращается в друида.
Да, это тоже верно.
Вот, как это работает. При запуске игра ищет в определённых директориях все zip-архивы с определённым расширением. Сначала она просматривает папку data и загружает оттуда все архивы с расширением pak. Потом отправляется в Maps, грузит оттуда h5m-архивы. Аналогично в UserMODs, оттуда даже по-моему грузятся все архивы вне зависмости от расширения, ну архивы h5u точно. Если загрузилось два файла с одинаковым именем, в игру попадает самый новый (дата создания ближе к текущей). Ну вот и всё. Таким образом, если у Вас карта в папке Maps находится, она загрузится в базу данных уже при старте игры и все моды из этой карты будут действовать везде.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
#2069
ага. А как быть с созданием боссов? Я, конечно, могу в расширенном редакторе изменять существ, а вот создать своего у меня почему-то не получилось.

Whatever
Аватар пользователя
#2070
Да там всё просто: айди в игре ограниченно. Из не занятых есть только два, а именно айди йети и айди чёрного рыцаря (одного из двух). Их и можно менять спокойно.
Или качать мод ncf, там больше ID.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
#2071
черный рыцарь, кстати, я вообще не понимаю, за что его так обделили. А вот йети да, вместо них и сделаю.
Большое Вам спасибо, узнал много интересной информации!

Whatever
В ответ пользователю Heroist
#2072
Heroist
Я бы написал с помощью вспомогательных значений. Например, в самом начале карты поставил
a = 0;

На втором триггере сделал бы проверку
if a == 1 then
Ваша функция
Обнуление триггера
else
of a == 0 then
Текст: вы не посетили первую хижину
end;
end;

А в первой хижине написать вашу функцию, а в конце добавить
a = 1;

Если не понятно, могу потом написать подробный шаблон.

Попробовал сделать - всё получилось. Ещё раз спасибо. Только не совсем понятно: "а" - это вообще что такое? Я очень мало понимаю в программировании, разбираюсь немного только в css. Как эта "а" действует? Я попытался присвоить числовое значение другой букве - "b", но когда в скрипте и "а" и "b" редактор выдаёт ошибку и не сохраняет карту почему-то.

Добавлено через 48 секунд
Такой вопрос: мне нужно запустить диалог, а после - выдать текстовое сообщение, резюмирующие идею диалога, мол, "Вам нужно туда-то". Пишу:
StartAdvMapDialog("0");
MessageBox("путь\имя.txt");
Но это сообщение появляется не после диалога, а перед ним. Есть ли какая-то функция, чтобы разделить их по времени?
В ответ пользователю Эритроцитоз
Аватар пользователя
#2073
1- a -это переменная. Если писать b, так надо заменить все a на b.
2-Между диалогом и сообщением поставить sleep(10)
Мои карты:
Town
Готовится:Чума (40%), Сосиска(42%), Война Грааля
В ответ пользователю Олегарх
#2074
Олегарх
1- a -это переменная. Если писать b, так надо заменить все a на b.
2-Между диалогом и сообщением поставить sleep(10)

Коротко и ясно - благодарю)
В ответ пользователю Ment
Аватар пользователя
#2075
Ment
Ну вот пример применения:
function DefenderCreatureMove(Unit)
if GetCreatureType(Unit)==CREATURE_SNOW_APE then
SummonCreature(DEFENDER, 54, GetCreatureNumber(Unit), 13,8);
end;
end;
Что произойдёт: каждый раз, когда у врага ход передастся йети, призовётся столько существ номер 54, сколько йети в стеке. Выглядит немного нестандартно для скриптового языка, но работает.

Если у игрока может быть любое кол-во стеков существ и кол-во существ в стеках, то как в начале боя посчитать кол-во существ в каждом стеке у игрока, а потом для каждого из них производить сравнение?
Мои карты:
Town
Готовится:Чума (40%), Сосиска(42%), Война Грааля