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

Сообщения от Скрипты

Аватар пользователя
#1796
Ошибку оно точно вызывает.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
#1797
хм. жаль. значит, дело в другом...

Whatever
В ответ пользователю Heroist
Аватар пользователя
#1798
Heroist
хм. жаль. значит, дело в другом...
Почему жаль? Почему дело в другом? Дело как раз в этом. Число, вроде бы, не отрицательное, но все равно создает ошибку в таких функциях, как AddObjectCreatures, RemoveObjectCreatures, и т.п.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
#1799
ой) не дочитал до конца сообщение) я, в принципе, так и предполагал. ну, это дело поправимое. благодарю!


Whatever
Аватар пользователя
#1800
Люди добрые, помогите советом. Очень хочется установить сильную армию в сокровищницу гномов. Сделала объект неактивным, добавила тригер на касание с вопросом "готовы ли вы сразиться со стражей". В случае, если ответ да - должно выдаваться сообщение и происходить битва. Сообщение выдаёт, а вот битва не проиходит. Хотелось бы понять, почему. Буду благодарна за любую помощь, а то шаманить уже надоело.
dir = GetMapDataPath()
Trigger(OBJECT_TOUCH_TRIGGER, "tres1", "tres1F");
function tres1F (heroName)
number=GetCurrentPlayer();
QuestionBoxForPlayers(number,dir.."Capture.txt", "captureF", "nocaptureF");
end;
function captureF (heroName)
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."gettreasure.txt");
StartCombat (heroName, nil, 2,
CREATURE_THANE, 20,
CREATURE_WARLORD, 20, nil);
end;
function alreadyCapturedF (heroName)
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."alreadyCaptured.txt");
end;
function nocaptureF (heroName)
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."Coward.txt");
end;
SetObjectEnabled("tres1", false);
Аватар пользователя
#1801
Скрипт выглядит красиво, странно, что не работает. В консоль не заглядывали? И это... Сомневаюсь, что поможет, но я бы попробовал в конце StartCombat'a написать три nil'а ещё. Там просто есть такая штука, что по дефолту стоит значение переменной, которая идёт первой в функции, как бы из-за этого не было глюка, что обязательная переменная не выставлена, а дефолтная выставлена таким образом...
 

К А
Стикеры GBF в Telegram
В ответ пользователю metufona
Аватар пользователя
#1802
metufona
Люди добрые, помогите советом. Очень хочется установить сильную армию в сокровищницу гномов. Сделала объект неактивным, добавила тригер на касание с вопросом "готовы ли вы сразиться со стражей". В случае, если ответ да - должно выдаваться сообщение и происходить битва. Сообщение выдаёт, а вот битва не проиходит. Хотелось бы понять, почему. Буду благодарна за любую помощь, а то шаманить уже надоело.
dir = GetMapDataPath()
Trigger(OBJECT_TOUCH_TRIGGER, "tres1", "tres1F");
function tres1F (heroName)
number=GetCurrentPlayer();
QuestionBoxForPlayers(number,dir.."Capture.txt", "captureF", "nocaptureF");
end;
function captureF (heroName)
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."gettreasure.txt");
StartCombat (heroName, nil, 2,
CREATURE_THANE, 20,
CREATURE_WARLORD, 20, nil);
end;
function alreadyCapturedF (heroName)
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."alreadyCaptured.txt");
end;
function nocaptureF (heroName)
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."Coward.txt");
end;
SetObjectEnabled("tres1", false);

бегло посмотрел, уже нашёл ошибку.
В функции QuestionBoxForPlayers вы задаёте функцию, которая будет вызываться при ответе "Да". Эта функция не принимает параметров, т.е.
в строке function captureF (heroName) в скобках должно быть пусто. Выход есть, например такой - до всего этого куска задать глобальную переменную, т.е. написать строчку типа hero=''.
Далее в функции, где написан QuestionBox, этой переменной присвоить имя героя таким образом: hero= heroName. И уже в функции StartCombat использовать эту переменную. Получится всё примерно так:
dir = GetMapDataPath()
hero='';
Trigger(OBJECT_TOUCH_TRIGGER, "tres1", "tres1F");
function tres1F (heroName)
number=GetCurrentPlayer();
hero=heroName;
QuestionBoxForPlayers(number,dir.."Capture.txt", "captureF", "nocaptureF");
end;
function captureF ()
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."gettreasure.txt");
StartCombat (hero, nil, 2,
CREATURE_THANE, 20,
CREATURE_WARLORD, 20, nil);
end;
function alreadyCapturedF (heroName)
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."alreadyCaptured.txt");
end;
function nocaptureF ()
number=GetCurrentPlayer();
hero='';
MessageBoxForPlayers(number,dir.."Coward.txt");
end;
SetObjectEnabled("tres1", nil);

позволю ещё себе заметить, что не прлохо было бы в функцию StartCombat добавить функцию, которая вызовится после сражения. Благодаря ей можно будет наградить героя, снять триггер со строения и т.п.
Кампании для Heroes V 3.1 (Трилогия):

Пробуждение зла
Нашествие из Преисподней
Смена эпох

Скачать все кампании одним архивом: Яндекс.Диск Google.Диск

