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

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

Аватар пользователя
#2409
Какая используется функция для изменения названия и описания объекта?
И еще, подскажите как исправить ошибку: Value was NIL when getting global with name 'ChangeResource'?
function give_sulfur()
ChangeResource(4, 5, 'Biara')
Trigger(OBJECT_TOUCH_TRIGGER, 'kotel', nil);
end
В ответ пользователю WizardNazyr
Аватар пользователя
#2410
WizardNazyr
Какая используется функция для изменения названия и описания объекта?
И еще, подскажите как исправить ошибку: Value was NIL when getting global with name 'ChangeResource'?
function give_sulfur()
ChangeResource(4, 5, 'Biara')
Trigger(OBJECT_TOUCH_TRIGGER, 'kotel', nil);
end
1) OverrideObjectTooltipNameAndDescription(объект, путь_к_тексту_имени, путь_к_тексту_описания)
2) Нет такой функции ChangeResource, посмотрите в мануале, какие функции меняют ресурсы.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
#2411
RedHeavenHero
1) OverrideObjectTooltipNameAndDescription(объект, путь_к_тексту_имени, путь_к_тексту_описания)
2) Нет такой функции ChangeResource, посмотрите в мануале, какие функции меняют ресурсы.
1) Спасибо!
2) Забавно, в файле с описаниями функций, скачанного с heroesworld, описана функция "ChangeResource"
Вложения 1
1 файл • Общий размер: 22,4 KB
#2412
Доброго Времени Суток! допустим у меня есть герой, условный Винраэль и я хотел бы вызвать ему бой например с 200 латников и 150 гаргулей. Возможно ли это сделать в одиночной игре через консоль?
Аватар пользователя
#2414
Помогите, пожалуйста! Написал скрипт:
while GetObjectiveState('meet_demons', PLAYER_1) == OBJECTIVE_ACTIVE do
sleep(5)
end
SetObjectiveState('hero_from_hell', OBJECTIVE_ACTIVE, PLAYER_1);
MessageBox(GetMapDataPath()..'5.txt');

while 1 do
if GetObjectiveState('kill_daeva', PLAYER_1)== OBJECTIVE_COMPLETED
and
GetObjectiveState('capture_mines', PLAYER_1) == OBJECTIVE_COMLETED
then
sleep(5)
SetObjectiveState('hero_from_hell',OBJECTIVE_COMPLETED, PLAYER_1)
SetObjectiveState('go_throw_dungeon',OBJECTIVE_ACTIVE, PLAYER_1)
end
end
После того как выполняю задание "meet_demons" и закрываю сообщение "5" игра виснет. Что не так сделал?
Аватар пользователя
#2415
WizardNazyr, ваш код после сообщения можно описать как:
бесконечный цикл
{
проверка условия.
}
В цикл нужно добавить sleep. Плюс, лучше если он будет выполняться в отдельном потоке (по приведенному коду неясно обёрнут он в поток или нет).
Аватар пользователя
#2416
Так, теперь я что-то совсем не так сделал. Игра виснет после того как закрываю сообщение "2"
MessageBox(GetMapDataPath()..'1.txt');
MessageBox(GetMapDataPath()..'2.txt');
Trigger(REGION_ENTER_AND_STOP_TRIGGER, 'Svetlana_Vyacheslav1', 'talk1');
Trigger(REGION_ENTER_AND_STOP_TRIGGER, 'demons', 'talk2');
function talk1 ()
MessageBox(GetMapDataPath()..'3.txt')
Trigger(REGION_ENTER_AND_STOP_TRIGGER, 'Svetlana_Vyacheslav1', nil);
end
function talk2 ()
MessageBox(GetMapDataPath()..'4.txt');
Trigger(REGION_ENTER_AND_STOP_TRIGGER, 'demons', nil);
end
function task1()
while GetObjectiveState('meet_demons', PLAYER_1) == OBJECTIVE_ACTIVE do
sleep(5)
end
SetObjectiveState('hero_from_hell', OBJECTIVE_ACTIVE, PLAYER_1);
MessageBox(GetMapDataPath()..'5.txt');
end;
function task2()
while 1 do
if GetObjectiveState('kill_daeva', PLAYER_1)== OBJECTIVE_COMPLETED
and
GetObjectiveState('capture_mines', PLAYER_1) == OBJECTIVE_COMLETED
then
sleep(5)
SetObjectiveState('hero_from_hell',OBJECTIVE_COMPLETED, PLAYER_1)
SetObjectiveState('go_throw_dungeon',OBJECTIVE_ACTIVE, PLAYER_1)
end
end
end;
startThread(task1);
startThread(task2) ;


Добавлено через 14 минут
И да, я не совсем понял куда именно нужно поставить sleep и какое значение должно быть в скобках. :smile35:
Аватар пользователя
#2417
WizardNazyr, причина зависания та же. У вас же есть функция task1, которая выполняет аналогичную функцию и работает корректно. Просто переделайте task2 по аналогии с task1. В task2 во-первых цикл никогда не закончится (while 1 do), во-вторых в if нужно добавить else, срабатывающий пока условие не выполнено, и в нем sleep.
Аватар пользователя
#2418
Jack_of_shadows, огромное спасибо!
в task2 цикл сломал. else и sleep добавил. Все работает!
Аватар пользователя
#2419
Здравствуйте, появился вопрос: Если я "выключу" героя, который сидит в замке, то он будет себе в армию нанимать юнитов или нет? А другие герои смогут в этом городе скупать армию?
В ответ пользователю AstralLein
Аватар пользователя
#2421
AstralLein
Будет.

Смогут.
Спасибо.
Аватар пользователя
#2422
Кто знает почему этот скрипт перестал(раньше работал, но может я случайно что-то поменял) работать? Суть: на седьмой день недели в армии героя Markel2 появляются призраки(одного подходящего типа) равные числом его уровню. Еще одно условие - наличие призраков в армии героя.

Карты для героев 5

"Плата за любовь"
"Путь некроманта"
"Темные грани"
"Рок Гримхейма"
Аватар пользователя
#2423
AstralLein, могу только сказать, что лучше проверять существование героя перед любой операцией с ним. В остальном выглядит нормально. Надо смотреть отладочными сообщениями, может там раньше была ошибка в скрипте, и интерпретатор просто не дошел до 158 строчки и не повесил триггер нового дня.
Аватар пользователя
#2424
Ошибок нет. Вот в чем проблема. Есть правда еще один скрипт нового дня. Могу тоже показать. Герой существует, Маркел главный герой игрока.

Добавлено через 2 минуты
Кстати, как листать консоль вверх-вниз?
Карты для героев 5

"Плата за любовь"
"Путь некроманта"
"Темные грани"
"Рок Гримхейма"

Статистика

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

Сейчас на сайте 4 пользователей 1274 гостей