You can download the set of 3 Campaigns (English version) here


Одиночные сценарии Heroes V 3.1:


Незваные гости
Красный кристалл
Синий кристалл
Закат тьмы

Мультиплеерные карты для Heroes V 3.1:

Легендарная война
Сердце вулкана
Передел мира
В ответ пользователю MasteR
Аватар пользователя
#1803
В эти функции можно передать параметры не совсем традиционным способом, если написать не "captureF", а "captureF('"..heroName.."')"
Да, и MessageBoxForPlayers принимает первым параметром не игрока, а его фильтр GetPlayerFilter(number). Разницы не будет видно, если игроков 1-2, но для >2 будут возникать ошибки. Желательно ещё сделать проверку, является ли игрок компом или нет.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю MasteR
Аватар пользователя
#1804
Juss456
бегло посмотрел, уже нашёл ошибку.
В функции QuestionBoxForPlayers вы задаёте функцию, которая будет вызываться при ответе "Да". Эта функция не принимает параметров, т.е.
в строке function captureF (heroName) в скобках должно быть пусто. Выход есть, например такой - до всего этого куска задать глобальную переменную, т.е. написать строчку типа hero=''.
Далее в функции, где написан QuestionBox, этой переменной присвоить имя героя таким образом: hero= heroName. И уже в функции StartCombat использовать эту переменную. Получится всё примерно так:
dir = GetMapDataPath()
hero='';
Trigger(OBJECT_TOUCH_TRIGGER, "tres1", "tres1F");
function tres1F (heroName)
number=GetCurrentPlayer();
hero=heroName;
QuestionBoxForPlayers(number,dir.."Capture.txt", "captureF", "nocaptureF");
end;
function captureF ()
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."gettreasure.txt");
StartCombat (hero, nil, 2,
CREATURE_THANE, 20,
CREATURE_WARLORD, 20, nil);
end;
function alreadyCapturedF (heroName)
number=GetCurrentPlayer();
MessageBoxForPlayers(number,dir.."alreadyCaptured.txt");
end;
function nocaptureF ()
number=GetCurrentPlayer();
hero='';
MessageBoxForPlayers(number,dir.."Coward.txt");
end;
SetObjectEnabled("tres1", nil);

позволю ещё себе заметить, что не прлохо было бы в функцию StartCombat добавить функцию, которая вызовится после сражения. Благодаря ей можно будет наградить героя, снять триггер со строения и т.п.

Спасибо большое, теперь всё работает! Учту на будущее, что подобные функции надо писать без параметров.
В StartCombat функцию после сражения я и планировала добавить, просто делаю всё поэтапно, чтобы не запутаться.

RedHeavenHero
Да, и MessageBoxForPlayers принимает первым параметром не игрока, а его фильтр GetPlayerFilter(number). Разницы не будет видно, если игроков 1-2, но для >2 будут возникать ошибки. Желательно ещё сделать проверку, является ли игрок компом или нет.
Доступа к этому объекту будет только у одного игрока. Поэтому я лучше оставлю, как есть. Но учту на будущее, спасибо!
Аватар пользователя
#1805
Доступа к этому объекту будет только у одного игрока. Поэтому я лучше оставлю, как есть. Но учту на будущее, спасибо!
Тогда почему бы не использовать обычный MessageBox?
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
#1806
RedHeavenHero
Тогда почему бы не использовать обычный MessageBox?
Потому что карта мультиплеерная.
Аватар пользователя
#1807
А, ну да, логично.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
#1808
А функция IsHeroAlive проверяет наличие героя в гарнизоне города?
Кампании для Heroes V 3.1 (Трилогия):

Пробуждение зла
Нашествие из Преисподней
Смена эпох

Скачать все кампании одним архивом: Яндекс.Диск Google.Диск

You can download the set of 3 Campaigns (English version) here


Одиночные сценарии Heroes V 3.1:


Незваные гости
Красный кристалл
Синий кристалл
Закат тьмы

Мультиплеерные карты для Heroes V 3.1:

Легендарная война
Сердце вулкана
Передел мира
В ответ пользователю MasteR
Аватар пользователя
#1809
Juss456
А функция IsHeroAlive проверяет наличие героя в гарнизоне города?
Не совсем понял. Функция выдает 1, если герой жив в т.ч. если он в гарнизоне города, иначе nil.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
#1810
RedHeavenHero
Не совсем понял. Функция выдает 1, если герой жив в т.ч. если он в гарнизоне города, иначе nil.

Ну да, я это и имел ввиду
Кампании для Heroes V 3.1 (Трилогия):

Пробуждение зла
Нашествие из Преисподней
Смена эпох

Скачать все кампании одним архивом: Яндекс.Диск Google.Диск

You can download the set of 3 Campaigns (English version) here


Одиночные сценарии Heroes V 3.1:


Незваные гости
Красный кристалл
Синий кристалл
Закат тьмы

Мультиплеерные карты для Heroes V 3.1:

Легендарная война
Сердце вулкана
Передел мира

Статистика

Приветствуем новейшего участника: leyu

Сейчас на сайте 6 пользователей 1445 гостей